{
 "contractName": "ERC20",
 "abi": [
  {
   "anonymous": false,
   "inputs": [
    {
     "indexed": true,
     "name": "from",
     "type": "address"
    },
    {
     "indexed": true,
     "name": "to",
     "type": "address"
    },
    {
     "indexed": false,
     "name": "value",
     "type": "uint256"
    }
   ],
   "name": "Transfer",
   "type": "event"
  },
  {
   "anonymous": false,
   "inputs": [
    {
     "indexed": true,
     "name": "owner",
     "type": "address"
    },
    {
     "indexed": true,
     "name": "spender",
     "type": "address"
    },
    {
     "indexed": false,
     "name": "value",
     "type": "uint256"
    }
   ],
   "name": "Approval",
   "type": "event"
  },
  {
   "constant": false,
   "inputs": [
    {
     "name": "to",
     "type": "address"
    },
    {
     "name": "val",
     "type": "uint256"
    }
   ],
   "name": "mint",
   "outputs": [],
   "payable": false,
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "constant": true,
   "inputs": [],
   "name": "totalSupply",
   "outputs": [
    {
     "name": "",
     "type": "uint256"
    }
   ],
   "payable": false,
   "stateMutability": "view",
   "type": "function"
  },
  {
   "constant": true,
   "inputs": [
    {
     "name": "owner",
     "type": "address"
    }
   ],
   "name": "balanceOf",
   "outputs": [
    {
     "name": "",
     "type": "uint256"
    }
   ],
   "payable": false,
   "stateMutability": "view",
   "type": "function"
  },
  {
   "constant": true,
   "inputs": [
    {
     "name": "owner",
     "type": "address"
    },
    {
     "name": "spender",
     "type": "address"
    }
   ],
   "name": "allowance",
   "outputs": [
    {
     "name": "",
     "type": "uint256"
    }
   ],
   "payable": false,
   "stateMutability": "view",
   "type": "function"
  },
  {
   "constant": false,
   "inputs": [
    {
     "name": "to",
     "type": "address"
    },
    {
     "name": "value",
     "type": "uint256"
    }
   ],
   "name": "transfer",
   "outputs": [
    {
     "name": "",
     "type": "bool"
    }
   ],
   "payable": false,
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "constant": false,
   "inputs": [
    {
     "name": "spender",
     "type": "address"
    },
    {
     "name": "value",
     "type": "uint256"
    }
   ],
   "name": "approve",
   "outputs": [
    {
     "name": "",
     "type": "bool"
    }
   ],
   "payable": false,
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "constant": false,
   "inputs": [
    {
     "name": "from",
     "type": "address"
    },
    {
     "name": "to",
     "type": "address"
    },
    {
     "name": "value",
     "type": "uint256"
    }
   ],
   "name": "transferFrom",
   "outputs": [
    {
     "name": "",
     "type": "bool"
    }
   ],
   "payable": false,
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "constant": false,
   "inputs": [
    {
     "name": "spender",
     "type": "address"
    },
    {
     "name": "addedValue",
     "type": "uint256"
    }
   ],
   "name": "increaseAllowance",
   "outputs": [
    {
     "name": "",
     "type": "bool"
    }
   ],
   "payable": false,
   "stateMutability": "nonpayable",
   "type": "function"
  },
  {
   "constant": false,
   "inputs": [
    {
     "name": "spender",
     "type": "address"
    },
    {
     "name": "subtractedValue",
     "type": "uint256"
    }
   ],
   "name": "decreaseAllowance",
   "outputs": [
    {
     "name": "",
     "type": "bool"
    }
   ],
   "payable": false,
   "stateMutability": "nonpayable",
   "type": "function"
  }
 ],
 "bytecode": "0x608060405234801561001057600080fd5b50610629806100206000396000f3006080604052600436106100985763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461009d57806318160ddd146100d557806323b872dd146100fc578063395093511461012657806340c10f191461014a57806370a0823114610170578063a457c2d714610191578063a9059cbb146101b5578063dd62ed3e146101d9575b600080fd5b3480156100a957600080fd5b506100c1600160a060020a0360043516602435610200565b604080519115158252519081900360200190f35b3480156100e157600080fd5b506100ea61027e565b60408051918252519081900360200190f35b34801561010857600080fd5b506100c1600160a060020a0360043581169060243516604435610284565b34801561013257600080fd5b506100c1600160a060020a03600435166024356102f1565b34801561015657600080fd5b5061016e600160a060020a03600435166024356103a1565b005b34801561017c57600080fd5b506100ea600160a060020a03600435166103af565b34801561019d57600080fd5b506100c1600160a060020a03600435166024356103ca565b3480156101c157600080fd5b506100c1600160a060020a0360043516602435610415565b3480156101e557600080fd5b506100ea600160a060020a036004358116906024351661042b565b6000600160a060020a038316151561021757600080fd5b336000818152600160209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60025490565b600160a060020a03831660009081526001602090815260408083203384529091528120546102b8908363ffffffff61045616565b600160a060020a03851660009081526001602090815260408083203384529091529020556102e784848461046d565b5060019392505050565b6000600160a060020a038316151561030857600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461033c908363ffffffff61053a16565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6103ab8282610553565b5050565b600160a060020a031660009081526020819052604090205490565b6000600160a060020a03831615156103e157600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461033c908363ffffffff61045616565b600061042233848461046d565b50600192915050565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000808383111561046657600080fd5b5050900390565b600160a060020a038216151561048257600080fd5b600160a060020a0383166000908152602081905260409020546104ab908263ffffffff61045616565b600160a060020a0380851660009081526020819052604080822093909355908416815220546104e0908263ffffffff61053a16565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282018381101561054c57600080fd5b9392505050565b600160a060020a038216151561056857600080fd5b60025461057b908263ffffffff61053a16565b600255600160a060020a0382166000908152602081905260409020546105a7908263ffffffff61053a16565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350505600a165627a7a723058205d4b55c814f57b7f8e4de98a04c44aa090f8b55b5cccf7a0d6d00fcb9f0917980029",
 "deployedBytecode": "0x6080604052600436106100985763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461009d57806318160ddd146100d557806323b872dd146100fc578063395093511461012657806340c10f191461014a57806370a0823114610170578063a457c2d714610191578063a9059cbb146101b5578063dd62ed3e146101d9575b600080fd5b3480156100a957600080fd5b506100c1600160a060020a0360043516602435610200565b604080519115158252519081900360200190f35b3480156100e157600080fd5b506100ea61027e565b60408051918252519081900360200190f35b34801561010857600080fd5b506100c1600160a060020a0360043581169060243516604435610284565b34801561013257600080fd5b506100c1600160a060020a03600435166024356102f1565b34801561015657600080fd5b5061016e600160a060020a03600435166024356103a1565b005b34801561017c57600080fd5b506100ea600160a060020a03600435166103af565b34801561019d57600080fd5b506100c1600160a060020a03600435166024356103ca565b3480156101c157600080fd5b506100c1600160a060020a0360043516602435610415565b3480156101e557600080fd5b506100ea600160a060020a036004358116906024351661042b565b6000600160a060020a038316151561021757600080fd5b336000818152600160209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60025490565b600160a060020a03831660009081526001602090815260408083203384529091528120546102b8908363ffffffff61045616565b600160a060020a03851660009081526001602090815260408083203384529091529020556102e784848461046d565b5060019392505050565b6000600160a060020a038316151561030857600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461033c908363ffffffff61053a16565b336000818152600160209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6103ab8282610553565b5050565b600160a060020a031660009081526020819052604090205490565b6000600160a060020a03831615156103e157600080fd5b336000908152600160209081526040808320600160a060020a038716845290915290205461033c908363ffffffff61045616565b600061042233848461046d565b50600192915050565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000808383111561046657600080fd5b5050900390565b600160a060020a038216151561048257600080fd5b600160a060020a0383166000908152602081905260409020546104ab908263ffffffff61045616565b600160a060020a0380851660009081526020819052604080822093909355908416815220546104e0908263ffffffff61053a16565b600160a060020a038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282018381101561054c57600080fd5b9392505050565b600160a060020a038216151561056857600080fd5b60025461057b908263ffffffff61053a16565b600255600160a060020a0382166000908152602081905260409020546105a7908263ffffffff61053a16565b600160a060020a0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350505600a165627a7a723058205d4b55c814f57b7f8e4de98a04c44aa090f8b55b5cccf7a0d6d00fcb9f0917980029",
 "sourceMap": "2819:6750:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2819:6750:3;;;;;;;",
 "deployedSourceMap": "2819:6750:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4993:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4993:238:3;-1:-1:-1;;;;;4993:238:3;;;;;;;;;;;;;;;;;;;;;;;;;3194:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3194:89:3;;;;;;;;;;;;;;;;;;;;5517:225;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5517:225:3;-1:-1:-1;;;;;5517:225:3;;;;;;;;;;;;6213:317;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6213:317:3;-1:-1:-1;;;;;6213:317:3;;;;;;;3044:82;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3044:82:3;-1:-1:-1;;;;;3044:82:3;;;;;;;;;3492:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3492:104:3;-1:-1:-1;;;;;3492:104:3;;;;;7006:327;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7006:327:3;-1:-1:-1;;;;;7006:327:3;;;;;;;4220:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4220:137:3;-1:-1:-1;;;;;4220:137:3;;;;;;;3927:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3927:129:3;-1:-1:-1;;;;;3927:129:3;;;;;;;;;;4993:238;5058:4;-1:-1:-1;;;;;5082:21:3;;;;5074:30;;;;;;5124:10;5115:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;5115:29:3;;;;;;;;;;;;:37;;;5167:36;;;;;;;5115:29;;5124:10;5167:36;;;;;;;;;;;-1:-1:-1;5220:4:3;4993:238;;;;:::o;3194:89::-;3264:12;;3194:89;:::o;5517:225::-;-1:-1:-1;;;;;5641:14:3;;5596:4;5641:14;;;:8;:14;;;;;;;;5656:10;5641:26;;;;;;;;:37;;5672:5;5641:37;:30;:37;:::i;:::-;-1:-1:-1;;;;;5612:14:3;;;;;;:8;:14;;;;;;;;5627:10;5612:26;;;;;;;:66;5688:26;5621:4;5704:2;5708:5;5688:9;:26::i;:::-;-1:-1:-1;5731:4:3;5517:225;;;;;:::o;6213:317::-;6293:4;-1:-1:-1;;;;;6317:21:3;;;;6309:30;;;;;;6391:10;6382:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;6382:29:3;;;;;;;;;;:45;;6416:10;6382:45;:33;:45;:::i;:::-;6359:10;6350:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;6350:29:3;;;;;;;;;;;;:77;;;6442:60;;;;;;6350:29;;6442:60;;;;;;;;;;;-1:-1:-1;6519:4:3;6213:317;;;;:::o;3044:82::-;3105:14;3111:2;3115:3;3105:5;:14::i;:::-;3044:82;;:::o;3492:104::-;-1:-1:-1;;;;;3573:16:3;3547:7;3573:16;;;;;;;;;;;;3492:104::o;7006:327::-;7091:4;-1:-1:-1;;;;;7115:21:3;;;;7107:30;;;;;;7189:10;7180:20;;;;:8;:20;;;;;;;;-1:-1:-1;;;;;7180:29:3;;;;;;;;;;:50;;7214:15;7180:50;:33;:50;:::i;4220:137::-;4281:4;4297:32;4307:10;4319:2;4323:5;4297:9;:32::i;:::-;-1:-1:-1;4346:4:3;4220:137;;;;:::o;3927:129::-;-1:-1:-1;;;;;4025:15:3;;;3999:7;4025:15;;;:8;:15;;;;;;;;:24;;;;;;;;;;;;;3927:129::o;1167:145::-;1225:7;;1252:6;;;;1244:15;;;;;;-1:-1:-1;;1281:5:3;;;1167:145::o;7547:256::-;-1:-1:-1;;;;;7634:16:3;;;;7626:25;;;;;;-1:-1:-1;;;;;7680:15:3;;:9;:15;;;;;;;;;;;:26;;7700:5;7680:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;7662:15:3;;;:9;:15;;;;;;;;;;;:44;;;;7732:13;;;;;;;:24;;7750:5;7732:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;7716:13:3;;;:9;:13;;;;;;;;;;;;:40;;;;7771:25;;;;;;;7716:13;;7771:25;;;;;;;;;;;;;7547:256;;;:::o;1383:145::-;1441:7;1472:5;;;1495:6;;;;1487:15;;;;;;1520:1;1383:145;-1:-1:-1;;;1383:145:3:o;8146:263::-;-1:-1:-1;;;;;8220:21:3;;;;8212:30;;;;;;8268:12;;:23;;8285:5;8268:23;:16;:23;:::i;:::-;8253:12;:38;-1:-1:-1;;;;;8322:18:3;;:9;:18;;;;;;;;;;;:29;;8345:5;8322:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;8301:18:3;;:9;:18;;;;;;;;;;;:50;;;;8366:36;;;;;;;8301:18;;:9;;8366:36;;;;;;;;;;8146:263;;:::o",
 "source": "pragma solidity ^0.4.24;\n\n/**\n * @title SafeMath\n * @dev Math operations with safety checks that revert on error\n */\nlibrary SafeMath {\n    /**\n    * @dev Multiplies two numbers, reverts on overflow.\n    */\n    function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n        // benefit is lost if 'b' is also tested.\n        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n        if (a == 0) {\n            return 0;\n        }\n\n        uint256 c = a * b;\n        require(c / a == b);\n\n        return c;\n    }\n\n    /**\n    * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.\n    */\n    function div(uint256 a, uint256 b) internal pure returns (uint256) {\n        // Solidity only automatically asserts when dividing by 0\n        require(b > 0);\n        uint256 c = a / b;\n        // assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\n        return c;\n    }\n\n    /**\n    * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).\n    */\n    function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b <= a);\n        uint256 c = a - b;\n\n        return c;\n    }\n\n    /**\n    * @dev Adds two numbers, reverts on overflow.\n    */\n    function add(uint256 a, uint256 b) internal pure returns (uint256) {\n        uint256 c = a + b;\n        require(c >= a);\n\n        return c;\n    }\n\n    /**\n    * @dev Divides two numbers and returns the remainder (unsigned integer modulo),\n    * reverts when dividing by zero.\n    */\n    function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n        require(b != 0);\n        return a % b;\n    }\n}\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n    function totalSupply() external view returns (uint256);\n\n    function balanceOf(address who) external view returns (uint256);\n\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    function transfer(address to, uint256 value) external returns (bool);\n\n    function approve(address spender, uint256 value) external returns (bool);\n\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n\n/**\n * @title Standard ERC20 token\n *\n * @dev Implementation of the basic standard token.\n * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\n * Originally based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol\n */\ncontract ERC20 is IERC20 {\n    using SafeMath for uint256;\n\n    mapping (address => uint256) private _balances;\n\n    mapping (address => mapping (address => uint256)) private _allowed;\n\n    uint256 private _totalSupply;\n\n    function mint(address to, uint256 val) \n    public {\n        _mint(to, val);\n    }\n\n    /**\n    * @dev Total number of tokens in existence\n    */\n    function totalSupply() public view returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n    * @dev Gets the balance of the specified address.\n    * @param owner The address to query the balance of.\n    * @return An uint256 representing the amount owned by the passed address.\n    */\n    function balanceOf(address owner) public view returns (uint256) {\n        return _balances[owner];\n    }\n\n    /**\n     * @dev Function to check the amount of tokens that an owner allowed to a spender.\n     * @param owner address The address which owns the funds.\n     * @param spender address The address which will spend the funds.\n     * @return A uint256 specifying the amount of tokens still available for the spender.\n     */\n    function allowance(address owner, address spender) public view returns (uint256) {\n        return _allowed[owner][spender];\n    }\n\n    /**\n    * @dev Transfer token for a specified address\n    * @param to The address to transfer to.\n    * @param value The amount to be transferred.\n    */\n    function transfer(address to, uint256 value) public returns (bool) {\n        _transfer(msg.sender, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\n     * Beware that changing an allowance with this method brings the risk that someone may use both the old\n     * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\n     * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     * @param spender The address which will spend the funds.\n     * @param value The amount of tokens to be spent.\n     */\n    function approve(address spender, uint256 value) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = value;\n        emit Approval(msg.sender, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev Transfer tokens from one address to another\n     * @param from address The address which you want to send tokens from\n     * @param to address The address which you want to transfer to\n     * @param value uint256 the amount of tokens to be transferred\n     */\n    function transferFrom(address from, address to, uint256 value) public returns (bool) {\n        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);\n        _transfer(from, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Increase the amount of tokens that an owner allowed to a spender.\n     * approve should be called when allowed_[_spender] == 0. To increment\n     * allowed value is better to use this function to avoid 2 calls (and wait until\n     * the first transaction is mined)\n     * From MonolithDAO Token.sol\n     * @param spender The address which will spend the funds.\n     * @param addedValue The amount of tokens to increase the allowance by.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue);\n        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n        return true;\n    }\n\n    /**\n     * @dev Decrease the amount of tokens that an owner allowed to a spender.\n     * approve should be called when allowed_[_spender] == 0. To decrement\n     * allowed value is better to use this function to avoid 2 calls (and wait until\n     * the first transaction is mined)\n     * From MonolithDAO Token.sol\n     * @param spender The address which will spend the funds.\n     * @param subtractedValue The amount of tokens to decrease the allowance by.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {\n        require(spender != address(0));\n\n        _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue);\n        emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);\n        return true;\n    }\n\n    /**\n    * @dev Transfer token for a specified addresses\n    * @param from The address to transfer from.\n    * @param to The address to transfer to.\n    * @param value The amount to be transferred.\n    */\n    function _transfer(address from, address to, uint256 value) internal {\n        require(to != address(0));\n\n        _balances[from] = _balances[from].sub(value);\n        _balances[to] = _balances[to].add(value);\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Internal function that mints an amount of the token and assigns it to\n     * an account. This encapsulates the modification of balances such that the\n     * proper events are emitted.\n     * @param account The account that will receive the created tokens.\n     * @param value The amount that will be created.\n     */\n    function _mint(address account, uint256 value) internal {\n        require(account != address(0));\n\n        _totalSupply = _totalSupply.add(value);\n        _balances[account] = _balances[account].add(value);\n        emit Transfer(address(0), account, value);\n    }\n\n    /**\n     * @dev Internal function that burns an amount of the token of a given\n     * account.\n     * @param account The account whose tokens will be burnt.\n     * @param value The amount that will be burnt.\n     */\n    function _burn(address account, uint256 value) internal {\n        require(account != address(0));\n\n        _totalSupply = _totalSupply.sub(value);\n        _balances[account] = _balances[account].sub(value);\n        emit Transfer(account, address(0), value);\n    }\n\n    /**\n     * @dev Internal function that burns an amount of the token of a given\n     * account, deducting from the sender's allowance for said account. Uses the\n     * internal burn function.\n     * @param account The account whose tokens will be burnt.\n     * @param value The amount that will be burnt.\n     */\n    function _burnFrom(address account, uint256 value) internal {\n        // Should https://github.com/OpenZeppelin/zeppelin-solidity/issues/707 be accepted,\n        // this function needs to emit an event with the updated approval.\n        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);\n        _burn(account, value);\n    }\n}\n",
 "sourcePath": "/home/ed/working/realitio-contracts-newtest/truffle/contracts/ERC20Token.sol",
 "ast": {
  "absolutePath": "/home/ed/working/realitio-contracts-newtest/truffle/contracts/ERC20Token.sol",
  "exportedSymbols": {
   "ERC20": [
    1013
   ],
   "IERC20": [
    596
   ],
   "SafeMath": [
    529
   ]
  },
  "id": 1014,
  "nodeType": "SourceUnit",
  "nodes": [
   {
    "id": 403,
    "literals": [
     "solidity",
     "^",
     "0.4",
     ".24"
    ],
    "nodeType": "PragmaDirective",
    "src": "0:24:3"
   },
   {
    "baseContracts": [],
    "contractDependencies": [],
    "contractKind": "library",
    "documentation": "@title SafeMath\n@dev Math operations with safety checks that revert on error",
    "fullyImplemented": true,
    "id": 529,
    "linearizedBaseContracts": [
     529
    ],
    "name": "SafeMath",
    "nodeType": "ContractDefinition",
    "nodes": [
     {
      "body": {
       "id": 435,
       "nodeType": "Block",
       "src": "278:354:3",
       "statements": [
        {
         "condition": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 414,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 412,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 405,
           "src": "509:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "==",
          "rightExpression": {
           "argumentTypes": null,
           "hexValue": "30",
           "id": 413,
           "isConstant": false,
           "isLValue": false,
           "isPure": true,
           "kind": "number",
           "lValueRequested": false,
           "nodeType": "Literal",
           "src": "514:1:3",
           "subdenomination": null,
           "typeDescriptions": {
            "typeIdentifier": "t_rational_0_by_1",
            "typeString": "int_const 0"
           },
           "value": "0"
          },
          "src": "509:6:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "falseBody": null,
         "id": 418,
         "nodeType": "IfStatement",
         "src": "505:45:3",
         "trueBody": {
          "id": 417,
          "nodeType": "Block",
          "src": "517:33:3",
          "statements": [
           {
            "expression": {
             "argumentTypes": null,
             "hexValue": "30",
             "id": 415,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "number",
             "lValueRequested": false,
             "nodeType": "Literal",
             "src": "538:1:3",
             "subdenomination": null,
             "typeDescriptions": {
              "typeIdentifier": "t_rational_0_by_1",
              "typeString": "int_const 0"
             },
             "value": "0"
            },
            "functionReturnParameters": 411,
            "id": 416,
            "nodeType": "Return",
            "src": "531:8:3"
           }
          ]
         }
        },
        {
         "assignments": [
          420
         ],
         "declarations": [
          {
           "constant": false,
           "id": 420,
           "name": "c",
           "nodeType": "VariableDeclaration",
           "scope": 436,
           "src": "560:9:3",
           "stateVariable": false,
           "storageLocation": "default",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           },
           "typeName": {
            "id": 419,
            "name": "uint256",
            "nodeType": "ElementaryTypeName",
            "src": "560:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           },
           "value": null,
           "visibility": "internal"
          }
         ],
         "id": 424,
         "initialValue": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 423,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 421,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 405,
           "src": "572:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "*",
          "rightExpression": {
           "argumentTypes": null,
           "id": 422,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 407,
           "src": "576:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "572:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "nodeType": "VariableDeclarationStatement",
         "src": "560:17:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 430,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "commonType": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             },
             "id": 428,
             "isConstant": false,
             "isLValue": false,
             "isPure": false,
             "lValueRequested": false,
             "leftExpression": {
              "argumentTypes": null,
              "id": 426,
              "name": "c",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 420,
              "src": "595:1:3",
              "typeDescriptions": {
               "typeIdentifier": "t_uint256",
               "typeString": "uint256"
              }
             },
             "nodeType": "BinaryOperation",
             "operator": "/",
             "rightExpression": {
              "argumentTypes": null,
              "id": 427,
              "name": "a",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 405,
              "src": "599:1:3",
              "typeDescriptions": {
               "typeIdentifier": "t_uint256",
               "typeString": "uint256"
              }
             },
             "src": "595:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "==",
            "rightExpression": {
             "argumentTypes": null,
             "id": 429,
             "name": "b",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 407,
             "src": "604:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "src": "595:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 425,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "587:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 431,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "587:19:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 432,
         "nodeType": "ExpressionStatement",
         "src": "587:19:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 433,
          "name": "c",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 420,
          "src": "624:1:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 411,
         "id": 434,
         "nodeType": "Return",
         "src": "617:8:3"
        }
       ]
      },
      "documentation": "@dev Multiplies two numbers, reverts on overflow.",
      "id": 436,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "mul",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 408,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 405,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 436,
         "src": "224:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 404,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "224:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 407,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 436,
         "src": "235:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 406,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "235:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "223:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 411,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 410,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 436,
         "src": "269:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 409,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "269:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "268:9:3"
      },
      "scope": 529,
      "src": "211:421:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 459,
       "nodeType": "Block",
       "src": "817:229:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 448,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 446,
             "name": "b",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 440,
             "src": "901:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": ">",
            "rightExpression": {
             "argumentTypes": null,
             "hexValue": "30",
             "id": 447,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "number",
             "lValueRequested": false,
             "nodeType": "Literal",
             "src": "905:1:3",
             "subdenomination": null,
             "typeDescriptions": {
              "typeIdentifier": "t_rational_0_by_1",
              "typeString": "int_const 0"
             },
             "value": "0"
            },
            "src": "901:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 445,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "893:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 449,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "893:14:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 450,
         "nodeType": "ExpressionStatement",
         "src": "893:14:3"
        },
        {
         "assignments": [
          452
         ],
         "declarations": [
          {
           "constant": false,
           "id": 452,
           "name": "c",
           "nodeType": "VariableDeclaration",
           "scope": 460,
           "src": "917:9:3",
           "stateVariable": false,
           "storageLocation": "default",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           },
           "typeName": {
            "id": 451,
            "name": "uint256",
            "nodeType": "ElementaryTypeName",
            "src": "917:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           },
           "value": null,
           "visibility": "internal"
          }
         ],
         "id": 456,
         "initialValue": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 455,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 453,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 438,
           "src": "929:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "/",
          "rightExpression": {
           "argumentTypes": null,
           "id": 454,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 440,
           "src": "933:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "929:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "nodeType": "VariableDeclarationStatement",
         "src": "917:17:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 457,
          "name": "c",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 452,
          "src": "1038:1:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 444,
         "id": 458,
         "nodeType": "Return",
         "src": "1031:8:3"
        }
       ]
      },
      "documentation": "@dev Integer division of two numbers truncating the quotient, reverts on division by zero.",
      "id": 460,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "div",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 441,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 438,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 460,
         "src": "763:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 437,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "763:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 440,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 460,
         "src": "774:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 439,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "774:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "762:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 444,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 443,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 460,
         "src": "808:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 442,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "808:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "807:9:3"
      },
      "scope": 529,
      "src": "750:296:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 483,
       "nodeType": "Block",
       "src": "1234:78:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 472,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 470,
             "name": "b",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 464,
             "src": "1252:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "<=",
            "rightExpression": {
             "argumentTypes": null,
             "id": 471,
             "name": "a",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 462,
             "src": "1257:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "src": "1252:6:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 469,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "1244:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 473,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "1244:15:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 474,
         "nodeType": "ExpressionStatement",
         "src": "1244:15:3"
        },
        {
         "assignments": [
          476
         ],
         "declarations": [
          {
           "constant": false,
           "id": 476,
           "name": "c",
           "nodeType": "VariableDeclaration",
           "scope": 484,
           "src": "1269:9:3",
           "stateVariable": false,
           "storageLocation": "default",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           },
           "typeName": {
            "id": 475,
            "name": "uint256",
            "nodeType": "ElementaryTypeName",
            "src": "1269:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           },
           "value": null,
           "visibility": "internal"
          }
         ],
         "id": 480,
         "initialValue": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 479,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 477,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 462,
           "src": "1281:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "-",
          "rightExpression": {
           "argumentTypes": null,
           "id": 478,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 464,
           "src": "1285:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "1281:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "nodeType": "VariableDeclarationStatement",
         "src": "1269:17:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 481,
          "name": "c",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 476,
          "src": "1304:1:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 468,
         "id": 482,
         "nodeType": "Return",
         "src": "1297:8:3"
        }
       ]
      },
      "documentation": "@dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).",
      "id": 484,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "sub",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 465,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 462,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 484,
         "src": "1180:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 461,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1180:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 464,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 484,
         "src": "1191:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 463,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1191:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1179:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 468,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 467,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 484,
         "src": "1225:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 466,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1225:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1224:9:3"
      },
      "scope": 529,
      "src": "1167:145:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 507,
       "nodeType": "Block",
       "src": "1450:78:3",
       "statements": [
        {
         "assignments": [
          494
         ],
         "declarations": [
          {
           "constant": false,
           "id": 494,
           "name": "c",
           "nodeType": "VariableDeclaration",
           "scope": 508,
           "src": "1460:9:3",
           "stateVariable": false,
           "storageLocation": "default",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           },
           "typeName": {
            "id": 493,
            "name": "uint256",
            "nodeType": "ElementaryTypeName",
            "src": "1460:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           },
           "value": null,
           "visibility": "internal"
          }
         ],
         "id": 498,
         "initialValue": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 497,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 495,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 486,
           "src": "1472:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "+",
          "rightExpression": {
           "argumentTypes": null,
           "id": 496,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 488,
           "src": "1476:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "1472:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "nodeType": "VariableDeclarationStatement",
         "src": "1460:17:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 502,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 500,
             "name": "c",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 494,
             "src": "1495:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": ">=",
            "rightExpression": {
             "argumentTypes": null,
             "id": 501,
             "name": "a",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 486,
             "src": "1500:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "src": "1495:6:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 499,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "1487:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 503,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "1487:15:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 504,
         "nodeType": "ExpressionStatement",
         "src": "1487:15:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 505,
          "name": "c",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 494,
          "src": "1520:1:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 492,
         "id": 506,
         "nodeType": "Return",
         "src": "1513:8:3"
        }
       ]
      },
      "documentation": "@dev Adds two numbers, reverts on overflow.",
      "id": 508,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "add",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 489,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 486,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 508,
         "src": "1396:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 485,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1396:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 488,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 508,
         "src": "1407:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 487,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1407:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1395:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 492,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 491,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 508,
         "src": "1441:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 490,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1441:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1440:9:3"
      },
      "scope": 529,
      "src": "1383:145:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 527,
       "nodeType": "Block",
       "src": "1737:54:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 520,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 518,
             "name": "b",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 512,
             "src": "1755:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "hexValue": "30",
             "id": 519,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "number",
             "lValueRequested": false,
             "nodeType": "Literal",
             "src": "1760:1:3",
             "subdenomination": null,
             "typeDescriptions": {
              "typeIdentifier": "t_rational_0_by_1",
              "typeString": "int_const 0"
             },
             "value": "0"
            },
            "src": "1755:6:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 517,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "1747:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 521,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "1747:15:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 522,
         "nodeType": "ExpressionStatement",
         "src": "1747:15:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 525,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 523,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 510,
           "src": "1779:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "%",
          "rightExpression": {
           "argumentTypes": null,
           "id": 524,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 512,
           "src": "1783:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "1779:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 516,
         "id": 526,
         "nodeType": "Return",
         "src": "1772:12:3"
        }
       ]
      },
      "documentation": "@dev Divides two numbers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.",
      "id": 528,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "mod",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 513,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 510,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 528,
         "src": "1683:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 509,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1683:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 512,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 528,
         "src": "1694:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 511,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1694:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1682:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 516,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 515,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 528,
         "src": "1728:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 514,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1728:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1727:9:3"
      },
      "scope": 529,
      "src": "1670:121:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     }
    ],
    "scope": 1014,
    "src": "117:1676:3"
   },
   {
    "baseContracts": [],
    "contractDependencies": [],
    "contractKind": "interface",
    "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20",
    "fullyImplemented": false,
    "id": 596,
    "linearizedBaseContracts": [
     596
    ],
    "name": "IERC20",
    "nodeType": "ContractDefinition",
    "nodes": [
     {
      "body": null,
      "documentation": null,
      "id": 534,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "totalSupply",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 530,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "1927:2:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 533,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 532,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 534,
         "src": "1953:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 531,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1953:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1952:9:3"
      },
      "scope": 596,
      "src": "1907:55:3",
      "stateMutability": "view",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 541,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "balanceOf",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 537,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 536,
         "name": "who",
         "nodeType": "VariableDeclaration",
         "scope": 541,
         "src": "1987:11:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 535,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "1987:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1986:13:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 540,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 539,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 541,
         "src": "2023:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 538,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2023:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2022:9:3"
      },
      "scope": 596,
      "src": "1968:64:3",
      "stateMutability": "view",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 550,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "allowance",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 546,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 543,
         "name": "owner",
         "nodeType": "VariableDeclaration",
         "scope": 550,
         "src": "2057:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 542,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2057:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 545,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 550,
         "src": "2072:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 544,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2072:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2056:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 549,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 548,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 550,
         "src": "2112:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 547,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2112:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2111:9:3"
      },
      "scope": 596,
      "src": "2038:83:3",
      "stateMutability": "view",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 559,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "transfer",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 555,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 552,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 559,
         "src": "2145:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 551,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2145:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 554,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 559,
         "src": "2157:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 553,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2157:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2144:27:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 558,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 557,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 559,
         "src": "2190:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 556,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "2190:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2189:6:3"
      },
      "scope": 596,
      "src": "2127:69:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 568,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "approve",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 564,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 561,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 568,
         "src": "2219:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 560,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2219:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 563,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 568,
         "src": "2236:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 562,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2236:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2218:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 567,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 566,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 568,
         "src": "2269:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 565,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "2269:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2268:6:3"
      },
      "scope": 596,
      "src": "2202:73:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 579,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "transferFrom",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 575,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 570,
         "name": "from",
         "nodeType": "VariableDeclaration",
         "scope": 579,
         "src": "2303:12:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 569,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2303:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 572,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 579,
         "src": "2317:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 571,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2317:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 574,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 579,
         "src": "2329:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 573,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2329:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2302:41:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 578,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 577,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 579,
         "src": "2362:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 576,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "2362:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2361:6:3"
      },
      "scope": 596,
      "src": "2281:87:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "anonymous": false,
      "documentation": null,
      "id": 587,
      "name": "Transfer",
      "nodeType": "EventDefinition",
      "parameters": {
       "id": 586,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 581,
         "indexed": true,
         "name": "from",
         "nodeType": "VariableDeclaration",
         "scope": 587,
         "src": "2389:20:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 580,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2389:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 583,
         "indexed": true,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 587,
         "src": "2411:18:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 582,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2411:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 585,
         "indexed": false,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 587,
         "src": "2431:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 584,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2431:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2388:57:3"
      },
      "src": "2374:72:3"
     },
     {
      "anonymous": false,
      "documentation": null,
      "id": 595,
      "name": "Approval",
      "nodeType": "EventDefinition",
      "parameters": {
       "id": 594,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 589,
         "indexed": true,
         "name": "owner",
         "nodeType": "VariableDeclaration",
         "scope": 595,
         "src": "2467:21:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 588,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2467:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 591,
         "indexed": true,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 595,
         "src": "2490:23:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 590,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2490:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 593,
         "indexed": false,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 595,
         "src": "2515:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 592,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2515:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2466:63:3"
      },
      "src": "2452:78:3"
     }
    ],
    "scope": 1014,
    "src": "1884:648:3"
   },
   {
    "baseContracts": [
     {
      "arguments": null,
      "baseName": {
       "contractScope": null,
       "id": 597,
       "name": "IERC20",
       "nodeType": "UserDefinedTypeName",
       "referencedDeclaration": 596,
       "src": "2837:6:3",
       "typeDescriptions": {
        "typeIdentifier": "t_contract$_IERC20_$596",
        "typeString": "contract IERC20"
       }
      },
      "id": 598,
      "nodeType": "InheritanceSpecifier",
      "src": "2837:6:3"
     }
    ],
    "contractDependencies": [
     596
    ],
    "contractKind": "contract",
    "documentation": "@title Standard ERC20 token\n * @dev Implementation of the basic standard token.\nhttps://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\nOriginally based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol",
    "fullyImplemented": true,
    "id": 1013,
    "linearizedBaseContracts": [
     1013,
     596
    ],
    "name": "ERC20",
    "nodeType": "ContractDefinition",
    "nodes": [
     {
      "id": 601,
      "libraryName": {
       "contractScope": null,
       "id": 599,
       "name": "SafeMath",
       "nodeType": "UserDefinedTypeName",
       "referencedDeclaration": 529,
       "src": "2856:8:3",
       "typeDescriptions": {
        "typeIdentifier": "t_contract$_SafeMath_$529",
        "typeString": "library SafeMath"
       }
      },
      "nodeType": "UsingForDirective",
      "src": "2850:27:3",
      "typeName": {
       "id": 600,
       "name": "uint256",
       "nodeType": "ElementaryTypeName",
       "src": "2869:7:3",
       "typeDescriptions": {
        "typeIdentifier": "t_uint256",
        "typeString": "uint256"
       }
      }
     },
     {
      "constant": false,
      "id": 605,
      "name": "_balances",
      "nodeType": "VariableDeclaration",
      "scope": 1013,
      "src": "2883:46:3",
      "stateVariable": true,
      "storageLocation": "default",
      "typeDescriptions": {
       "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
       "typeString": "mapping(address => uint256)"
      },
      "typeName": {
       "id": 604,
       "keyType": {
        "id": 602,
        "name": "address",
        "nodeType": "ElementaryTypeName",
        "src": "2892:7:3",
        "typeDescriptions": {
         "typeIdentifier": "t_address",
         "typeString": "address"
        }
       },
       "nodeType": "Mapping",
       "src": "2883:28:3",
       "typeDescriptions": {
        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
        "typeString": "mapping(address => uint256)"
       },
       "valueType": {
        "id": 603,
        "name": "uint256",
        "nodeType": "ElementaryTypeName",
        "src": "2903:7:3",
        "typeDescriptions": {
         "typeIdentifier": "t_uint256",
         "typeString": "uint256"
        }
       }
      },
      "value": null,
      "visibility": "private"
     },
     {
      "constant": false,
      "id": 611,
      "name": "_allowed",
      "nodeType": "VariableDeclaration",
      "scope": 1013,
      "src": "2936:66:3",
      "stateVariable": true,
      "storageLocation": "default",
      "typeDescriptions": {
       "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
       "typeString": "mapping(address => mapping(address => uint256))"
      },
      "typeName": {
       "id": 610,
       "keyType": {
        "id": 606,
        "name": "address",
        "nodeType": "ElementaryTypeName",
        "src": "2945:7:3",
        "typeDescriptions": {
         "typeIdentifier": "t_address",
         "typeString": "address"
        }
       },
       "nodeType": "Mapping",
       "src": "2936:49:3",
       "typeDescriptions": {
        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
        "typeString": "mapping(address => mapping(address => uint256))"
       },
       "valueType": {
        "id": 609,
        "keyType": {
         "id": 607,
         "name": "address",
         "nodeType": "ElementaryTypeName",
         "src": "2965:7:3",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         }
        },
        "nodeType": "Mapping",
        "src": "2956:28:3",
        "typeDescriptions": {
         "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
         "typeString": "mapping(address => uint256)"
        },
        "valueType": {
         "id": 608,
         "name": "uint256",
         "nodeType": "ElementaryTypeName",
         "src": "2976:7:3",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         }
        }
       }
      },
      "value": null,
      "visibility": "private"
     },
     {
      "constant": false,
      "id": 613,
      "name": "_totalSupply",
      "nodeType": "VariableDeclaration",
      "scope": 1013,
      "src": "3009:28:3",
      "stateVariable": true,
      "storageLocation": "default",
      "typeDescriptions": {
       "typeIdentifier": "t_uint256",
       "typeString": "uint256"
      },
      "typeName": {
       "id": 612,
       "name": "uint256",
       "nodeType": "ElementaryTypeName",
       "src": "3009:7:3",
       "typeDescriptions": {
        "typeIdentifier": "t_uint256",
        "typeString": "uint256"
       }
      },
      "value": null,
      "visibility": "private"
     },
     {
      "body": {
       "id": 625,
       "nodeType": "Block",
       "src": "3095:31:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 621,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 615,
            "src": "3111:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 622,
            "name": "val",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 617,
            "src": "3115:3:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 620,
           "name": "_mint",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 940,
           "src": "3105:5:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,uint256)"
           }
          },
          "id": 623,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "3105:14:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 624,
         "nodeType": "ExpressionStatement",
         "src": "3105:14:3"
        }
       ]
      },
      "documentation": null,
      "id": 626,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "mint",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 618,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 615,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 626,
         "src": "3058:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 614,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "3058:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 617,
         "name": "val",
         "nodeType": "VariableDeclaration",
         "scope": 626,
         "src": "3070:11:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 616,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "3070:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3057:25:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 619,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "3095:0:3"
      },
      "scope": 1013,
      "src": "3044:82:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "public"
     },
     {
      "body": {
       "id": 633,
       "nodeType": "Block",
       "src": "3247:36:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "id": 631,
          "name": "_totalSupply",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 613,
          "src": "3264:12:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 630,
         "id": 632,
         "nodeType": "Return",
         "src": "3257:19:3"
        }
       ]
      },
      "documentation": "@dev Total number of tokens in existence",
      "id": 634,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "totalSupply",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 627,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "3214:2:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 630,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 629,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 634,
         "src": "3238:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 628,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "3238:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3237:9:3"
      },
      "scope": 1013,
      "src": "3194:89:3",
      "stateMutability": "view",
      "superFunction": 534,
      "visibility": "public"
     },
     {
      "body": {
       "id": 645,
       "nodeType": "Block",
       "src": "3556:40:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "baseExpression": {
           "argumentTypes": null,
           "id": 641,
           "name": "_balances",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 605,
           "src": "3573:9:3",
           "typeDescriptions": {
            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
            "typeString": "mapping(address => uint256)"
           }
          },
          "id": 643,
          "indexExpression": {
           "argumentTypes": null,
           "id": 642,
           "name": "owner",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 636,
           "src": "3583:5:3",
           "typeDescriptions": {
            "typeIdentifier": "t_address",
            "typeString": "address"
           }
          },
          "isConstant": false,
          "isLValue": true,
          "isPure": false,
          "lValueRequested": false,
          "nodeType": "IndexAccess",
          "src": "3573:16:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 640,
         "id": 644,
         "nodeType": "Return",
         "src": "3566:23:3"
        }
       ]
      },
      "documentation": "@dev Gets the balance of the specified address.\n@param owner The address to query the balance of.\n@return An uint256 representing the amount owned by the passed address.",
      "id": 646,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "balanceOf",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 637,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 636,
         "name": "owner",
         "nodeType": "VariableDeclaration",
         "scope": 646,
         "src": "3511:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 635,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "3511:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3510:15:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 640,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 639,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 646,
         "src": "3547:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 638,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "3547:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3546:9:3"
      },
      "scope": 1013,
      "src": "3492:104:3",
      "stateMutability": "view",
      "superFunction": 541,
      "visibility": "public"
     },
     {
      "body": {
       "id": 661,
       "nodeType": "Block",
       "src": "4008:48:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "baseExpression": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 655,
            "name": "_allowed",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 611,
            "src": "4025:8:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
             "typeString": "mapping(address => mapping(address => uint256))"
            }
           },
           "id": 657,
           "indexExpression": {
            "argumentTypes": null,
            "id": 656,
            "name": "owner",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 648,
            "src": "4034:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": false,
           "nodeType": "IndexAccess",
           "src": "4025:15:3",
           "typeDescriptions": {
            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
            "typeString": "mapping(address => uint256)"
           }
          },
          "id": 659,
          "indexExpression": {
           "argumentTypes": null,
           "id": 658,
           "name": "spender",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 650,
           "src": "4041:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_address",
            "typeString": "address"
           }
          },
          "isConstant": false,
          "isLValue": true,
          "isPure": false,
          "lValueRequested": false,
          "nodeType": "IndexAccess",
          "src": "4025:24:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 654,
         "id": 660,
         "nodeType": "Return",
         "src": "4018:31:3"
        }
       ]
      },
      "documentation": "@dev Function to check the amount of tokens that an owner allowed to a spender.\n@param owner address The address which owns the funds.\n@param spender address The address which will spend the funds.\n@return A uint256 specifying the amount of tokens still available for the spender.",
      "id": 662,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "allowance",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 651,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 648,
         "name": "owner",
         "nodeType": "VariableDeclaration",
         "scope": 662,
         "src": "3946:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 647,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "3946:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 650,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 662,
         "src": "3961:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 649,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "3961:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3945:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 654,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 653,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 662,
         "src": "3999:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 652,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "3999:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3998:9:3"
      },
      "scope": 1013,
      "src": "3927:129:3",
      "stateMutability": "view",
      "superFunction": 550,
      "visibility": "public"
     },
     {
      "body": {
       "id": 680,
       "nodeType": "Block",
       "src": "4287:70:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 672,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "4307:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 673,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "4307:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 674,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 664,
            "src": "4319:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 675,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 666,
            "src": "4323:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 671,
           "name": "_transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 898,
           "src": "4297:9:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 676,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "4297:32:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 677,
         "nodeType": "ExpressionStatement",
         "src": "4297:32:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 678,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "4346:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 670,
         "id": 679,
         "nodeType": "Return",
         "src": "4339:11:3"
        }
       ]
      },
      "documentation": "@dev Transfer token for a specified address\n@param to The address to transfer to.\n@param value The amount to be transferred.",
      "id": 681,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "transfer",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 667,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 664,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 681,
         "src": "4238:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 663,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "4238:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 666,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 681,
         "src": "4250:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 665,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "4250:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "4237:27:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 670,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 669,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 681,
         "src": "4281:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 668,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "4281:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "4280:6:3"
      },
      "scope": 1013,
      "src": "4220:137:3",
      "stateMutability": "nonpayable",
      "superFunction": 559,
      "visibility": "public"
     },
     {
      "body": {
       "id": 716,
       "nodeType": "Block",
       "src": "5064:167:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 695,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 691,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 683,
             "src": "5082:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 693,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "5101:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 692,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "5093:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 694,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "5093:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "5082:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 690,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "5074:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 696,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "5074:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 697,
         "nodeType": "ExpressionStatement",
         "src": "5074:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 705,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 698,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "5115:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 702,
            "indexExpression": {
             "argumentTypes": null,
             "expression": {
              "argumentTypes": null,
              "id": 699,
              "name": "msg",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 5342,
              "src": "5124:3:3",
              "typeDescriptions": {
               "typeIdentifier": "t_magic_message",
               "typeString": "msg"
              }
             },
             "id": 700,
             "isConstant": false,
             "isLValue": false,
             "isPure": false,
             "lValueRequested": false,
             "memberName": "sender",
             "nodeType": "MemberAccess",
             "referencedDeclaration": null,
             "src": "5124:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "5115:20:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 703,
           "indexExpression": {
            "argumentTypes": null,
            "id": 701,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 683,
            "src": "5136:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "5115:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "id": 704,
           "name": "value",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 685,
           "src": "5147:5:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "5115:37:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 706,
         "nodeType": "ExpressionStatement",
         "src": "5115:37:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 708,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "5176:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 709,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "5176:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 710,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 683,
            "src": "5188:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 711,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 685,
            "src": "5197:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 707,
           "name": "Approval",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 595,
           "src": "5167:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 712,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "5167:36:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 713,
         "nodeType": "EmitStatement",
         "src": "5162:41:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 714,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "5220:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 689,
         "id": 715,
         "nodeType": "Return",
         "src": "5213:11:3"
        }
       ]
      },
      "documentation": "@dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\nBeware that changing an allowance with this method brings the risk that someone may use both the old\nand the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\nrace condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\nhttps://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n@param spender The address which will spend the funds.\n@param value The amount of tokens to be spent.",
      "id": 717,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "approve",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 686,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 683,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 717,
         "src": "5010:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 682,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "5010:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 685,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 717,
         "src": "5027:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 684,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "5027:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "5009:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 689,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 688,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 717,
         "src": "5058:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 687,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "5058:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "5057:6:3"
      },
      "scope": 1013,
      "src": "4993:238:3",
      "stateMutability": "nonpayable",
      "superFunction": 568,
      "visibility": "public"
     },
     {
      "body": {
       "id": 753,
       "nodeType": "Block",
       "src": "5602:140:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "id": 743,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 728,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "5612:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 732,
            "indexExpression": {
             "argumentTypes": null,
             "id": 729,
             "name": "from",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 719,
             "src": "5621:4:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "5612:14:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 733,
           "indexExpression": {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 730,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "5627:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 731,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "5627:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "5612:26:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 741,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 723,
             "src": "5672:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "baseExpression": {
               "argumentTypes": null,
               "id": 734,
               "name": "_allowed",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 611,
               "src": "5641:8:3",
               "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
               }
              },
              "id": 736,
              "indexExpression": {
               "argumentTypes": null,
               "id": 735,
               "name": "from",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 719,
               "src": "5650:4:3",
               "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
               }
              },
              "isConstant": false,
              "isLValue": true,
              "isPure": false,
              "lValueRequested": false,
              "nodeType": "IndexAccess",
              "src": "5641:14:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 739,
             "indexExpression": {
              "argumentTypes": null,
              "expression": {
               "argumentTypes": null,
               "id": 737,
               "name": "msg",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 5342,
               "src": "5656:3:3",
               "typeDescriptions": {
                "typeIdentifier": "t_magic_message",
                "typeString": "msg"
               }
              },
              "id": 738,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "lValueRequested": false,
              "memberName": "sender",
              "nodeType": "MemberAccess",
              "referencedDeclaration": null,
              "src": "5656:10:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "5641:26:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 740,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "5641:30:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 742,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "5641:37:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "5612:66:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 744,
         "nodeType": "ExpressionStatement",
         "src": "5612:66:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 746,
            "name": "from",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 719,
            "src": "5698:4:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 747,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 721,
            "src": "5704:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 748,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 723,
            "src": "5708:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 745,
           "name": "_transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 898,
           "src": "5688:9:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 749,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "5688:26:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 750,
         "nodeType": "ExpressionStatement",
         "src": "5688:26:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 751,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "5731:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 727,
         "id": 752,
         "nodeType": "Return",
         "src": "5724:11:3"
        }
       ]
      },
      "documentation": "@dev Transfer tokens from one address to another\n@param from address The address which you want to send tokens from\n@param to address The address which you want to transfer to\n@param value uint256 the amount of tokens to be transferred",
      "id": 754,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "transferFrom",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 724,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 719,
         "name": "from",
         "nodeType": "VariableDeclaration",
         "scope": 754,
         "src": "5539:12:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 718,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "5539:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 721,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 754,
         "src": "5553:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 720,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "5553:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 723,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 754,
         "src": "5565:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 722,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "5565:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "5538:41:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 727,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 726,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 754,
         "src": "5596:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 725,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "5596:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "5595:6:3"
      },
      "scope": 1013,
      "src": "5517:225:3",
      "stateMutability": "nonpayable",
      "superFunction": 579,
      "visibility": "public"
     },
     {
      "body": {
       "id": 802,
       "nodeType": "Block",
       "src": "6299:231:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 768,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 764,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 756,
             "src": "6317:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 766,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "6336:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 765,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "6328:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 767,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "6328:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "6317:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 763,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "6309:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 769,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "6309:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 770,
         "nodeType": "ExpressionStatement",
         "src": "6309:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 786,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 771,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "6350:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 775,
            "indexExpression": {
             "argumentTypes": null,
             "expression": {
              "argumentTypes": null,
              "id": 772,
              "name": "msg",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 5342,
              "src": "6359:3:3",
              "typeDescriptions": {
               "typeIdentifier": "t_magic_message",
               "typeString": "msg"
              }
             },
             "id": 773,
             "isConstant": false,
             "isLValue": false,
             "isPure": false,
             "lValueRequested": false,
             "memberName": "sender",
             "nodeType": "MemberAccess",
             "referencedDeclaration": null,
             "src": "6359:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "6350:20:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 776,
           "indexExpression": {
            "argumentTypes": null,
            "id": 774,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 756,
            "src": "6371:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "6350:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 784,
             "name": "addedValue",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 758,
             "src": "6416:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "baseExpression": {
               "argumentTypes": null,
               "id": 777,
               "name": "_allowed",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 611,
               "src": "6382:8:3",
               "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
               }
              },
              "id": 780,
              "indexExpression": {
               "argumentTypes": null,
               "expression": {
                "argumentTypes": null,
                "id": 778,
                "name": "msg",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 5342,
                "src": "6391:3:3",
                "typeDescriptions": {
                 "typeIdentifier": "t_magic_message",
                 "typeString": "msg"
                }
               },
               "id": 779,
               "isConstant": false,
               "isLValue": false,
               "isPure": false,
               "lValueRequested": false,
               "memberName": "sender",
               "nodeType": "MemberAccess",
               "referencedDeclaration": null,
               "src": "6391:10:3",
               "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
               }
              },
              "isConstant": false,
              "isLValue": true,
              "isPure": false,
              "lValueRequested": false,
              "nodeType": "IndexAccess",
              "src": "6382:20:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 782,
             "indexExpression": {
              "argumentTypes": null,
              "id": 781,
              "name": "spender",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 756,
              "src": "6403:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "6382:29:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 783,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "add",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 508,
            "src": "6382:33:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 785,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "6382:45:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "6350:77:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 787,
         "nodeType": "ExpressionStatement",
         "src": "6350:77:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 789,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "6451:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 790,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "6451:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 791,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 756,
            "src": "6463:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 792,
              "name": "_allowed",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 611,
              "src": "6472:8:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
               "typeString": "mapping(address => mapping(address => uint256))"
              }
             },
             "id": 795,
             "indexExpression": {
              "argumentTypes": null,
              "expression": {
               "argumentTypes": null,
               "id": 793,
               "name": "msg",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 5342,
               "src": "6481:3:3",
               "typeDescriptions": {
                "typeIdentifier": "t_magic_message",
                "typeString": "msg"
               }
              },
              "id": 794,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "lValueRequested": false,
              "memberName": "sender",
              "nodeType": "MemberAccess",
              "referencedDeclaration": null,
              "src": "6481:10:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "6472:20:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
             }
            },
            "id": 797,
            "indexExpression": {
             "argumentTypes": null,
             "id": 796,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 756,
             "src": "6493:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "6472:29:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 788,
           "name": "Approval",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 595,
           "src": "6442:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 798,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "6442:60:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 799,
         "nodeType": "EmitStatement",
         "src": "6437:65:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 800,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "6519:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 762,
         "id": 801,
         "nodeType": "Return",
         "src": "6512:11:3"
        }
       ]
      },
      "documentation": "@dev Increase the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To increment\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\n@param spender The address which will spend the funds.\n@param addedValue The amount of tokens to increase the allowance by.",
      "id": 803,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "increaseAllowance",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 759,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 756,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 803,
         "src": "6240:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 755,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "6240:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 758,
         "name": "addedValue",
         "nodeType": "VariableDeclaration",
         "scope": 803,
         "src": "6257:18:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 757,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "6257:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "6239:37:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 762,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 761,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 803,
         "src": "6293:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 760,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "6293:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "6292:6:3"
      },
      "scope": 1013,
      "src": "6213:317:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "public"
     },
     {
      "body": {
       "id": 851,
       "nodeType": "Block",
       "src": "7097:236:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 817,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 813,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 805,
             "src": "7115:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 815,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "7134:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 814,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "7126:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 816,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "7126:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "7115:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 812,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "7107:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 818,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "7107:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 819,
         "nodeType": "ExpressionStatement",
         "src": "7107:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 835,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 820,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "7148:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 824,
            "indexExpression": {
             "argumentTypes": null,
             "expression": {
              "argumentTypes": null,
              "id": 821,
              "name": "msg",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 5342,
              "src": "7157:3:3",
              "typeDescriptions": {
               "typeIdentifier": "t_magic_message",
               "typeString": "msg"
              }
             },
             "id": 822,
             "isConstant": false,
             "isLValue": false,
             "isPure": false,
             "lValueRequested": false,
             "memberName": "sender",
             "nodeType": "MemberAccess",
             "referencedDeclaration": null,
             "src": "7157:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "7148:20:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 825,
           "indexExpression": {
            "argumentTypes": null,
            "id": 823,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 805,
            "src": "7169:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "7148:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 833,
             "name": "subtractedValue",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 807,
             "src": "7214:15:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "baseExpression": {
               "argumentTypes": null,
               "id": 826,
               "name": "_allowed",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 611,
               "src": "7180:8:3",
               "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
               }
              },
              "id": 829,
              "indexExpression": {
               "argumentTypes": null,
               "expression": {
                "argumentTypes": null,
                "id": 827,
                "name": "msg",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 5342,
                "src": "7189:3:3",
                "typeDescriptions": {
                 "typeIdentifier": "t_magic_message",
                 "typeString": "msg"
                }
               },
               "id": 828,
               "isConstant": false,
               "isLValue": false,
               "isPure": false,
               "lValueRequested": false,
               "memberName": "sender",
               "nodeType": "MemberAccess",
               "referencedDeclaration": null,
               "src": "7189:10:3",
               "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
               }
              },
              "isConstant": false,
              "isLValue": true,
              "isPure": false,
              "lValueRequested": false,
              "nodeType": "IndexAccess",
              "src": "7180:20:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 831,
             "indexExpression": {
              "argumentTypes": null,
              "id": 830,
              "name": "spender",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 805,
              "src": "7201:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "7180:29:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 832,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "7180:33:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 834,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "7180:50:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "7148:82:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 836,
         "nodeType": "ExpressionStatement",
         "src": "7148:82:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 838,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "7254:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 839,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "7254:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 840,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 805,
            "src": "7266:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 841,
              "name": "_allowed",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 611,
              "src": "7275:8:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
               "typeString": "mapping(address => mapping(address => uint256))"
              }
             },
             "id": 844,
             "indexExpression": {
              "argumentTypes": null,
              "expression": {
               "argumentTypes": null,
               "id": 842,
               "name": "msg",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 5342,
               "src": "7284:3:3",
               "typeDescriptions": {
                "typeIdentifier": "t_magic_message",
                "typeString": "msg"
               }
              },
              "id": 843,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "lValueRequested": false,
              "memberName": "sender",
              "nodeType": "MemberAccess",
              "referencedDeclaration": null,
              "src": "7284:10:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "7275:20:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
             }
            },
            "id": 846,
            "indexExpression": {
             "argumentTypes": null,
             "id": 845,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 805,
             "src": "7296:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "7275:29:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 837,
           "name": "Approval",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 595,
           "src": "7245:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 847,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "7245:60:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 848,
         "nodeType": "EmitStatement",
         "src": "7240:65:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 849,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "7322:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 811,
         "id": 850,
         "nodeType": "Return",
         "src": "7315:11:3"
        }
       ]
      },
      "documentation": "@dev Decrease the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To decrement\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\n@param spender The address which will spend the funds.\n@param subtractedValue The amount of tokens to decrease the allowance by.",
      "id": 852,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "decreaseAllowance",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 808,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 805,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 852,
         "src": "7033:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 804,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "7033:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 807,
         "name": "subtractedValue",
         "nodeType": "VariableDeclaration",
         "scope": 852,
         "src": "7050:23:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 806,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "7050:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "7032:42:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 811,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 810,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 852,
         "src": "7091:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 809,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "7091:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "7090:6:3"
      },
      "scope": 1013,
      "src": "7006:327:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "public"
     },
     {
      "body": {
       "id": 897,
       "nodeType": "Block",
       "src": "7616:187:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 866,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 862,
             "name": "to",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 856,
             "src": "7634:2:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 864,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "7648:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 863,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "7640:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 865,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "7640:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "7634:16:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 861,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "7626:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 867,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "7626:25:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 868,
         "nodeType": "ExpressionStatement",
         "src": "7626:25:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 878,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 869,
            "name": "_balances",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 605,
            "src": "7662:9:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 871,
           "indexExpression": {
            "argumentTypes": null,
            "id": 870,
            "name": "from",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 854,
            "src": "7672:4:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "7662:15:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 876,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 858,
             "src": "7700:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 872,
              "name": "_balances",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 605,
              "src": "7680:9:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 874,
             "indexExpression": {
              "argumentTypes": null,
              "id": 873,
              "name": "from",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 854,
              "src": "7690:4:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "7680:15:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 875,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "7680:19:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 877,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "7680:26:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "7662:44:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 879,
         "nodeType": "ExpressionStatement",
         "src": "7662:44:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 889,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 880,
            "name": "_balances",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 605,
            "src": "7716:9:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 882,
           "indexExpression": {
            "argumentTypes": null,
            "id": 881,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 856,
            "src": "7726:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "7716:13:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 887,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 858,
             "src": "7750:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 883,
              "name": "_balances",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 605,
              "src": "7732:9:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 885,
             "indexExpression": {
              "argumentTypes": null,
              "id": 884,
              "name": "to",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 856,
              "src": "7742:2:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "7732:13:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 886,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "add",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 508,
            "src": "7732:17:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 888,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "7732:24:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "7716:40:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 890,
         "nodeType": "ExpressionStatement",
         "src": "7716:40:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 892,
            "name": "from",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 854,
            "src": "7780:4:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 893,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 856,
            "src": "7786:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 894,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 858,
            "src": "7790:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 891,
           "name": "Transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 587,
           "src": "7771:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 895,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "7771:25:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 896,
         "nodeType": "EmitStatement",
         "src": "7766:30:3"
        }
       ]
      },
      "documentation": "@dev Transfer token for a specified addresses\n@param from The address to transfer from.\n@param to The address to transfer to.\n@param value The amount to be transferred.",
      "id": 898,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "_transfer",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 859,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 854,
         "name": "from",
         "nodeType": "VariableDeclaration",
         "scope": 898,
         "src": "7566:12:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 853,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "7566:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 856,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 898,
         "src": "7580:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 855,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "7580:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 858,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 898,
         "src": "7592:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 857,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "7592:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "7565:41:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 860,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "7616:0:3"
      },
      "scope": 1013,
      "src": "7547:256:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 939,
       "nodeType": "Block",
       "src": "8202:207:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 910,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 906,
             "name": "account",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 900,
             "src": "8220:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 908,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "8239:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 907,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "8231:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 909,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "8231:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "8220:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 905,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "8212:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 911,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "8212:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 912,
         "nodeType": "ExpressionStatement",
         "src": "8212:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 918,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "id": 913,
           "name": "_totalSupply",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 613,
           "src": "8253:12:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 916,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 902,
             "src": "8285:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "id": 914,
             "name": "_totalSupply",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 613,
             "src": "8268:12:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 915,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "add",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 508,
            "src": "8268:16:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 917,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "8268:23:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "8253:38:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 919,
         "nodeType": "ExpressionStatement",
         "src": "8253:38:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 929,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 920,
            "name": "_balances",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 605,
            "src": "8301:9:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 922,
           "indexExpression": {
            "argumentTypes": null,
            "id": 921,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 900,
            "src": "8311:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "8301:18:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 927,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 902,
             "src": "8345:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 923,
              "name": "_balances",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 605,
              "src": "8322:9:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 925,
             "indexExpression": {
              "argumentTypes": null,
              "id": 924,
              "name": "account",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 900,
              "src": "8332:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "8322:18:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 926,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "add",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 508,
            "src": "8322:22:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 928,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "8322:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "8301:50:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 930,
         "nodeType": "ExpressionStatement",
         "src": "8301:50:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "arguments": [
             {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 933,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "8383:1:3",
              "subdenomination": null,
              "typeDescriptions": {
               "typeIdentifier": "t_rational_0_by_1",
               "typeString": "int_const 0"
              },
              "value": "0"
             }
            ],
            "expression": {
             "argumentTypes": [
              {
               "typeIdentifier": "t_rational_0_by_1",
               "typeString": "int_const 0"
              }
             ],
             "id": 932,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "lValueRequested": false,
             "nodeType": "ElementaryTypeNameExpression",
             "src": "8375:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_type$_t_address_$",
              "typeString": "type(address)"
             },
             "typeName": "address"
            },
            "id": 934,
            "isConstant": false,
            "isLValue": false,
            "isPure": true,
            "kind": "typeConversion",
            "lValueRequested": false,
            "names": [],
            "nodeType": "FunctionCall",
            "src": "8375:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 935,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 900,
            "src": "8387:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 936,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 902,
            "src": "8396:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 931,
           "name": "Transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 587,
           "src": "8366:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 937,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "8366:36:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 938,
         "nodeType": "EmitStatement",
         "src": "8361:41:3"
        }
       ]
      },
      "documentation": "@dev Internal function that mints an amount of the token and assigns it to\nan account. This encapsulates the modification of balances such that the\nproper events are emitted.\n@param account The account that will receive the created tokens.\n@param value The amount that will be created.",
      "id": 940,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "_mint",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 903,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 900,
         "name": "account",
         "nodeType": "VariableDeclaration",
         "scope": 940,
         "src": "8161:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 899,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "8161:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 902,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 940,
         "src": "8178:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 901,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "8178:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "8160:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 904,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "8202:0:3"
      },
      "scope": 1013,
      "src": "8146:263:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 981,
       "nodeType": "Block",
       "src": "8691:207:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 952,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 948,
             "name": "account",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 942,
             "src": "8709:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 950,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "8728:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 949,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "8720:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 951,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "8720:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "8709:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 947,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "8701:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 953,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "8701:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 954,
         "nodeType": "ExpressionStatement",
         "src": "8701:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 960,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "id": 955,
           "name": "_totalSupply",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 613,
           "src": "8742:12:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 958,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 944,
             "src": "8774:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "id": 956,
             "name": "_totalSupply",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 613,
             "src": "8757:12:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 957,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "8757:16:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 959,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "8757:23:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "8742:38:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 961,
         "nodeType": "ExpressionStatement",
         "src": "8742:38:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 971,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 962,
            "name": "_balances",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 605,
            "src": "8790:9:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 964,
           "indexExpression": {
            "argumentTypes": null,
            "id": 963,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 942,
            "src": "8800:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "8790:18:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 969,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 944,
             "src": "8834:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 965,
              "name": "_balances",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 605,
              "src": "8811:9:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 967,
             "indexExpression": {
              "argumentTypes": null,
              "id": 966,
              "name": "account",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 942,
              "src": "8821:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "8811:18:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 968,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "8811:22:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 970,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "8811:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "8790:50:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 972,
         "nodeType": "ExpressionStatement",
         "src": "8790:50:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 974,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 942,
            "src": "8864:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "arguments": [
             {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 976,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "8881:1:3",
              "subdenomination": null,
              "typeDescriptions": {
               "typeIdentifier": "t_rational_0_by_1",
               "typeString": "int_const 0"
              },
              "value": "0"
             }
            ],
            "expression": {
             "argumentTypes": [
              {
               "typeIdentifier": "t_rational_0_by_1",
               "typeString": "int_const 0"
              }
             ],
             "id": 975,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "lValueRequested": false,
             "nodeType": "ElementaryTypeNameExpression",
             "src": "8873:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_type$_t_address_$",
              "typeString": "type(address)"
             },
             "typeName": "address"
            },
            "id": 977,
            "isConstant": false,
            "isLValue": false,
            "isPure": true,
            "kind": "typeConversion",
            "lValueRequested": false,
            "names": [],
            "nodeType": "FunctionCall",
            "src": "8873:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 978,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 944,
            "src": "8885:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 973,
           "name": "Transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 587,
           "src": "8855:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 979,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "8855:36:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 980,
         "nodeType": "EmitStatement",
         "src": "8850:41:3"
        }
       ]
      },
      "documentation": "@dev Internal function that burns an amount of the token of a given\naccount.\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.",
      "id": 982,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "_burn",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 945,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 942,
         "name": "account",
         "nodeType": "VariableDeclaration",
         "scope": 982,
         "src": "8650:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 941,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "8650:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 944,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 982,
         "src": "8667:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 943,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "8667:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "8649:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 946,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "8691:0:3"
      },
      "scope": 1013,
      "src": "8635:263:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 1011,
       "nodeType": "Block",
       "src": "9280:287:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "id": 1004,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 989,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "9457:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 993,
            "indexExpression": {
             "argumentTypes": null,
             "id": 990,
             "name": "account",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 984,
             "src": "9466:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "9457:17:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 994,
           "indexExpression": {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 991,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "9475:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 992,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "9475:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "9457:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 1002,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 986,
             "src": "9523:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "baseExpression": {
               "argumentTypes": null,
               "id": 995,
               "name": "_allowed",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 611,
               "src": "9489:8:3",
               "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
               }
              },
              "id": 997,
              "indexExpression": {
               "argumentTypes": null,
               "id": 996,
               "name": "account",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 984,
               "src": "9498:7:3",
               "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
               }
              },
              "isConstant": false,
              "isLValue": true,
              "isPure": false,
              "lValueRequested": false,
              "nodeType": "IndexAccess",
              "src": "9489:17:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 1000,
             "indexExpression": {
              "argumentTypes": null,
              "expression": {
               "argumentTypes": null,
               "id": 998,
               "name": "msg",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 5342,
               "src": "9507:3:3",
               "typeDescriptions": {
                "typeIdentifier": "t_magic_message",
                "typeString": "msg"
               }
              },
              "id": 999,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "lValueRequested": false,
              "memberName": "sender",
              "nodeType": "MemberAccess",
              "referencedDeclaration": null,
              "src": "9507:10:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "9489:29:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 1001,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "9489:33:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 1003,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "9489:40:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "9457:72:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 1005,
         "nodeType": "ExpressionStatement",
         "src": "9457:72:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 1007,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 984,
            "src": "9545:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 1008,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 986,
            "src": "9554:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 1006,
           "name": "_burn",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 982,
           "src": "9539:5:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,uint256)"
           }
          },
          "id": 1009,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "9539:21:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 1010,
         "nodeType": "ExpressionStatement",
         "src": "9539:21:3"
        }
       ]
      },
      "documentation": "@dev Internal function that burns an amount of the token of a given\naccount, deducting from the sender's allowance for said account. Uses the\ninternal burn function.\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.",
      "id": 1012,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "_burnFrom",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 987,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 984,
         "name": "account",
         "nodeType": "VariableDeclaration",
         "scope": 1012,
         "src": "9239:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 983,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "9239:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 986,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 1012,
         "src": "9256:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 985,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "9256:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "9238:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 988,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "9280:0:3"
      },
      "scope": 1013,
      "src": "9220:347:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "internal"
     }
    ],
    "scope": 1014,
    "src": "2819:6750:3"
   }
  ],
  "src": "0:9570:3"
 },
 "legacyAST": {
  "absolutePath": "/home/ed/working/realitio-contracts-newtest/truffle/contracts/ERC20Token.sol",
  "exportedSymbols": {
   "ERC20": [
    1013
   ],
   "IERC20": [
    596
   ],
   "SafeMath": [
    529
   ]
  },
  "id": 1014,
  "nodeType": "SourceUnit",
  "nodes": [
   {
    "id": 403,
    "literals": [
     "solidity",
     "^",
     "0.4",
     ".24"
    ],
    "nodeType": "PragmaDirective",
    "src": "0:24:3"
   },
   {
    "baseContracts": [],
    "contractDependencies": [],
    "contractKind": "library",
    "documentation": "@title SafeMath\n@dev Math operations with safety checks that revert on error",
    "fullyImplemented": true,
    "id": 529,
    "linearizedBaseContracts": [
     529
    ],
    "name": "SafeMath",
    "nodeType": "ContractDefinition",
    "nodes": [
     {
      "body": {
       "id": 435,
       "nodeType": "Block",
       "src": "278:354:3",
       "statements": [
        {
         "condition": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 414,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 412,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 405,
           "src": "509:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "==",
          "rightExpression": {
           "argumentTypes": null,
           "hexValue": "30",
           "id": 413,
           "isConstant": false,
           "isLValue": false,
           "isPure": true,
           "kind": "number",
           "lValueRequested": false,
           "nodeType": "Literal",
           "src": "514:1:3",
           "subdenomination": null,
           "typeDescriptions": {
            "typeIdentifier": "t_rational_0_by_1",
            "typeString": "int_const 0"
           },
           "value": "0"
          },
          "src": "509:6:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "falseBody": null,
         "id": 418,
         "nodeType": "IfStatement",
         "src": "505:45:3",
         "trueBody": {
          "id": 417,
          "nodeType": "Block",
          "src": "517:33:3",
          "statements": [
           {
            "expression": {
             "argumentTypes": null,
             "hexValue": "30",
             "id": 415,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "number",
             "lValueRequested": false,
             "nodeType": "Literal",
             "src": "538:1:3",
             "subdenomination": null,
             "typeDescriptions": {
              "typeIdentifier": "t_rational_0_by_1",
              "typeString": "int_const 0"
             },
             "value": "0"
            },
            "functionReturnParameters": 411,
            "id": 416,
            "nodeType": "Return",
            "src": "531:8:3"
           }
          ]
         }
        },
        {
         "assignments": [
          420
         ],
         "declarations": [
          {
           "constant": false,
           "id": 420,
           "name": "c",
           "nodeType": "VariableDeclaration",
           "scope": 436,
           "src": "560:9:3",
           "stateVariable": false,
           "storageLocation": "default",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           },
           "typeName": {
            "id": 419,
            "name": "uint256",
            "nodeType": "ElementaryTypeName",
            "src": "560:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           },
           "value": null,
           "visibility": "internal"
          }
         ],
         "id": 424,
         "initialValue": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 423,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 421,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 405,
           "src": "572:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "*",
          "rightExpression": {
           "argumentTypes": null,
           "id": 422,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 407,
           "src": "576:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "572:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "nodeType": "VariableDeclarationStatement",
         "src": "560:17:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 430,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "commonType": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             },
             "id": 428,
             "isConstant": false,
             "isLValue": false,
             "isPure": false,
             "lValueRequested": false,
             "leftExpression": {
              "argumentTypes": null,
              "id": 426,
              "name": "c",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 420,
              "src": "595:1:3",
              "typeDescriptions": {
               "typeIdentifier": "t_uint256",
               "typeString": "uint256"
              }
             },
             "nodeType": "BinaryOperation",
             "operator": "/",
             "rightExpression": {
              "argumentTypes": null,
              "id": 427,
              "name": "a",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 405,
              "src": "599:1:3",
              "typeDescriptions": {
               "typeIdentifier": "t_uint256",
               "typeString": "uint256"
              }
             },
             "src": "595:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "==",
            "rightExpression": {
             "argumentTypes": null,
             "id": 429,
             "name": "b",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 407,
             "src": "604:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "src": "595:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 425,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "587:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 431,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "587:19:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 432,
         "nodeType": "ExpressionStatement",
         "src": "587:19:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 433,
          "name": "c",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 420,
          "src": "624:1:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 411,
         "id": 434,
         "nodeType": "Return",
         "src": "617:8:3"
        }
       ]
      },
      "documentation": "@dev Multiplies two numbers, reverts on overflow.",
      "id": 436,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "mul",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 408,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 405,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 436,
         "src": "224:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 404,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "224:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 407,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 436,
         "src": "235:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 406,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "235:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "223:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 411,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 410,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 436,
         "src": "269:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 409,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "269:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "268:9:3"
      },
      "scope": 529,
      "src": "211:421:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 459,
       "nodeType": "Block",
       "src": "817:229:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 448,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 446,
             "name": "b",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 440,
             "src": "901:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": ">",
            "rightExpression": {
             "argumentTypes": null,
             "hexValue": "30",
             "id": 447,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "number",
             "lValueRequested": false,
             "nodeType": "Literal",
             "src": "905:1:3",
             "subdenomination": null,
             "typeDescriptions": {
              "typeIdentifier": "t_rational_0_by_1",
              "typeString": "int_const 0"
             },
             "value": "0"
            },
            "src": "901:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 445,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "893:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 449,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "893:14:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 450,
         "nodeType": "ExpressionStatement",
         "src": "893:14:3"
        },
        {
         "assignments": [
          452
         ],
         "declarations": [
          {
           "constant": false,
           "id": 452,
           "name": "c",
           "nodeType": "VariableDeclaration",
           "scope": 460,
           "src": "917:9:3",
           "stateVariable": false,
           "storageLocation": "default",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           },
           "typeName": {
            "id": 451,
            "name": "uint256",
            "nodeType": "ElementaryTypeName",
            "src": "917:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           },
           "value": null,
           "visibility": "internal"
          }
         ],
         "id": 456,
         "initialValue": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 455,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 453,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 438,
           "src": "929:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "/",
          "rightExpression": {
           "argumentTypes": null,
           "id": 454,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 440,
           "src": "933:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "929:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "nodeType": "VariableDeclarationStatement",
         "src": "917:17:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 457,
          "name": "c",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 452,
          "src": "1038:1:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 444,
         "id": 458,
         "nodeType": "Return",
         "src": "1031:8:3"
        }
       ]
      },
      "documentation": "@dev Integer division of two numbers truncating the quotient, reverts on division by zero.",
      "id": 460,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "div",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 441,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 438,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 460,
         "src": "763:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 437,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "763:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 440,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 460,
         "src": "774:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 439,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "774:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "762:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 444,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 443,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 460,
         "src": "808:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 442,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "808:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "807:9:3"
      },
      "scope": 529,
      "src": "750:296:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 483,
       "nodeType": "Block",
       "src": "1234:78:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 472,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 470,
             "name": "b",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 464,
             "src": "1252:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "<=",
            "rightExpression": {
             "argumentTypes": null,
             "id": 471,
             "name": "a",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 462,
             "src": "1257:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "src": "1252:6:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 469,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "1244:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 473,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "1244:15:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 474,
         "nodeType": "ExpressionStatement",
         "src": "1244:15:3"
        },
        {
         "assignments": [
          476
         ],
         "declarations": [
          {
           "constant": false,
           "id": 476,
           "name": "c",
           "nodeType": "VariableDeclaration",
           "scope": 484,
           "src": "1269:9:3",
           "stateVariable": false,
           "storageLocation": "default",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           },
           "typeName": {
            "id": 475,
            "name": "uint256",
            "nodeType": "ElementaryTypeName",
            "src": "1269:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           },
           "value": null,
           "visibility": "internal"
          }
         ],
         "id": 480,
         "initialValue": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 479,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 477,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 462,
           "src": "1281:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "-",
          "rightExpression": {
           "argumentTypes": null,
           "id": 478,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 464,
           "src": "1285:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "1281:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "nodeType": "VariableDeclarationStatement",
         "src": "1269:17:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 481,
          "name": "c",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 476,
          "src": "1304:1:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 468,
         "id": 482,
         "nodeType": "Return",
         "src": "1297:8:3"
        }
       ]
      },
      "documentation": "@dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).",
      "id": 484,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "sub",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 465,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 462,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 484,
         "src": "1180:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 461,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1180:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 464,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 484,
         "src": "1191:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 463,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1191:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1179:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 468,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 467,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 484,
         "src": "1225:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 466,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1225:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1224:9:3"
      },
      "scope": 529,
      "src": "1167:145:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 507,
       "nodeType": "Block",
       "src": "1450:78:3",
       "statements": [
        {
         "assignments": [
          494
         ],
         "declarations": [
          {
           "constant": false,
           "id": 494,
           "name": "c",
           "nodeType": "VariableDeclaration",
           "scope": 508,
           "src": "1460:9:3",
           "stateVariable": false,
           "storageLocation": "default",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           },
           "typeName": {
            "id": 493,
            "name": "uint256",
            "nodeType": "ElementaryTypeName",
            "src": "1460:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           },
           "value": null,
           "visibility": "internal"
          }
         ],
         "id": 498,
         "initialValue": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 497,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 495,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 486,
           "src": "1472:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "+",
          "rightExpression": {
           "argumentTypes": null,
           "id": 496,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 488,
           "src": "1476:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "1472:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "nodeType": "VariableDeclarationStatement",
         "src": "1460:17:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 502,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 500,
             "name": "c",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 494,
             "src": "1495:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": ">=",
            "rightExpression": {
             "argumentTypes": null,
             "id": 501,
             "name": "a",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 486,
             "src": "1500:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "src": "1495:6:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 499,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "1487:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 503,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "1487:15:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 504,
         "nodeType": "ExpressionStatement",
         "src": "1487:15:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 505,
          "name": "c",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 494,
          "src": "1520:1:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 492,
         "id": 506,
         "nodeType": "Return",
         "src": "1513:8:3"
        }
       ]
      },
      "documentation": "@dev Adds two numbers, reverts on overflow.",
      "id": 508,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "add",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 489,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 486,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 508,
         "src": "1396:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 485,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1396:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 488,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 508,
         "src": "1407:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 487,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1407:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1395:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 492,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 491,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 508,
         "src": "1441:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 490,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1441:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1440:9:3"
      },
      "scope": 529,
      "src": "1383:145:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 527,
       "nodeType": "Block",
       "src": "1737:54:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            },
            "id": 520,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 518,
             "name": "b",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 512,
             "src": "1755:1:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "hexValue": "30",
             "id": 519,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "number",
             "lValueRequested": false,
             "nodeType": "Literal",
             "src": "1760:1:3",
             "subdenomination": null,
             "typeDescriptions": {
              "typeIdentifier": "t_rational_0_by_1",
              "typeString": "int_const 0"
             },
             "value": "0"
            },
            "src": "1755:6:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 517,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "1747:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 521,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "1747:15:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 522,
         "nodeType": "ExpressionStatement",
         "src": "1747:15:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "commonType": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          },
          "id": 525,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftExpression": {
           "argumentTypes": null,
           "id": 523,
           "name": "a",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 510,
           "src": "1779:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "BinaryOperation",
          "operator": "%",
          "rightExpression": {
           "argumentTypes": null,
           "id": 524,
           "name": "b",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 512,
           "src": "1783:1:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "1779:5:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 516,
         "id": 526,
         "nodeType": "Return",
         "src": "1772:12:3"
        }
       ]
      },
      "documentation": "@dev Divides two numbers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.",
      "id": 528,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "mod",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 513,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 510,
         "name": "a",
         "nodeType": "VariableDeclaration",
         "scope": 528,
         "src": "1683:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 509,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1683:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 512,
         "name": "b",
         "nodeType": "VariableDeclaration",
         "scope": 528,
         "src": "1694:9:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 511,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1694:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1682:22:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 516,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 515,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 528,
         "src": "1728:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 514,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1728:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1727:9:3"
      },
      "scope": 529,
      "src": "1670:121:3",
      "stateMutability": "pure",
      "superFunction": null,
      "visibility": "internal"
     }
    ],
    "scope": 1014,
    "src": "117:1676:3"
   },
   {
    "baseContracts": [],
    "contractDependencies": [],
    "contractKind": "interface",
    "documentation": "@title ERC20 interface\n@dev see https://github.com/ethereum/EIPs/issues/20",
    "fullyImplemented": false,
    "id": 596,
    "linearizedBaseContracts": [
     596
    ],
    "name": "IERC20",
    "nodeType": "ContractDefinition",
    "nodes": [
     {
      "body": null,
      "documentation": null,
      "id": 534,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "totalSupply",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 530,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "1927:2:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 533,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 532,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 534,
         "src": "1953:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 531,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "1953:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1952:9:3"
      },
      "scope": 596,
      "src": "1907:55:3",
      "stateMutability": "view",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 541,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "balanceOf",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 537,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 536,
         "name": "who",
         "nodeType": "VariableDeclaration",
         "scope": 541,
         "src": "1987:11:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 535,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "1987:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "1986:13:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 540,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 539,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 541,
         "src": "2023:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 538,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2023:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2022:9:3"
      },
      "scope": 596,
      "src": "1968:64:3",
      "stateMutability": "view",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 550,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "allowance",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 546,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 543,
         "name": "owner",
         "nodeType": "VariableDeclaration",
         "scope": 550,
         "src": "2057:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 542,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2057:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 545,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 550,
         "src": "2072:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 544,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2072:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2056:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 549,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 548,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 550,
         "src": "2112:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 547,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2112:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2111:9:3"
      },
      "scope": 596,
      "src": "2038:83:3",
      "stateMutability": "view",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 559,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "transfer",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 555,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 552,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 559,
         "src": "2145:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 551,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2145:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 554,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 559,
         "src": "2157:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 553,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2157:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2144:27:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 558,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 557,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 559,
         "src": "2190:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 556,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "2190:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2189:6:3"
      },
      "scope": 596,
      "src": "2127:69:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 568,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "approve",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 564,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 561,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 568,
         "src": "2219:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 560,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2219:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 563,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 568,
         "src": "2236:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 562,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2236:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2218:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 567,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 566,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 568,
         "src": "2269:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 565,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "2269:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2268:6:3"
      },
      "scope": 596,
      "src": "2202:73:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "body": null,
      "documentation": null,
      "id": 579,
      "implemented": false,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "transferFrom",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 575,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 570,
         "name": "from",
         "nodeType": "VariableDeclaration",
         "scope": 579,
         "src": "2303:12:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 569,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2303:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 572,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 579,
         "src": "2317:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 571,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2317:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 574,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 579,
         "src": "2329:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 573,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2329:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2302:41:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 578,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 577,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 579,
         "src": "2362:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 576,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "2362:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2361:6:3"
      },
      "scope": 596,
      "src": "2281:87:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "external"
     },
     {
      "anonymous": false,
      "documentation": null,
      "id": 587,
      "name": "Transfer",
      "nodeType": "EventDefinition",
      "parameters": {
       "id": 586,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 581,
         "indexed": true,
         "name": "from",
         "nodeType": "VariableDeclaration",
         "scope": 587,
         "src": "2389:20:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 580,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2389:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 583,
         "indexed": true,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 587,
         "src": "2411:18:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 582,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2411:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 585,
         "indexed": false,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 587,
         "src": "2431:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 584,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2431:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2388:57:3"
      },
      "src": "2374:72:3"
     },
     {
      "anonymous": false,
      "documentation": null,
      "id": 595,
      "name": "Approval",
      "nodeType": "EventDefinition",
      "parameters": {
       "id": 594,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 589,
         "indexed": true,
         "name": "owner",
         "nodeType": "VariableDeclaration",
         "scope": 595,
         "src": "2467:21:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 588,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2467:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 591,
         "indexed": true,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 595,
         "src": "2490:23:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 590,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "2490:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 593,
         "indexed": false,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 595,
         "src": "2515:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 592,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "2515:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "2466:63:3"
      },
      "src": "2452:78:3"
     }
    ],
    "scope": 1014,
    "src": "1884:648:3"
   },
   {
    "baseContracts": [
     {
      "arguments": null,
      "baseName": {
       "contractScope": null,
       "id": 597,
       "name": "IERC20",
       "nodeType": "UserDefinedTypeName",
       "referencedDeclaration": 596,
       "src": "2837:6:3",
       "typeDescriptions": {
        "typeIdentifier": "t_contract$_IERC20_$596",
        "typeString": "contract IERC20"
       }
      },
      "id": 598,
      "nodeType": "InheritanceSpecifier",
      "src": "2837:6:3"
     }
    ],
    "contractDependencies": [
     596
    ],
    "contractKind": "contract",
    "documentation": "@title Standard ERC20 token\n * @dev Implementation of the basic standard token.\nhttps://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\nOriginally based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol",
    "fullyImplemented": true,
    "id": 1013,
    "linearizedBaseContracts": [
     1013,
     596
    ],
    "name": "ERC20",
    "nodeType": "ContractDefinition",
    "nodes": [
     {
      "id": 601,
      "libraryName": {
       "contractScope": null,
       "id": 599,
       "name": "SafeMath",
       "nodeType": "UserDefinedTypeName",
       "referencedDeclaration": 529,
       "src": "2856:8:3",
       "typeDescriptions": {
        "typeIdentifier": "t_contract$_SafeMath_$529",
        "typeString": "library SafeMath"
       }
      },
      "nodeType": "UsingForDirective",
      "src": "2850:27:3",
      "typeName": {
       "id": 600,
       "name": "uint256",
       "nodeType": "ElementaryTypeName",
       "src": "2869:7:3",
       "typeDescriptions": {
        "typeIdentifier": "t_uint256",
        "typeString": "uint256"
       }
      }
     },
     {
      "constant": false,
      "id": 605,
      "name": "_balances",
      "nodeType": "VariableDeclaration",
      "scope": 1013,
      "src": "2883:46:3",
      "stateVariable": true,
      "storageLocation": "default",
      "typeDescriptions": {
       "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
       "typeString": "mapping(address => uint256)"
      },
      "typeName": {
       "id": 604,
       "keyType": {
        "id": 602,
        "name": "address",
        "nodeType": "ElementaryTypeName",
        "src": "2892:7:3",
        "typeDescriptions": {
         "typeIdentifier": "t_address",
         "typeString": "address"
        }
       },
       "nodeType": "Mapping",
       "src": "2883:28:3",
       "typeDescriptions": {
        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
        "typeString": "mapping(address => uint256)"
       },
       "valueType": {
        "id": 603,
        "name": "uint256",
        "nodeType": "ElementaryTypeName",
        "src": "2903:7:3",
        "typeDescriptions": {
         "typeIdentifier": "t_uint256",
         "typeString": "uint256"
        }
       }
      },
      "value": null,
      "visibility": "private"
     },
     {
      "constant": false,
      "id": 611,
      "name": "_allowed",
      "nodeType": "VariableDeclaration",
      "scope": 1013,
      "src": "2936:66:3",
      "stateVariable": true,
      "storageLocation": "default",
      "typeDescriptions": {
       "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
       "typeString": "mapping(address => mapping(address => uint256))"
      },
      "typeName": {
       "id": 610,
       "keyType": {
        "id": 606,
        "name": "address",
        "nodeType": "ElementaryTypeName",
        "src": "2945:7:3",
        "typeDescriptions": {
         "typeIdentifier": "t_address",
         "typeString": "address"
        }
       },
       "nodeType": "Mapping",
       "src": "2936:49:3",
       "typeDescriptions": {
        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
        "typeString": "mapping(address => mapping(address => uint256))"
       },
       "valueType": {
        "id": 609,
        "keyType": {
         "id": 607,
         "name": "address",
         "nodeType": "ElementaryTypeName",
         "src": "2965:7:3",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         }
        },
        "nodeType": "Mapping",
        "src": "2956:28:3",
        "typeDescriptions": {
         "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
         "typeString": "mapping(address => uint256)"
        },
        "valueType": {
         "id": 608,
         "name": "uint256",
         "nodeType": "ElementaryTypeName",
         "src": "2976:7:3",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         }
        }
       }
      },
      "value": null,
      "visibility": "private"
     },
     {
      "constant": false,
      "id": 613,
      "name": "_totalSupply",
      "nodeType": "VariableDeclaration",
      "scope": 1013,
      "src": "3009:28:3",
      "stateVariable": true,
      "storageLocation": "default",
      "typeDescriptions": {
       "typeIdentifier": "t_uint256",
       "typeString": "uint256"
      },
      "typeName": {
       "id": 612,
       "name": "uint256",
       "nodeType": "ElementaryTypeName",
       "src": "3009:7:3",
       "typeDescriptions": {
        "typeIdentifier": "t_uint256",
        "typeString": "uint256"
       }
      },
      "value": null,
      "visibility": "private"
     },
     {
      "body": {
       "id": 625,
       "nodeType": "Block",
       "src": "3095:31:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 621,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 615,
            "src": "3111:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 622,
            "name": "val",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 617,
            "src": "3115:3:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 620,
           "name": "_mint",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 940,
           "src": "3105:5:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,uint256)"
           }
          },
          "id": 623,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "3105:14:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 624,
         "nodeType": "ExpressionStatement",
         "src": "3105:14:3"
        }
       ]
      },
      "documentation": null,
      "id": 626,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "mint",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 618,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 615,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 626,
         "src": "3058:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 614,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "3058:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 617,
         "name": "val",
         "nodeType": "VariableDeclaration",
         "scope": 626,
         "src": "3070:11:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 616,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "3070:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3057:25:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 619,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "3095:0:3"
      },
      "scope": 1013,
      "src": "3044:82:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "public"
     },
     {
      "body": {
       "id": 633,
       "nodeType": "Block",
       "src": "3247:36:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "id": 631,
          "name": "_totalSupply",
          "nodeType": "Identifier",
          "overloadedDeclarations": [],
          "referencedDeclaration": 613,
          "src": "3264:12:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 630,
         "id": 632,
         "nodeType": "Return",
         "src": "3257:19:3"
        }
       ]
      },
      "documentation": "@dev Total number of tokens in existence",
      "id": 634,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "totalSupply",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 627,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "3214:2:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 630,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 629,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 634,
         "src": "3238:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 628,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "3238:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3237:9:3"
      },
      "scope": 1013,
      "src": "3194:89:3",
      "stateMutability": "view",
      "superFunction": 534,
      "visibility": "public"
     },
     {
      "body": {
       "id": 645,
       "nodeType": "Block",
       "src": "3556:40:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "baseExpression": {
           "argumentTypes": null,
           "id": 641,
           "name": "_balances",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 605,
           "src": "3573:9:3",
           "typeDescriptions": {
            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
            "typeString": "mapping(address => uint256)"
           }
          },
          "id": 643,
          "indexExpression": {
           "argumentTypes": null,
           "id": 642,
           "name": "owner",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 636,
           "src": "3583:5:3",
           "typeDescriptions": {
            "typeIdentifier": "t_address",
            "typeString": "address"
           }
          },
          "isConstant": false,
          "isLValue": true,
          "isPure": false,
          "lValueRequested": false,
          "nodeType": "IndexAccess",
          "src": "3573:16:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 640,
         "id": 644,
         "nodeType": "Return",
         "src": "3566:23:3"
        }
       ]
      },
      "documentation": "@dev Gets the balance of the specified address.\n@param owner The address to query the balance of.\n@return An uint256 representing the amount owned by the passed address.",
      "id": 646,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "balanceOf",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 637,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 636,
         "name": "owner",
         "nodeType": "VariableDeclaration",
         "scope": 646,
         "src": "3511:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 635,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "3511:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3510:15:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 640,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 639,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 646,
         "src": "3547:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 638,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "3547:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3546:9:3"
      },
      "scope": 1013,
      "src": "3492:104:3",
      "stateMutability": "view",
      "superFunction": 541,
      "visibility": "public"
     },
     {
      "body": {
       "id": 661,
       "nodeType": "Block",
       "src": "4008:48:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "baseExpression": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 655,
            "name": "_allowed",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 611,
            "src": "4025:8:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
             "typeString": "mapping(address => mapping(address => uint256))"
            }
           },
           "id": 657,
           "indexExpression": {
            "argumentTypes": null,
            "id": 656,
            "name": "owner",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 648,
            "src": "4034:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": false,
           "nodeType": "IndexAccess",
           "src": "4025:15:3",
           "typeDescriptions": {
            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
            "typeString": "mapping(address => uint256)"
           }
          },
          "id": 659,
          "indexExpression": {
           "argumentTypes": null,
           "id": 658,
           "name": "spender",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 650,
           "src": "4041:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_address",
            "typeString": "address"
           }
          },
          "isConstant": false,
          "isLValue": true,
          "isPure": false,
          "lValueRequested": false,
          "nodeType": "IndexAccess",
          "src": "4025:24:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "functionReturnParameters": 654,
         "id": 660,
         "nodeType": "Return",
         "src": "4018:31:3"
        }
       ]
      },
      "documentation": "@dev Function to check the amount of tokens that an owner allowed to a spender.\n@param owner address The address which owns the funds.\n@param spender address The address which will spend the funds.\n@return A uint256 specifying the amount of tokens still available for the spender.",
      "id": 662,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": true,
      "modifiers": [],
      "name": "allowance",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 651,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 648,
         "name": "owner",
         "nodeType": "VariableDeclaration",
         "scope": 662,
         "src": "3946:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 647,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "3946:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 650,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 662,
         "src": "3961:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 649,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "3961:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3945:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 654,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 653,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 662,
         "src": "3999:7:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 652,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "3999:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "3998:9:3"
      },
      "scope": 1013,
      "src": "3927:129:3",
      "stateMutability": "view",
      "superFunction": 550,
      "visibility": "public"
     },
     {
      "body": {
       "id": 680,
       "nodeType": "Block",
       "src": "4287:70:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 672,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "4307:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 673,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "4307:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 674,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 664,
            "src": "4319:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 675,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 666,
            "src": "4323:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 671,
           "name": "_transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 898,
           "src": "4297:9:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 676,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "4297:32:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 677,
         "nodeType": "ExpressionStatement",
         "src": "4297:32:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 678,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "4346:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 670,
         "id": 679,
         "nodeType": "Return",
         "src": "4339:11:3"
        }
       ]
      },
      "documentation": "@dev Transfer token for a specified address\n@param to The address to transfer to.\n@param value The amount to be transferred.",
      "id": 681,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "transfer",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 667,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 664,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 681,
         "src": "4238:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 663,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "4238:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 666,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 681,
         "src": "4250:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 665,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "4250:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "4237:27:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 670,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 669,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 681,
         "src": "4281:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 668,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "4281:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "4280:6:3"
      },
      "scope": 1013,
      "src": "4220:137:3",
      "stateMutability": "nonpayable",
      "superFunction": 559,
      "visibility": "public"
     },
     {
      "body": {
       "id": 716,
       "nodeType": "Block",
       "src": "5064:167:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 695,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 691,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 683,
             "src": "5082:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 693,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "5101:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 692,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "5093:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 694,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "5093:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "5082:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 690,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "5074:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 696,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "5074:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 697,
         "nodeType": "ExpressionStatement",
         "src": "5074:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 705,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 698,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "5115:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 702,
            "indexExpression": {
             "argumentTypes": null,
             "expression": {
              "argumentTypes": null,
              "id": 699,
              "name": "msg",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 5342,
              "src": "5124:3:3",
              "typeDescriptions": {
               "typeIdentifier": "t_magic_message",
               "typeString": "msg"
              }
             },
             "id": 700,
             "isConstant": false,
             "isLValue": false,
             "isPure": false,
             "lValueRequested": false,
             "memberName": "sender",
             "nodeType": "MemberAccess",
             "referencedDeclaration": null,
             "src": "5124:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "5115:20:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 703,
           "indexExpression": {
            "argumentTypes": null,
            "id": 701,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 683,
            "src": "5136:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "5115:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "id": 704,
           "name": "value",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 685,
           "src": "5147:5:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "5115:37:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 706,
         "nodeType": "ExpressionStatement",
         "src": "5115:37:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 708,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "5176:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 709,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "5176:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 710,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 683,
            "src": "5188:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 711,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 685,
            "src": "5197:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 707,
           "name": "Approval",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 595,
           "src": "5167:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 712,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "5167:36:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 713,
         "nodeType": "EmitStatement",
         "src": "5162:41:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 714,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "5220:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 689,
         "id": 715,
         "nodeType": "Return",
         "src": "5213:11:3"
        }
       ]
      },
      "documentation": "@dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\nBeware that changing an allowance with this method brings the risk that someone may use both the old\nand the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\nrace condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\nhttps://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n@param spender The address which will spend the funds.\n@param value The amount of tokens to be spent.",
      "id": 717,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "approve",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 686,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 683,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 717,
         "src": "5010:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 682,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "5010:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 685,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 717,
         "src": "5027:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 684,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "5027:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "5009:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 689,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 688,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 717,
         "src": "5058:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 687,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "5058:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "5057:6:3"
      },
      "scope": 1013,
      "src": "4993:238:3",
      "stateMutability": "nonpayable",
      "superFunction": 568,
      "visibility": "public"
     },
     {
      "body": {
       "id": 753,
       "nodeType": "Block",
       "src": "5602:140:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "id": 743,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 728,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "5612:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 732,
            "indexExpression": {
             "argumentTypes": null,
             "id": 729,
             "name": "from",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 719,
             "src": "5621:4:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "5612:14:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 733,
           "indexExpression": {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 730,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "5627:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 731,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "5627:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "5612:26:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 741,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 723,
             "src": "5672:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "baseExpression": {
               "argumentTypes": null,
               "id": 734,
               "name": "_allowed",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 611,
               "src": "5641:8:3",
               "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
               }
              },
              "id": 736,
              "indexExpression": {
               "argumentTypes": null,
               "id": 735,
               "name": "from",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 719,
               "src": "5650:4:3",
               "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
               }
              },
              "isConstant": false,
              "isLValue": true,
              "isPure": false,
              "lValueRequested": false,
              "nodeType": "IndexAccess",
              "src": "5641:14:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 739,
             "indexExpression": {
              "argumentTypes": null,
              "expression": {
               "argumentTypes": null,
               "id": 737,
               "name": "msg",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 5342,
               "src": "5656:3:3",
               "typeDescriptions": {
                "typeIdentifier": "t_magic_message",
                "typeString": "msg"
               }
              },
              "id": 738,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "lValueRequested": false,
              "memberName": "sender",
              "nodeType": "MemberAccess",
              "referencedDeclaration": null,
              "src": "5656:10:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "5641:26:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 740,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "5641:30:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 742,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "5641:37:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "5612:66:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 744,
         "nodeType": "ExpressionStatement",
         "src": "5612:66:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 746,
            "name": "from",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 719,
            "src": "5698:4:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 747,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 721,
            "src": "5704:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 748,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 723,
            "src": "5708:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 745,
           "name": "_transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 898,
           "src": "5688:9:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 749,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "5688:26:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 750,
         "nodeType": "ExpressionStatement",
         "src": "5688:26:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 751,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "5731:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 727,
         "id": 752,
         "nodeType": "Return",
         "src": "5724:11:3"
        }
       ]
      },
      "documentation": "@dev Transfer tokens from one address to another\n@param from address The address which you want to send tokens from\n@param to address The address which you want to transfer to\n@param value uint256 the amount of tokens to be transferred",
      "id": 754,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "transferFrom",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 724,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 719,
         "name": "from",
         "nodeType": "VariableDeclaration",
         "scope": 754,
         "src": "5539:12:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 718,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "5539:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 721,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 754,
         "src": "5553:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 720,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "5553:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 723,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 754,
         "src": "5565:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 722,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "5565:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "5538:41:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 727,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 726,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 754,
         "src": "5596:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 725,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "5596:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "5595:6:3"
      },
      "scope": 1013,
      "src": "5517:225:3",
      "stateMutability": "nonpayable",
      "superFunction": 579,
      "visibility": "public"
     },
     {
      "body": {
       "id": 802,
       "nodeType": "Block",
       "src": "6299:231:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 768,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 764,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 756,
             "src": "6317:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 766,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "6336:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 765,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "6328:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 767,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "6328:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "6317:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 763,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "6309:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 769,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "6309:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 770,
         "nodeType": "ExpressionStatement",
         "src": "6309:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 786,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 771,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "6350:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 775,
            "indexExpression": {
             "argumentTypes": null,
             "expression": {
              "argumentTypes": null,
              "id": 772,
              "name": "msg",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 5342,
              "src": "6359:3:3",
              "typeDescriptions": {
               "typeIdentifier": "t_magic_message",
               "typeString": "msg"
              }
             },
             "id": 773,
             "isConstant": false,
             "isLValue": false,
             "isPure": false,
             "lValueRequested": false,
             "memberName": "sender",
             "nodeType": "MemberAccess",
             "referencedDeclaration": null,
             "src": "6359:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "6350:20:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 776,
           "indexExpression": {
            "argumentTypes": null,
            "id": 774,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 756,
            "src": "6371:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "6350:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 784,
             "name": "addedValue",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 758,
             "src": "6416:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "baseExpression": {
               "argumentTypes": null,
               "id": 777,
               "name": "_allowed",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 611,
               "src": "6382:8:3",
               "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
               }
              },
              "id": 780,
              "indexExpression": {
               "argumentTypes": null,
               "expression": {
                "argumentTypes": null,
                "id": 778,
                "name": "msg",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 5342,
                "src": "6391:3:3",
                "typeDescriptions": {
                 "typeIdentifier": "t_magic_message",
                 "typeString": "msg"
                }
               },
               "id": 779,
               "isConstant": false,
               "isLValue": false,
               "isPure": false,
               "lValueRequested": false,
               "memberName": "sender",
               "nodeType": "MemberAccess",
               "referencedDeclaration": null,
               "src": "6391:10:3",
               "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
               }
              },
              "isConstant": false,
              "isLValue": true,
              "isPure": false,
              "lValueRequested": false,
              "nodeType": "IndexAccess",
              "src": "6382:20:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 782,
             "indexExpression": {
              "argumentTypes": null,
              "id": 781,
              "name": "spender",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 756,
              "src": "6403:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "6382:29:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 783,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "add",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 508,
            "src": "6382:33:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 785,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "6382:45:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "6350:77:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 787,
         "nodeType": "ExpressionStatement",
         "src": "6350:77:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 789,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "6451:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 790,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "6451:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 791,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 756,
            "src": "6463:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 792,
              "name": "_allowed",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 611,
              "src": "6472:8:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
               "typeString": "mapping(address => mapping(address => uint256))"
              }
             },
             "id": 795,
             "indexExpression": {
              "argumentTypes": null,
              "expression": {
               "argumentTypes": null,
               "id": 793,
               "name": "msg",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 5342,
               "src": "6481:3:3",
               "typeDescriptions": {
                "typeIdentifier": "t_magic_message",
                "typeString": "msg"
               }
              },
              "id": 794,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "lValueRequested": false,
              "memberName": "sender",
              "nodeType": "MemberAccess",
              "referencedDeclaration": null,
              "src": "6481:10:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "6472:20:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
             }
            },
            "id": 797,
            "indexExpression": {
             "argumentTypes": null,
             "id": 796,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 756,
             "src": "6493:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "6472:29:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 788,
           "name": "Approval",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 595,
           "src": "6442:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 798,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "6442:60:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 799,
         "nodeType": "EmitStatement",
         "src": "6437:65:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 800,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "6519:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 762,
         "id": 801,
         "nodeType": "Return",
         "src": "6512:11:3"
        }
       ]
      },
      "documentation": "@dev Increase the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To increment\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\n@param spender The address which will spend the funds.\n@param addedValue The amount of tokens to increase the allowance by.",
      "id": 803,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "increaseAllowance",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 759,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 756,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 803,
         "src": "6240:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 755,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "6240:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 758,
         "name": "addedValue",
         "nodeType": "VariableDeclaration",
         "scope": 803,
         "src": "6257:18:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 757,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "6257:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "6239:37:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 762,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 761,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 803,
         "src": "6293:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 760,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "6293:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "6292:6:3"
      },
      "scope": 1013,
      "src": "6213:317:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "public"
     },
     {
      "body": {
       "id": 851,
       "nodeType": "Block",
       "src": "7097:236:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 817,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 813,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 805,
             "src": "7115:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 815,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "7134:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 814,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "7126:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 816,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "7126:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "7115:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 812,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "7107:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 818,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "7107:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 819,
         "nodeType": "ExpressionStatement",
         "src": "7107:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 835,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 820,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "7148:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 824,
            "indexExpression": {
             "argumentTypes": null,
             "expression": {
              "argumentTypes": null,
              "id": 821,
              "name": "msg",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 5342,
              "src": "7157:3:3",
              "typeDescriptions": {
               "typeIdentifier": "t_magic_message",
               "typeString": "msg"
              }
             },
             "id": 822,
             "isConstant": false,
             "isLValue": false,
             "isPure": false,
             "lValueRequested": false,
             "memberName": "sender",
             "nodeType": "MemberAccess",
             "referencedDeclaration": null,
             "src": "7157:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "7148:20:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 825,
           "indexExpression": {
            "argumentTypes": null,
            "id": 823,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 805,
            "src": "7169:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "7148:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 833,
             "name": "subtractedValue",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 807,
             "src": "7214:15:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "baseExpression": {
               "argumentTypes": null,
               "id": 826,
               "name": "_allowed",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 611,
               "src": "7180:8:3",
               "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
               }
              },
              "id": 829,
              "indexExpression": {
               "argumentTypes": null,
               "expression": {
                "argumentTypes": null,
                "id": 827,
                "name": "msg",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 5342,
                "src": "7189:3:3",
                "typeDescriptions": {
                 "typeIdentifier": "t_magic_message",
                 "typeString": "msg"
                }
               },
               "id": 828,
               "isConstant": false,
               "isLValue": false,
               "isPure": false,
               "lValueRequested": false,
               "memberName": "sender",
               "nodeType": "MemberAccess",
               "referencedDeclaration": null,
               "src": "7189:10:3",
               "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
               }
              },
              "isConstant": false,
              "isLValue": true,
              "isPure": false,
              "lValueRequested": false,
              "nodeType": "IndexAccess",
              "src": "7180:20:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 831,
             "indexExpression": {
              "argumentTypes": null,
              "id": 830,
              "name": "spender",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 805,
              "src": "7201:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "7180:29:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 832,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "7180:33:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 834,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "7180:50:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "7148:82:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 836,
         "nodeType": "ExpressionStatement",
         "src": "7148:82:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 838,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "7254:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 839,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "7254:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 840,
            "name": "spender",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 805,
            "src": "7266:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 841,
              "name": "_allowed",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 611,
              "src": "7275:8:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
               "typeString": "mapping(address => mapping(address => uint256))"
              }
             },
             "id": 844,
             "indexExpression": {
              "argumentTypes": null,
              "expression": {
               "argumentTypes": null,
               "id": 842,
               "name": "msg",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 5342,
               "src": "7284:3:3",
               "typeDescriptions": {
                "typeIdentifier": "t_magic_message",
                "typeString": "msg"
               }
              },
              "id": 843,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "lValueRequested": false,
              "memberName": "sender",
              "nodeType": "MemberAccess",
              "referencedDeclaration": null,
              "src": "7284:10:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "7275:20:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
             }
            },
            "id": 846,
            "indexExpression": {
             "argumentTypes": null,
             "id": 845,
             "name": "spender",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 805,
             "src": "7296:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "7275:29:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 837,
           "name": "Approval",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 595,
           "src": "7245:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 847,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "7245:60:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 848,
         "nodeType": "EmitStatement",
         "src": "7240:65:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "hexValue": "74727565",
          "id": 849,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "bool",
          "lValueRequested": false,
          "nodeType": "Literal",
          "src": "7322:4:3",
          "subdenomination": null,
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          },
          "value": "true"
         },
         "functionReturnParameters": 811,
         "id": 850,
         "nodeType": "Return",
         "src": "7315:11:3"
        }
       ]
      },
      "documentation": "@dev Decrease the amount of tokens that an owner allowed to a spender.\napprove should be called when allowed_[_spender] == 0. To decrement\nallowed value is better to use this function to avoid 2 calls (and wait until\nthe first transaction is mined)\nFrom MonolithDAO Token.sol\n@param spender The address which will spend the funds.\n@param subtractedValue The amount of tokens to decrease the allowance by.",
      "id": 852,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "decreaseAllowance",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 808,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 805,
         "name": "spender",
         "nodeType": "VariableDeclaration",
         "scope": 852,
         "src": "7033:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 804,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "7033:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 807,
         "name": "subtractedValue",
         "nodeType": "VariableDeclaration",
         "scope": 852,
         "src": "7050:23:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 806,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "7050:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "7032:42:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 811,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 810,
         "name": "",
         "nodeType": "VariableDeclaration",
         "scope": 852,
         "src": "7091:4:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_bool",
          "typeString": "bool"
         },
         "typeName": {
          "id": 809,
          "name": "bool",
          "nodeType": "ElementaryTypeName",
          "src": "7091:4:3",
          "typeDescriptions": {
           "typeIdentifier": "t_bool",
           "typeString": "bool"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "7090:6:3"
      },
      "scope": 1013,
      "src": "7006:327:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "public"
     },
     {
      "body": {
       "id": 897,
       "nodeType": "Block",
       "src": "7616:187:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 866,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 862,
             "name": "to",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 856,
             "src": "7634:2:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 864,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "7648:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 863,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "7640:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 865,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "7640:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "7634:16:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 861,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "7626:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 867,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "7626:25:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 868,
         "nodeType": "ExpressionStatement",
         "src": "7626:25:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 878,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 869,
            "name": "_balances",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 605,
            "src": "7662:9:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 871,
           "indexExpression": {
            "argumentTypes": null,
            "id": 870,
            "name": "from",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 854,
            "src": "7672:4:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "7662:15:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 876,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 858,
             "src": "7700:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 872,
              "name": "_balances",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 605,
              "src": "7680:9:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 874,
             "indexExpression": {
              "argumentTypes": null,
              "id": 873,
              "name": "from",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 854,
              "src": "7690:4:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "7680:15:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 875,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "7680:19:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 877,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "7680:26:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "7662:44:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 879,
         "nodeType": "ExpressionStatement",
         "src": "7662:44:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 889,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 880,
            "name": "_balances",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 605,
            "src": "7716:9:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 882,
           "indexExpression": {
            "argumentTypes": null,
            "id": 881,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 856,
            "src": "7726:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "7716:13:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 887,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 858,
             "src": "7750:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 883,
              "name": "_balances",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 605,
              "src": "7732:9:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 885,
             "indexExpression": {
              "argumentTypes": null,
              "id": 884,
              "name": "to",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 856,
              "src": "7742:2:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "7732:13:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 886,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "add",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 508,
            "src": "7732:17:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 888,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "7732:24:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "7716:40:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 890,
         "nodeType": "ExpressionStatement",
         "src": "7716:40:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 892,
            "name": "from",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 854,
            "src": "7780:4:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 893,
            "name": "to",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 856,
            "src": "7786:2:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 894,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 858,
            "src": "7790:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 891,
           "name": "Transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 587,
           "src": "7771:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 895,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "7771:25:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 896,
         "nodeType": "EmitStatement",
         "src": "7766:30:3"
        }
       ]
      },
      "documentation": "@dev Transfer token for a specified addresses\n@param from The address to transfer from.\n@param to The address to transfer to.\n@param value The amount to be transferred.",
      "id": 898,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "_transfer",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 859,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 854,
         "name": "from",
         "nodeType": "VariableDeclaration",
         "scope": 898,
         "src": "7566:12:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 853,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "7566:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 856,
         "name": "to",
         "nodeType": "VariableDeclaration",
         "scope": 898,
         "src": "7580:10:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 855,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "7580:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 858,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 898,
         "src": "7592:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 857,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "7592:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "7565:41:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 860,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "7616:0:3"
      },
      "scope": 1013,
      "src": "7547:256:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 939,
       "nodeType": "Block",
       "src": "8202:207:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 910,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 906,
             "name": "account",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 900,
             "src": "8220:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 908,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "8239:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 907,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "8231:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 909,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "8231:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "8220:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 905,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "8212:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 911,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "8212:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 912,
         "nodeType": "ExpressionStatement",
         "src": "8212:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 918,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "id": 913,
           "name": "_totalSupply",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 613,
           "src": "8253:12:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 916,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 902,
             "src": "8285:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "id": 914,
             "name": "_totalSupply",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 613,
             "src": "8268:12:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 915,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "add",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 508,
            "src": "8268:16:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 917,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "8268:23:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "8253:38:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 919,
         "nodeType": "ExpressionStatement",
         "src": "8253:38:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 929,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 920,
            "name": "_balances",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 605,
            "src": "8301:9:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 922,
           "indexExpression": {
            "argumentTypes": null,
            "id": 921,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 900,
            "src": "8311:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "8301:18:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 927,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 902,
             "src": "8345:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 923,
              "name": "_balances",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 605,
              "src": "8322:9:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 925,
             "indexExpression": {
              "argumentTypes": null,
              "id": 924,
              "name": "account",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 900,
              "src": "8332:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "8322:18:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 926,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "add",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 508,
            "src": "8322:22:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 928,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "8322:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "8301:50:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 930,
         "nodeType": "ExpressionStatement",
         "src": "8301:50:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "arguments": [
             {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 933,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "8383:1:3",
              "subdenomination": null,
              "typeDescriptions": {
               "typeIdentifier": "t_rational_0_by_1",
               "typeString": "int_const 0"
              },
              "value": "0"
             }
            ],
            "expression": {
             "argumentTypes": [
              {
               "typeIdentifier": "t_rational_0_by_1",
               "typeString": "int_const 0"
              }
             ],
             "id": 932,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "lValueRequested": false,
             "nodeType": "ElementaryTypeNameExpression",
             "src": "8375:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_type$_t_address_$",
              "typeString": "type(address)"
             },
             "typeName": "address"
            },
            "id": 934,
            "isConstant": false,
            "isLValue": false,
            "isPure": true,
            "kind": "typeConversion",
            "lValueRequested": false,
            "names": [],
            "nodeType": "FunctionCall",
            "src": "8375:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 935,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 900,
            "src": "8387:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 936,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 902,
            "src": "8396:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 931,
           "name": "Transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 587,
           "src": "8366:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 937,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "8366:36:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 938,
         "nodeType": "EmitStatement",
         "src": "8361:41:3"
        }
       ]
      },
      "documentation": "@dev Internal function that mints an amount of the token and assigns it to\nan account. This encapsulates the modification of balances such that the\nproper events are emitted.\n@param account The account that will receive the created tokens.\n@param value The amount that will be created.",
      "id": 940,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "_mint",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 903,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 900,
         "name": "account",
         "nodeType": "VariableDeclaration",
         "scope": 940,
         "src": "8161:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 899,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "8161:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 902,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 940,
         "src": "8178:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 901,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "8178:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "8160:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 904,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "8202:0:3"
      },
      "scope": 1013,
      "src": "8146:263:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 981,
       "nodeType": "Block",
       "src": "8691:207:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "commonType": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            "id": 952,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "leftExpression": {
             "argumentTypes": null,
             "id": 948,
             "name": "account",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 942,
             "src": "8709:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "nodeType": "BinaryOperation",
            "operator": "!=",
            "rightExpression": {
             "argumentTypes": null,
             "arguments": [
              {
               "argumentTypes": null,
               "hexValue": "30",
               "id": 950,
               "isConstant": false,
               "isLValue": false,
               "isPure": true,
               "kind": "number",
               "lValueRequested": false,
               "nodeType": "Literal",
               "src": "8728:1:3",
               "subdenomination": null,
               "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               },
               "value": "0"
              }
             ],
             "expression": {
              "argumentTypes": [
               {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
               }
              ],
              "id": 949,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "nodeType": "ElementaryTypeNameExpression",
              "src": "8720:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_type$_t_address_$",
               "typeString": "type(address)"
              },
              "typeName": "address"
             },
             "id": 951,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "kind": "typeConversion",
             "lValueRequested": false,
             "names": [],
             "nodeType": "FunctionCall",
             "src": "8720:10:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "src": "8709:21:3",
            "typeDescriptions": {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_bool",
             "typeString": "bool"
            }
           ],
           "id": 947,
           "name": "require",
           "nodeType": "Identifier",
           "overloadedDeclarations": [
            5345,
            5346
           ],
           "referencedDeclaration": 5345,
           "src": "8701:7:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
            "typeString": "function (bool) pure"
           }
          },
          "id": 953,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "8701:30:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 954,
         "nodeType": "ExpressionStatement",
         "src": "8701:30:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 960,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "id": 955,
           "name": "_totalSupply",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 613,
           "src": "8742:12:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 958,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 944,
             "src": "8774:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "id": 956,
             "name": "_totalSupply",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 613,
             "src": "8757:12:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 957,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "8757:16:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 959,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "8757:23:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "8742:38:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 961,
         "nodeType": "ExpressionStatement",
         "src": "8742:38:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "id": 971,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "id": 962,
            "name": "_balances",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 605,
            "src": "8790:9:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 964,
           "indexExpression": {
            "argumentTypes": null,
            "id": 963,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 942,
            "src": "8800:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "8790:18:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 969,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 944,
             "src": "8834:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "id": 965,
              "name": "_balances",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 605,
              "src": "8811:9:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 967,
             "indexExpression": {
              "argumentTypes": null,
              "id": 966,
              "name": "account",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 942,
              "src": "8821:7:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "8811:18:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 968,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "8811:22:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 970,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "8811:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "8790:50:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 972,
         "nodeType": "ExpressionStatement",
         "src": "8790:50:3"
        },
        {
         "eventCall": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 974,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 942,
            "src": "8864:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "arguments": [
             {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 976,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "8881:1:3",
              "subdenomination": null,
              "typeDescriptions": {
               "typeIdentifier": "t_rational_0_by_1",
               "typeString": "int_const 0"
              },
              "value": "0"
             }
            ],
            "expression": {
             "argumentTypes": [
              {
               "typeIdentifier": "t_rational_0_by_1",
               "typeString": "int_const 0"
              }
             ],
             "id": 975,
             "isConstant": false,
             "isLValue": false,
             "isPure": true,
             "lValueRequested": false,
             "nodeType": "ElementaryTypeNameExpression",
             "src": "8873:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_type$_t_address_$",
              "typeString": "type(address)"
             },
             "typeName": "address"
            },
            "id": 977,
            "isConstant": false,
            "isLValue": false,
            "isPure": true,
            "kind": "typeConversion",
            "lValueRequested": false,
            "names": [],
            "nodeType": "FunctionCall",
            "src": "8873:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 978,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 944,
            "src": "8885:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 973,
           "name": "Transfer",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 587,
           "src": "8855:8:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,address,uint256)"
           }
          },
          "id": 979,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "8855:36:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 980,
         "nodeType": "EmitStatement",
         "src": "8850:41:3"
        }
       ]
      },
      "documentation": "@dev Internal function that burns an amount of the token of a given\naccount.\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.",
      "id": 982,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "_burn",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 945,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 942,
         "name": "account",
         "nodeType": "VariableDeclaration",
         "scope": 982,
         "src": "8650:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 941,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "8650:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 944,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 982,
         "src": "8667:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 943,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "8667:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "8649:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 946,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "8691:0:3"
      },
      "scope": 1013,
      "src": "8635:263:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "internal"
     },
     {
      "body": {
       "id": 1011,
       "nodeType": "Block",
       "src": "9280:287:3",
       "statements": [
        {
         "expression": {
          "argumentTypes": null,
          "id": 1004,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "lValueRequested": false,
          "leftHandSide": {
           "argumentTypes": null,
           "baseExpression": {
            "argumentTypes": null,
            "baseExpression": {
             "argumentTypes": null,
             "id": 989,
             "name": "_allowed",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 611,
             "src": "9457:8:3",
             "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
             }
            },
            "id": 993,
            "indexExpression": {
             "argumentTypes": null,
             "id": 990,
             "name": "account",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 984,
             "src": "9466:7:3",
             "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
             }
            },
            "isConstant": false,
            "isLValue": true,
            "isPure": false,
            "lValueRequested": false,
            "nodeType": "IndexAccess",
            "src": "9457:17:3",
            "typeDescriptions": {
             "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
             "typeString": "mapping(address => uint256)"
            }
           },
           "id": 994,
           "indexExpression": {
            "argumentTypes": null,
            "expression": {
             "argumentTypes": null,
             "id": 991,
             "name": "msg",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 5342,
             "src": "9475:3:3",
             "typeDescriptions": {
              "typeIdentifier": "t_magic_message",
              "typeString": "msg"
             }
            },
            "id": 992,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sender",
            "nodeType": "MemberAccess",
            "referencedDeclaration": null,
            "src": "9475:10:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           "isConstant": false,
           "isLValue": true,
           "isPure": false,
           "lValueRequested": true,
           "nodeType": "IndexAccess",
           "src": "9457:29:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "nodeType": "Assignment",
          "operator": "=",
          "rightHandSide": {
           "argumentTypes": null,
           "arguments": [
            {
             "argumentTypes": null,
             "id": 1002,
             "name": "value",
             "nodeType": "Identifier",
             "overloadedDeclarations": [],
             "referencedDeclaration": 986,
             "src": "9523:5:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            }
           ],
           "expression": {
            "argumentTypes": [
             {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            ],
            "expression": {
             "argumentTypes": null,
             "baseExpression": {
              "argumentTypes": null,
              "baseExpression": {
               "argumentTypes": null,
               "id": 995,
               "name": "_allowed",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 611,
               "src": "9489:8:3",
               "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
               }
              },
              "id": 997,
              "indexExpression": {
               "argumentTypes": null,
               "id": 996,
               "name": "account",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 984,
               "src": "9498:7:3",
               "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
               }
              },
              "isConstant": false,
              "isLValue": true,
              "isPure": false,
              "lValueRequested": false,
              "nodeType": "IndexAccess",
              "src": "9489:17:3",
              "typeDescriptions": {
               "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
               "typeString": "mapping(address => uint256)"
              }
             },
             "id": 1000,
             "indexExpression": {
              "argumentTypes": null,
              "expression": {
               "argumentTypes": null,
               "id": 998,
               "name": "msg",
               "nodeType": "Identifier",
               "overloadedDeclarations": [],
               "referencedDeclaration": 5342,
               "src": "9507:3:3",
               "typeDescriptions": {
                "typeIdentifier": "t_magic_message",
                "typeString": "msg"
               }
              },
              "id": 999,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "lValueRequested": false,
              "memberName": "sender",
              "nodeType": "MemberAccess",
              "referencedDeclaration": null,
              "src": "9507:10:3",
              "typeDescriptions": {
               "typeIdentifier": "t_address",
               "typeString": "address"
              }
             },
             "isConstant": false,
             "isLValue": true,
             "isPure": false,
             "lValueRequested": false,
             "nodeType": "IndexAccess",
             "src": "9489:29:3",
             "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
             }
            },
            "id": 1001,
            "isConstant": false,
            "isLValue": false,
            "isPure": false,
            "lValueRequested": false,
            "memberName": "sub",
            "nodeType": "MemberAccess",
            "referencedDeclaration": 484,
            "src": "9489:33:3",
            "typeDescriptions": {
             "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
             "typeString": "function (uint256,uint256) pure returns (uint256)"
            }
           },
           "id": 1003,
           "isConstant": false,
           "isLValue": false,
           "isPure": false,
           "kind": "functionCall",
           "lValueRequested": false,
           "names": [],
           "nodeType": "FunctionCall",
           "src": "9489:40:3",
           "typeDescriptions": {
            "typeIdentifier": "t_uint256",
            "typeString": "uint256"
           }
          },
          "src": "9457:72:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "id": 1005,
         "nodeType": "ExpressionStatement",
         "src": "9457:72:3"
        },
        {
         "expression": {
          "argumentTypes": null,
          "arguments": [
           {
            "argumentTypes": null,
            "id": 1007,
            "name": "account",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 984,
            "src": "9545:7:3",
            "typeDescriptions": {
             "typeIdentifier": "t_address",
             "typeString": "address"
            }
           },
           {
            "argumentTypes": null,
            "id": 1008,
            "name": "value",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": 986,
            "src": "9554:5:3",
            "typeDescriptions": {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           }
          ],
          "expression": {
           "argumentTypes": [
            {
             "typeIdentifier": "t_address",
             "typeString": "address"
            },
            {
             "typeIdentifier": "t_uint256",
             "typeString": "uint256"
            }
           ],
           "id": 1006,
           "name": "_burn",
           "nodeType": "Identifier",
           "overloadedDeclarations": [],
           "referencedDeclaration": 982,
           "src": "9539:5:3",
           "typeDescriptions": {
            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
            "typeString": "function (address,uint256)"
           }
          },
          "id": 1009,
          "isConstant": false,
          "isLValue": false,
          "isPure": false,
          "kind": "functionCall",
          "lValueRequested": false,
          "names": [],
          "nodeType": "FunctionCall",
          "src": "9539:21:3",
          "typeDescriptions": {
           "typeIdentifier": "t_tuple$__$",
           "typeString": "tuple()"
          }
         },
         "id": 1010,
         "nodeType": "ExpressionStatement",
         "src": "9539:21:3"
        }
       ]
      },
      "documentation": "@dev Internal function that burns an amount of the token of a given\naccount, deducting from the sender's allowance for said account. Uses the\ninternal burn function.\n@param account The account whose tokens will be burnt.\n@param value The amount that will be burnt.",
      "id": 1012,
      "implemented": true,
      "isConstructor": false,
      "isDeclaredConst": false,
      "modifiers": [],
      "name": "_burnFrom",
      "nodeType": "FunctionDefinition",
      "parameters": {
       "id": 987,
       "nodeType": "ParameterList",
       "parameters": [
        {
         "constant": false,
         "id": 984,
         "name": "account",
         "nodeType": "VariableDeclaration",
         "scope": 1012,
         "src": "9239:15:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_address",
          "typeString": "address"
         },
         "typeName": {
          "id": 983,
          "name": "address",
          "nodeType": "ElementaryTypeName",
          "src": "9239:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_address",
           "typeString": "address"
          }
         },
         "value": null,
         "visibility": "internal"
        },
        {
         "constant": false,
         "id": 986,
         "name": "value",
         "nodeType": "VariableDeclaration",
         "scope": 1012,
         "src": "9256:13:3",
         "stateVariable": false,
         "storageLocation": "default",
         "typeDescriptions": {
          "typeIdentifier": "t_uint256",
          "typeString": "uint256"
         },
         "typeName": {
          "id": 985,
          "name": "uint256",
          "nodeType": "ElementaryTypeName",
          "src": "9256:7:3",
          "typeDescriptions": {
           "typeIdentifier": "t_uint256",
           "typeString": "uint256"
          }
         },
         "value": null,
         "visibility": "internal"
        }
       ],
       "src": "9238:32:3"
      },
      "payable": false,
      "returnParameters": {
       "id": 988,
       "nodeType": "ParameterList",
       "parameters": [],
       "src": "9280:0:3"
      },
      "scope": 1013,
      "src": "9220:347:3",
      "stateMutability": "nonpayable",
      "superFunction": null,
      "visibility": "internal"
     }
    ],
    "scope": 1014,
    "src": "2819:6750:3"
   }
  ],
  "src": "0:9570:3"
 },
 "compiler": {
  "name": "solc",
  "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
 },
 "networks": {
  "1": {
   "events": {},
   "links": {},
   "address": "0xCb94be6f13A1182E4A4B6140cb7bf2025d28e41B",
   "transactionHash": ""
  },
  "4": {
   "events": {},
   "links": {},
   "address": "0x21036c54e16521b8809553956123e44054120226",
   "transactionHash": ""
  }
 },
 "schemaVersion": "2.0.2",
 "updatedAt": "2019-06-04T01:05:26.376Z"
}
