UNPKG

@aave/governance-crosschain-bridges

Version:
5,496 lines 294 kB
{
  "id": "829753b2b1114e3edc8e9be12ab1d18e",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.5.2",
  "solcLongVersion": "0.5.2+commit.1df8f40c",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/dependencies/polygon/CustomPolygonMapping.sol": {
        "content": "/**\n *Submitted for verification at Etherscan.io on 2020-05-30\n */\n\n/**\nMatic network contracts\n*/\n\npragma solidity ^0.5.2;\n\ncontract Ownable {\n  address private _owner;\n\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n  /**\n   * @dev The Ownable constructor sets the original `owner` of the contract to the sender\n   * account.\n   */\n  constructor() internal {\n    _owner = msg.sender;\n    emit OwnershipTransferred(address(0), _owner);\n  }\n\n  /**\n   * @return the address of the owner.\n   */\n  function owner() public view returns (address) {\n    return _owner;\n  }\n\n  /**\n   * @dev Throws if called by any account other than the owner.\n   */\n  modifier onlyOwner() {\n    require(isOwner());\n    _;\n  }\n\n  /**\n   * @return true if `msg.sender` is the owner of the contract.\n   */\n  function isOwner() public view returns (bool) {\n    return msg.sender == _owner;\n  }\n\n  /**\n   * @dev Allows the current owner to relinquish control of the contract.\n   * It will not be possible to call the functions with the `onlyOwner`\n   * modifier anymore.\n   * @notice Renouncing ownership will leave the contract without an owner,\n   * thereby removing any functionality that is only available to the owner.\n   */\n  function renounceOwnership() public onlyOwner {\n    emit OwnershipTransferred(_owner, address(0));\n    _owner = address(0);\n  }\n\n  /**\n   * @dev Allows the current owner to transfer control of the contract to a newOwner.\n   * @param newOwner The address to transfer ownership to.\n   */\n  function transferOwnership(address newOwner) public onlyOwner {\n    _transferOwnership(newOwner);\n  }\n\n  /**\n   * @dev Transfers control of the contract to a newOwner.\n   * @param newOwner The address to transfer ownership to.\n   */\n  function _transferOwnership(address newOwner) internal {\n    require(newOwner != address(0));\n    emit OwnershipTransferred(_owner, newOwner);\n    _owner = newOwner;\n  }\n}\n\nlibrary SafeMath {\n  /**\n   * @dev Multiplies two unsigned integers, 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 unsigned integers 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 unsigned integers, 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 unsigned integers, 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 unsigned integers 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\ncontract CustomPolygonMapping is Ownable {\n  using SafeMath for uint256;\n\n  uint256 public counter;\n  mapping(address => address) public registrations;\n\n  event NewRegistration(address indexed user, address indexed sender, address indexed receiver);\n  event RegistrationUpdated(address indexed user, address indexed sender, address indexed receiver);\n  event StateSynced(uint256 indexed id, address indexed contractAddress, bytes data);\n\n  modifier onlyRegistered(address receiver) {\n    require(registrations[receiver] == msg.sender, 'Invalid sender');\n    _;\n  }\n\n  function syncState(address receiver, bytes calldata data) external onlyRegistered(receiver) {\n    counter = counter.add(1);\n    emit StateSynced(counter, receiver, data);\n    // THIS IS THE ONLY CUSTOM PART\n    bool success;\n    bytes memory resultData;\n    (success, resultData) = receiver.call(\n      abi.encodeWithSignature('onStateReceive(uint256,bytes)', counter, data)\n    );\n    require(success, 'FAILED_ACTION_EXECUTION_CUSTOM_MAPPING');\n    // END THE CUSTOM PART\n  }\n\n  // register new contract for state sync\n  function register(address sender, address receiver) public {\n    require(\n      isOwner() || registrations[receiver] == msg.sender,\n      'StateSender.register: Not authorized to register'\n    );\n    registrations[receiver] = sender;\n    if (registrations[receiver] == address(0)) {\n      emit NewRegistration(msg.sender, sender, receiver);\n    } else {\n      emit RegistrationUpdated(msg.sender, sender, receiver);\n    }\n  }\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata",
            "devdoc",
            "userdoc",
            "storageLayout",
            "evm.gasEstimates"
          ],
          "": [
            "ast"
          ]
        }
      },
      "metadata": {
        "useLiteralContent": true
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/dependencies/polygon/CustomPolygonMapping.sol": {
        "CustomPolygonMapping": {
          "abi": [
            {
              "constant": false,
              "inputs": [
                {
                  "name": "receiver",
                  "type": "address"
                },
                {
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "syncState",
              "outputs": [],
              "payable": false,
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "constant": true,
              "inputs": [],
              "name": "counter",
              "outputs": [
                {
                  "name": "",
                  "type": "uint256"
                }
              ],
              "payable": false,
              "stateMutability": "view",
              "type": "function"
            },
            {
              "constant": false,
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "payable": false,
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "constant": true,
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "payable": false,
              "stateMutability": "view",
              "type": "function"
            },
            {
              "constant": true,
              "inputs": [],
              "name": "isOwner",
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "payable": false,
              "stateMutability": "view",
              "type": "function"
            },
            {
              "constant": true,
              "inputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "registrations",
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "payable": false,
              "stateMutability": "view",
              "type": "function"
            },
            {
              "constant": false,
              "inputs": [
                {
                  "name": "sender",
                  "type": "address"
                },
                {
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "register",
              "outputs": [],
              "payable": false,
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "constant": false,
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "payable": false,
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "name": "user",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "NewRegistration",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "name": "user",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "name": "sender",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "RegistrationUpdated",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "indexed": true,
                  "name": "contractAddress",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "StateSynced",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "name": "previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            }
          ],
          "devdoc": {
            "methods": {
              "isOwner()": {
                "return": "true if `msg.sender` is the owner of the contract."
              },
              "owner()": {
                "return": "the address of the owner."
              },
              "renounceOwnership()": {
                "details": "Allows the current owner to relinquish control of the contract. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
              },
              "transferOwnership(address)": {
                "details": "Allows the current owner to transfer control of the contract to a newOwner.",
                "params": {
                  "newOwner": "The address to transfer ownership to."
                }
              }
            }
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "6080604081905260008054600160a060020a0319163317808255600160a060020a0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36107e5806100576000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c0100000000000000000000000000000000000000000000000000000000900480638f32d59b116100785780638f32d59b14610172578063942e6bcf1461018e578063aa677354146101b4578063f2fde38b146101e2576100a5565b806316f19831146100aa57806361bc221a1461012c578063715018a6146101465780638da5cb5b1461014e575b600080fd5b61012a600480360360408110156100c057600080fd5b600160a060020a0382351691908101906040810160208201356401000000008111156100eb57600080fd5b8201836020820111156100fd57600080fd5b8035906020019184600183028401116401000000008311171561011f57600080fd5b509092509050610208565b005b6101346104bf565b60408051918252519081900360200190f35b61012a6104c5565b61015661052f565b60408051600160a060020a039092168252519081900360200190f35b61017a61053e565b604080519115158252519081900360200190f35b610156600480360360208110156101a457600080fd5b5035600160a060020a031661054f565b61012a600480360360408110156101ca57600080fd5b50600160a060020a038135811691602001351661056a565b61012a600480360360208110156101f857600080fd5b5035600160a060020a03166106ae565b600160a060020a03808416600090815260026020526040902054849116331461029257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f496e76616c69642073656e646572000000000000000000000000000000000000604482015290519081900360640190fd5b600180546102a59163ffffffff6106cd16565b60018190555083600160a060020a03166001547f103fed9db65eac19c4d870f49ab7520fe03b99f1838e5996caf47e9e43308392858560405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a36000606085600160a060020a031660015486866040516024018084815260200180602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f26c53bea0000000000000000000000000000000000000000000000000000000017815292518151919850965086955091935090915081905083835b602083106103f25780518252601f1990920191602091820191016103d3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610454576040519150601f19603f3d011682016040523d82523d6000602084013e610459565b606091505b5090925090508115156104b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806107646026913960400191505060405180910390fd5b505050505050565b60015481565b6104cd61053e565b15156104d857600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031690565b600054600160a060020a0316331490565b600260205260009081526040902054600160a060020a031681565b61057261053e565b806105965750600160a060020a038181166000908152600260205260409020541633145b15156105ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061078a6030913960400191505060405180910390fd5b600160a060020a038181166000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916848316179081905516151561066e57604051600160a060020a03808316919084169033907f3f4512aacd7a664fdb321a48e8340120d63253a91c6367a143abd19ecf68aedd90600090a46106aa565b604051600160a060020a03808316919084169033907fc51cb1a93ec91e927852b3445875ec77b148271953e5c0b43698c968ad6fc47d90600090a45b5050565b6106b661053e565b15156106c157600080fd5b6106ca816106e6565b50565b6000828201838110156106df57600080fd5b9392505050565b600160a060020a03811615156106fb57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905556fe4641494c45445f414354494f4e5f455845435554494f4e5f435553544f4d5f4d415050494e47537461746553656e6465722e72656769737465723a204e6f7420617574686f72697a656420746f207265676973746572a165627a7a723058200ad4ec6e41c628e18beec6c5310b54327f14afe5aed57aef587e6ba715d4f2ef0029",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB NOT AND CALLER OR DUP1 DUP3 SSTORE PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 PUSH2 0x7E5 DUP1 PUSH2 0x57 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x8F32D59B GT PUSH2 0x78 JUMPI DUP1 PUSH4 0x8F32D59B EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x942E6BCF EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0xAA677354 EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1E2 JUMPI PUSH2 0xA5 JUMP JUMPDEST DUP1 PUSH4 0x16F19831 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0x61BC221A EQ PUSH2 0x12C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x14E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x11F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x208 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134 PUSH2 0x4BF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x12A PUSH2 0x4C5 JUMP JUMPDEST PUSH2 0x156 PUSH2 0x52F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17A PUSH2 0x53E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x156 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x54F JUMP JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x56A JUMP JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x6AE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x292 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642073656E646572000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x2A5 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x6CD AND JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE POP DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 SLOAD PUSH32 0x103FED9DB65EAC19C4D870F49AB7520FE03B99F1838E5996CAF47E9E43308392 DUP6 DUP6 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP6 POP SWAP1 SWAP4 POP POP POP POP LOG3 PUSH1 0x0 PUSH1 0x60 DUP6 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 SLOAD DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND SWAP1 SWAP5 ADD DUP3 DUP2 SUB SWAP1 SWAP5 ADD DUP3 MSTORE SWAP3 DUP4 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x26C53BEA00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD SWAP2 SWAP9 POP SWAP7 POP DUP7 SWAP6 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP DUP2 SWAP1 POP DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3F2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3D3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x454 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x459 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO ISZERO PUSH2 0x4B7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x764 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4CD PUSH2 0x53E JUMP JUMPDEST ISZERO ISZERO PUSH2 0x4D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER EQ SWAP1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 JUMP JUMPDEST PUSH2 0x572 PUSH2 0x53E JUMP JUMPDEST DUP1 PUSH2 0x596 JUMPI POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST ISZERO ISZERO PUSH2 0x5ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x78A PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP5 DUP4 AND OR SWAP1 DUP2 SWAP1 SSTORE AND ISZERO ISZERO PUSH2 0x66E JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP4 AND SWAP2 SWAP1 DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0x3F4512AACD7A664FDB321A48E8340120D63253A91C6367A143ABD19ECF68AEDD SWAP1 PUSH1 0x0 SWAP1 LOG4 PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP4 AND SWAP2 SWAP1 DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xC51CB1A93EC91E927852B3445875EC77B148271953E5C0B43698C968AD6FC47D SWAP1 PUSH1 0x0 SWAP1 LOG4 JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x6B6 PUSH2 0x53E JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6CA DUP2 PUSH2 0x6E6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x6DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP INVALID 0x46 COINBASE 0x49 0x4c GASLIMIT DIFFICULTY 0x5f COINBASE NUMBER SLOAD 0x49 0x4f 0x4e 0x5f GASLIMIT PC GASLIMIT NUMBER SSTORE SLOAD 0x49 0x4f 0x4e 0x5f NUMBER SSTORE MSTORE8 SLOAD 0x4f 0x4d 0x5f 0x4d COINBASE POP POP 0x49 0x4e 0x47 MSTORE8 PUSH21 0x61746553656E6465722E72656769737465723A204E PUSH16 0x7420617574686F72697A656420746F20 PUSH19 0x65676973746572A165627A7A723058200AD4EC PUSH15 0x41C628E18BEEC6C5310B54327F14AF 0xe5 0xae 0xd5 PUSH27 0xEF587E6BA715D4F2EF002900000000000000000000000000000000 ",
              "sourceMap": "3539:1517:0:-;;;;;406:6;:19;;-1:-1:-1;;;;;;406:19:0;415:10;406:19;;;;-1:-1:-1;;;;;469:6:0;;436:40;;406:6;;436:40;3539:1517;;;;;;"
            },
            "deployedBytecode": {
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b50600436106100a5576000357c0100000000000000000000000000000000000000000000000000000000900480638f32d59b116100785780638f32d59b14610172578063942e6bcf1461018e578063aa677354146101b4578063f2fde38b146101e2576100a5565b806316f19831146100aa57806361bc221a1461012c578063715018a6146101465780638da5cb5b1461014e575b600080fd5b61012a600480360360408110156100c057600080fd5b600160a060020a0382351691908101906040810160208201356401000000008111156100eb57600080fd5b8201836020820111156100fd57600080fd5b8035906020019184600183028401116401000000008311171561011f57600080fd5b509092509050610208565b005b6101346104bf565b60408051918252519081900360200190f35b61012a6104c5565b61015661052f565b60408051600160a060020a039092168252519081900360200190f35b61017a61053e565b604080519115158252519081900360200190f35b610156600480360360208110156101a457600080fd5b5035600160a060020a031661054f565b61012a600480360360408110156101ca57600080fd5b50600160a060020a038135811691602001351661056a565b61012a600480360360208110156101f857600080fd5b5035600160a060020a03166106ae565b600160a060020a03808416600090815260026020526040902054849116331461029257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f496e76616c69642073656e646572000000000000000000000000000000000000604482015290519081900360640190fd5b600180546102a59163ffffffff6106cd16565b60018190555083600160a060020a03166001547f103fed9db65eac19c4d870f49ab7520fe03b99f1838e5996caf47e9e43308392858560405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a36000606085600160a060020a031660015486866040516024018084815260200180602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f26c53bea0000000000000000000000000000000000000000000000000000000017815292518151919850965086955091935090915081905083835b602083106103f25780518252601f1990920191602091820191016103d3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610454576040519150601f19603f3d011682016040523d82523d6000602084013e610459565b606091505b5090925090508115156104b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806107646026913960400191505060405180910390fd5b505050505050565b60015481565b6104cd61053e565b15156104d857600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031690565b600054600160a060020a0316331490565b600260205260009081526040902054600160a060020a031681565b61057261053e565b806105965750600160a060020a038181166000908152600260205260409020541633145b15156105ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061078a6030913960400191505060405180910390fd5b600160a060020a038181166000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916848316179081905516151561066e57604051600160a060020a03808316919084169033907f3f4512aacd7a664fdb321a48e8340120d63253a91c6367a143abd19ecf68aedd90600090a46106aa565b604051600160a060020a03808316919084169033907fc51cb1a93ec91e927852b3445875ec77b148271953e5c0b43698c968ad6fc47d90600090a45b5050565b6106b661053e565b15156106c157600080fd5b6106ca816106e6565b50565b6000828201838110156106df57600080fd5b9392505050565b600160a060020a03811615156106fb57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905556fe4641494c45445f414354494f4e5f455845435554494f4e5f435553544f4d5f4d415050494e47537461746553656e6465722e72656769737465723a204e6f7420617574686f72697a656420746f207265676973746572a165627a7a723058200ad4ec6e41c628e18beec6c5310b54327f14afe5aed57aef587e6ba715d4f2ef0029",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA5 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x8F32D59B GT PUSH2 0x78 JUMPI DUP1 PUSH4 0x8F32D59B EQ PUSH2 0x172 JUMPI DUP1 PUSH4 0x942E6BCF EQ PUSH2 0x18E JUMPI DUP1 PUSH4 0xAA677354 EQ PUSH2 0x1B4 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1E2 JUMPI PUSH2 0xA5 JUMP JUMPDEST DUP1 PUSH4 0x16F19831 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0x61BC221A EQ PUSH2 0x12C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x146 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x14E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xEB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x11F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x208 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134 PUSH2 0x4BF JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x12A PUSH2 0x4C5 JUMP JUMPDEST PUSH2 0x156 PUSH2 0x52F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x17A PUSH2 0x53E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x156 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x54F JUMP JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x56A JUMP JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1F8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH2 0x6AE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP5 SWAP2 AND CALLER EQ PUSH2 0x292 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E76616C69642073656E646572000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x2A5 SWAP2 PUSH4 0xFFFFFFFF PUSH2 0x6CD AND JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE POP DUP4 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 SLOAD PUSH32 0x103FED9DB65EAC19C4D870F49AB7520FE03B99F1838E5996CAF47E9E43308392 DUP6 DUP6 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP3 ADD DUP3 SWAP1 SUB SWAP6 POP SWAP1 SWAP4 POP POP POP POP LOG3 PUSH1 0x0 PUSH1 0x60 DUP6 PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND PUSH1 0x1 SLOAD DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP5 DUP5 DUP3 DUP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 DUP4 DUP3 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F SWAP1 SWAP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND SWAP1 SWAP5 ADD DUP3 DUP2 SUB SWAP1 SWAP5 ADD DUP3 MSTORE SWAP3 DUP4 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x26C53BEA00000000000000000000000000000000000000000000000000000000 OR DUP2 MSTORE SWAP3 MLOAD DUP2 MLOAD SWAP2 SWAP9 POP SWAP7 POP DUP7 SWAP6 POP SWAP2 SWAP4 POP SWAP1 SWAP2 POP DUP2 SWAP1 POP DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x3F2 JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x3D3 JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x454 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x459 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP DUP2 ISZERO ISZERO PUSH2 0x4B7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x764 PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x4CD PUSH2 0x53E JUMP JUMPDEST ISZERO ISZERO PUSH2 0x4D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP1 SWAP2 AND SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP4 SWAP1 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND CALLER EQ SWAP1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB AND DUP2 JUMP JUMPDEST PUSH2 0x572 PUSH2 0x53E JUMP JUMPDEST DUP1 PUSH2 0x596 JUMPI POP PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD AND CALLER EQ JUMPDEST ISZERO ISZERO PUSH2 0x5ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x78A PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP5 DUP4 AND OR SWAP1 DUP2 SWAP1 SSTORE AND ISZERO ISZERO PUSH2 0x66E JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP4 AND SWAP2 SWAP1 DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0x3F4512AACD7A664FDB321A48E8340120D63253A91C6367A143ABD19ECF68AEDD SWAP1 PUSH1 0x0 SWAP1 LOG4 PUSH2 0x6AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP4 AND SWAP2 SWAP1 DUP5 AND SWAP1 CALLER SWAP1 PUSH32 0xC51CB1A93EC91E927852B3445875EC77B148271953E5C0B43698C968AD6FC47D SWAP1 PUSH1 0x0 SWAP1 LOG4 JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x6B6 PUSH2 0x53E JUMP JUMPDEST ISZERO ISZERO PUSH2 0x6C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6CA DUP2 PUSH2 0x6E6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP4 DUP2 LT ISZERO PUSH2 0x6DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP2 AND ISZERO ISZERO PUSH2 0x6FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x1 PUSH1 0xA0 PUSH1 0x2 EXP SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP INVALID 0x46 COINBASE 0x49 0x4c GASLIMIT DIFFICULTY 0x5f COINBASE NUMBER SLOAD 0x49 0x4f 0x4e 0x5f GASLIMIT PC GASLIMIT NUMBER SSTORE SLOAD 0x49 0x4f 0x4e 0x5f NUMBER SSTORE MSTORE8 SLOAD 0x4f 0x4d 0x5f 0x4d COINBASE POP POP 0x49 0x4e 0x47 MSTORE8 PUSH21 0x61746553656E6465722E72656769737465723A204E PUSH16 0x7420617574686F72697A656420746F20 PUSH19 0x65676973746572A165627A7A723058200AD4EC PUSH15 0x41C628E18BEEC6C5310B54327F14AF 0xe5 0xae 0xd5 PUSH27 0xEF587E6BA715D4F2EF002900000000000000000000000000000000 ",
              "sourceMap": "3539:1517:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3539:1517:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4107:476;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;4107:476:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;4107:476:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4107:476:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;4107:476:0;;-1:-1:-1;4107:476:0;-1:-1:-1;4107:476:0;:::i;:::-;;3615:22;;;:::i;:::-;;;;;;;;;;;;;;;;1246:127;;;:::i;536:71::-;;;:::i;:::-;;;;-1:-1:-1;;;;;536:71:0;;;;;;;;;;;;;;824:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;3641:48;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3641:48:0;-1:-1:-1;;;;;3641:48:0;;:::i;4629:425::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4629:425:0;;;;;;;;;;:::i;1534:101::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1534:101:0;-1:-1:-1;;;;;1534:101:0;;:::i;4107:476::-;-1:-1:-1;;;;;4035:23:0;;;;;;;:13;:23;;;;;;4189:8;;4035:23;4062:10;4035:37;4027:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4227:1;4215:7;;:14;;;:11;:14;:::i;:::-;4205:7;:24;;;;4261:8;-1:-1:-1;;;;;4240:36:0;4252:7;;4240:36;4271:4;;4240:36;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;4240:36:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;4240:36:0;;;;-1:-1:-1;4240:36:0;;-1:-1:-1;;;;4240:36:0;4318:12;4336:23;4389:8;-1:-1:-1;;;;;4389:13:0;4467:7;;4476:4;;4410:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;4410:71:0;;;137:4:-1;117:14;;;-1:-1;;113:30;;;157:16;;;26:21;;;22:32;;;6:49;;4410:71:0;;;49:4:-1;25:18;;61:17;;4410:71:0;182:15:-1;4410:71:0;179:29:-1;160:49;;4389:98:0;;;;4410:71;;-1:-1:-1;4389:98:0;-1:-1:-1;4389:98:0;;-1:-1:-1;25:18;;-1:-1;4389:98:0;;-1:-1:-1;4389:98:0;;-1:-1:-1;4389:98:0;25:18:-1;36:153;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4389:98:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;-1:-1;4365:122:0;;-1:-1:-1;4365:122:0;-1:-1:-1;4493:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4097:1;;4107:476;;;;:::o;3615:22::-;;;;:::o;1246:127::-;722:9;:7;:9::i;:::-;714:18;;;;;;;;1340:1;1324:6;;1303:40;;-1:-1:-1;;;;;1324:6:0;;;;1303:40;;1340:1;;1303:40;1366:1;1349:19;;-1:-1:-1;;1349:19:0;;;1246:127::o;536:71::-;574:7;596:6;-1:-1:-1;;;;;596:6:0;536:71;:::o;824:84::-;864:4;897:6;-1:-1:-1;;;;;897:6:0;883:10;:20;;824:84::o;3641:48::-;;;;;;;;;;;;-1:-1:-1;;;;;3641:48:0;;:::o;4629:425::-;4709:9;:7;:9::i;:::-;:50;;;-1:-1:-1;;;;;;4722:23:0;;;;;;;:13;:23;;;;;;;4749:10;4722:37;4709:50;4694:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4829:23:0;;;;;;;:13;:23;;;;;:32;;-1:-1:-1;;4829:32:0;;;;;;;;;4871:23;:37;4867:183;;;4923:45;;-1:-1:-1;;;;;4923:45:0;;;;;;;;4939:10;;4923:45;;;;;4867:183;;;4994:49;;-1:-1:-1;;;;;4994:49:0;;;;;;;;5014:10;;4994:49;;;;;4867:183;4629:425;;:::o;1534:101::-;722:9;:7;:9::i;:::-;714:18;;;;;;;;1602:28;1621:8;1602:18;:28::i;:::-;1534:101;:::o;3148:131::-;3206:7;3233:5;;;3252:6;;;;3244:15;;;;;;3273:1;3148:131;-1:-1:-1;;;3148:131:0:o;1769:169::-;-1:-1:-1;;;;;1838:22:0;;;;1830:31;;;;;;1893:6;;;1872:38;;-1:-1:-1;;;;;1872:38:0;;;;1893:6;;;1872:38;;;1916:6;:17;;-1:-1:-1;;1916:17:0;-1:-1:-1;;;;;1916:17:0;;;;;;;;;;1769:169::o"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "404200",
                "executionCost": "22310",
                "totalCost": "426510"
              },
              "external": {
                "counter()": "426",
                "isOwner()": "489",
                "owner()": "623",
                "register(address,address)": "infinite",
                "registrations(address)": "761",
                "renounceOwnership()": "22550",
                "syncState(address,bytes)": "infinite",
                "transferOwnership(address)": "22914"
              }
            },
            "methodIdentifiers": {
              "counter()": "61bc221a",
              "isOwner()": "8f32d59b",
              "owner()": "8da5cb5b",
              "register(address,address)": "aa677354",
              "registrations(address)": "942e6bcf",
              "renounceOwnership()": "715018a6",
              "syncState(address,bytes)": "16f19831",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.5.2+commit.1df8f40c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"syncState\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"registrations\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"register\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"NewRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"RegistrationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"StateSynced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}}}},\"userdoc\":{\"methods\":{\"renounceOwnership()\":{\"notice\":\"Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"}}}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/polygon/CustomPolygonMapping.sol\":\"CustomPolygonMapping\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/dependencies/polygon/CustomPolygonMapping.sol\":{\"content\":\"/**\\n *Submitted for verification at Etherscan.io on 2020-05-30\\n */\\n\\n/**\\nMatic network contracts\\n*/\\n\\npragma solidity ^0.5.2;\\n\\ncontract Ownable {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev The Ownable constructor sets the original `owner` of the contract to the sender\\n   * account.\\n   */\\n  constructor() internal {\\n    _owner = msg.sender;\\n    emit OwnershipTransferred(address(0), _owner);\\n  }\\n\\n  /**\\n   * @return the address of the owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(isOwner());\\n    _;\\n  }\\n\\n  /**\\n   * @return true if `msg.sender` is the owner of the contract.\\n   */\\n  function isOwner() public view returns (bool) {\\n    return msg.sender == _owner;\\n  }\\n\\n  /**\\n   * @dev Allows the current owner to relinquish control of the contract.\\n   * It will not be possible to call the functions with the `onlyOwner`\\n   * modifier anymore.\\n   * @notice Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Allows the current owner to transfer control of the contract to a newOwner.\\n   * @param newOwner The address to transfer ownership to.\\n   */\\n  function transferOwnership(address newOwner) public onlyOwner {\\n    _transferOwnership(newOwner);\\n  }\\n\\n  /**\\n   * @dev Transfers control of the contract to a newOwner.\\n   * @param newOwner The address to transfer ownership to.\\n   */\\n  function _transferOwnership(address newOwner) internal {\\n    require(newOwner != address(0));\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\\nlibrary SafeMath {\\n  /**\\n   * @dev Multiplies two unsigned integers, 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 unsigned integers 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 unsigned integers, 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 unsigned integers, 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 unsigned integers 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\\ncontract CustomPolygonMapping is Ownable {\\n  using SafeMath for uint256;\\n\\n  uint256 public counter;\\n  mapping(address => address) public registrations;\\n\\n  event NewRegistration(address indexed user, address indexed sender, address indexed receiver);\\n  event RegistrationUpdated(address indexed user, address indexed sender, address indexed receiver);\\n  event StateSynced(uint256 indexed id, address indexed contractAddress, bytes data);\\n\\n  modifier onlyRegistered(address receiver) {\\n    require(registrations[receiver] == msg.sender, 'Invalid sender');\\n    _;\\n  }\\n\\n  function syncState(address receiver, bytes calldata data) external onlyRegistered(receiver) {\\n    counter = counter.add(1);\\n    emit StateSynced(counter, receiver, data);\\n    // THIS IS THE ONLY CUSTOM PART\\n    bool success;\\n    bytes memory resultData;\\n    (success, resultData) = receiver.call(\\n      abi.encodeWithSignature('onStateReceive(uint256,bytes)', counter, data)\\n    );\\n    require(success, 'FAILED_ACTION_EXECUTION_CUSTOM_MAPPING');\\n    // END THE CUSTOM PART\\n  }\\n\\n  // register new contract for state sync\\n  function register(address sender, address receiver) public {\\n    require(\\n      isOwner() || registrations[receiver] == msg.sender,\\n      'StateSender.register: Not authorized to register'\\n    );\\n    registrations[receiver] = sender;\\n    if (registrations[receiver] == address(0)) {\\n      emit NewRegistration(msg.sender, sender, receiver);\\n    } else {\\n      emit RegistrationUpdated(msg.sender, sender, receiver);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfa76dbace7db086743b65ed8443377d083fb33a46e6eea0f6710a9b257cfac81\"}},\"version\":1}",
          "userdoc": {
            "methods": {
              "renounceOwnership()": {
                "notice": "Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
              }
            }
          }
        },
        "Ownable": {
          "abi": [
            {
              "constant": false,
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "payable": false,
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "constant": true,
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "name": "",
                  "type": "address"
                }
              ],
              "payable": false,
              "stateMutability": "view",
              "type": "function"
            },
            {
              "constant": true,
              "inputs": [],
              "name": "isOwner",
              "outputs": [
                {
                  "name": "",
                  "type": "bool"
                }
              ],
              "payable": false,
              "stateMutability": "view",
              "type": "function"
            },
            {
              "constant": false,
              "inputs": [
                {
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "payable": false,
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "payable": false,
              "stateMutability": "nonpayable",
              "type": "constructor"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "name": "previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            }
          ],
          "devdoc": {
            "methods": {
              "constructor": {
                "details": "The Ownable constructor sets the original `owner` of the contract to the sender account."
              },
              "isOwner()": {
                "return": "true if `msg.sender` is the owner of the contract."
              },
              "owner()": {
                "return": "the address of the owner."
              },
              "renounceOwnership()": {
                "details": "Allows the current owner to relinquish control of the contract. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
              },
              "transferOwnership(address)": {
                "details": "Allows the current owner to transfer control of the contract to a newOwner.",
                "params": {
                  "newOwner": "The address to transfer ownership to."
                }
              }
            }
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "gasEstimates": null,
            "methodIdentifiers": {
              "isOwner()": "8f32d59b",
              "owner()": "8da5cb5b",
              "renounceOwnership()": "715018a6",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "",
          "userdoc": {
            "methods": {
              "renounceOwnership()": {
                "notice": "Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
              }
            }
          }
        },
        "SafeMath": {
          "abi": [],
          "devdoc": {
            "methods": {}
          },
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "604c602c600b82828239805160001a60731460008114601c57601e565bfe5b5030600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a723058207def30a45c263e7ace71899e8bbc1d3a7ad1fa49c4a5409f578122fc0efc842a0029",
              "opcodes": "PUSH1 0x4C PUSH1 0x2C PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x0 DUP2 EQ PUSH1 0x1C JUMPI PUSH1 0x1E JUMP JUMPDEST INVALID JUMPDEST POP ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH30 0xEF30A45C263E7ACE71899E8BBC1D3A7AD1FA49C4A5409F578122FC0EFC84 0x2a STOP 0x29 ",
              "sourceMap": "1942:1595:0:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24"
            },
            "deployedBytecode": {
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea165627a7a723058207def30a45c263e7ace71899e8bbc1d3a7ad1fa49c4a5409f578122fc0efc842a0029",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH30 0xEF30A45C263E7ACE71899E8BBC1D3A7AD1FA49C4A5409F578122FC0EFC84 0x2a STOP 0x29 ",
              "sourceMap": "1942:1595:0:-;;;;;;;;"
            },
            "gasEstimates": {
              "creation": {
                "codeDepositCost": "15200",
                "executionCost": "116",
                "totalCost": "15316"
              },
              "internal": {
                "add(uint256,uint256)": "infinite",
                "div(uint256,uint256)": "infinite",
                "mod(uint256,uint256)": "infinite",
                "mul(uint256,uint256)": "infinite",
                "sub(uint256,uint256)": "infinite"
              }
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.5.2+commit.1df8f40c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"contracts/dependencies/polygon/CustomPolygonMapping.sol\":\"SafeMath\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/dependencies/polygon/CustomPolygonMapping.sol\":{\"content\":\"/**\\n *Submitted for verification at Etherscan.io on 2020-05-30\\n */\\n\\n/**\\nMatic network contracts\\n*/\\n\\npragma solidity ^0.5.2;\\n\\ncontract Ownable {\\n  address private _owner;\\n\\n  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n  /**\\n   * @dev The Ownable constructor sets the original `owner` of the contract to the sender\\n   * account.\\n   */\\n  constructor() internal {\\n    _owner = msg.sender;\\n    emit OwnershipTransferred(address(0), _owner);\\n  }\\n\\n  /**\\n   * @return the address of the owner.\\n   */\\n  function owner() public view returns (address) {\\n    return _owner;\\n  }\\n\\n  /**\\n   * @dev Throws if called by any account other than the owner.\\n   */\\n  modifier onlyOwner() {\\n    require(isOwner());\\n    _;\\n  }\\n\\n  /**\\n   * @return true if `msg.sender` is the owner of the contract.\\n   */\\n  function isOwner() public view returns (bool) {\\n    return msg.sender == _owner;\\n  }\\n\\n  /**\\n   * @dev Allows the current owner to relinquish control of the contract.\\n   * It will not be possible to call the functions with the `onlyOwner`\\n   * modifier anymore.\\n   * @notice Renouncing ownership will leave the contract without an owner,\\n   * thereby removing any functionality that is only available to the owner.\\n   */\\n  function renounceOwnership() public onlyOwner {\\n    emit OwnershipTransferred(_owner, address(0));\\n    _owner = address(0);\\n  }\\n\\n  /**\\n   * @dev Allows the current owner to transfer control of the contract to a newOwner.\\n   * @param newOwner The address to transfer ownership to.\\n   */\\n  function transferOwnership(address newOwner) public onlyOwner {\\n    _transferOwnership(newOwner);\\n  }\\n\\n  /**\\n   * @dev Transfers control of the contract to a newOwner.\\n   * @param newOwner The address to transfer ownership to.\\n   */\\n  function _transferOwnership(address newOwner) internal {\\n    require(newOwner != address(0));\\n    emit OwnershipTransferred(_owner, newOwner);\\n    _owner = newOwner;\\n  }\\n}\\n\\nlibrary SafeMath {\\n  /**\\n   * @dev Multiplies two unsigned integers, 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 unsigned integers 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 unsigned integers, 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 unsigned integers, 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 unsigned integers 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\\ncontract CustomPolygonMapping is Ownable {\\n  using SafeMath for uint256;\\n\\n  uint256 public counter;\\n  mapping(address => address) public registrations;\\n\\n  event NewRegistration(address indexed user, address indexed sender, address indexed receiver);\\n  event RegistrationUpdated(address indexed user, address indexed sender, address indexed receiver);\\n  event StateSynced(uint256 indexed id, address indexed contractAddress, bytes data);\\n\\n  modifier onlyRegistered(address receiver) {\\n    require(registrations[receiver] == msg.sender, 'Invalid sender');\\n    _;\\n  }\\n\\n  function syncState(address receiver, bytes calldata data) external onlyRegistered(receiver) {\\n    counter = counter.add(1);\\n    emit StateSynced(counter, receiver, data);\\n    // THIS IS THE ONLY CUSTOM PART\\n    bool success;\\n    bytes memory resultData;\\n    (success, resultData) = receiver.call(\\n      abi.encodeWithSignature('onStateReceive(uint256,bytes)', counter, data)\\n    );\\n    require(success, 'FAILED_ACTION_EXECUTION_CUSTOM_MAPPING');\\n    // END THE CUSTOM PART\\n  }\\n\\n  // register new contract for state sync\\n  function register(address sender, address receiver) public {\\n    require(\\n      isOwner() || registrations[receiver] == msg.sender,\\n      'StateSender.register: Not authorized to register'\\n    );\\n    registrations[receiver] = sender;\\n    if (registrations[receiver] == address(0)) {\\n      emit NewRegistration(msg.sender, sender, receiver);\\n    } else {\\n      emit RegistrationUpdated(msg.sender, sender, receiver);\\n    }\\n  }\\n}\\n\",\"keccak256\":\"0xfa76dbace7db086743b65ed8443377d083fb33a46e6eea0f6710a9b257cfac81\"}},\"version\":1}",
          "userdoc": {
            "methods": {}
          }
        }
      }
    },
    "sources": {
      "contracts/dependencies/polygon/CustomPolygonMapping.sol": {
        "ast": {
          "absolutePath": "contracts/dependencies/polygon/CustomPolygonMapping.sol",
          "exportedSymbols": {
            "CustomPolygonMapping": [
              386
            ],
            "Ownable": [
              108
            ],
            "SafeMath": [
              234
            ]
          },
          "id": 387,
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "^",
                "0.5",
                ".2"
              ],
              "nodeType": "PragmaDirective",
              "src": "100:23:0"
            },
            {
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": null,
              "fullyImplemented": true,
              "id": 108,
              "linearizedBaseContracts": [
                108
              ],
              "name": "Ownable",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "id": 3,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 108,
                  "src": "146:22:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "146:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "private"
                },
                {
                  "anonymous": false,
                  "documentation": null,
                  "id": 9,
                  "name": "OwnershipTransferred",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 8,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5,
                        "indexed": true,
                        "name": "previousOwner",
                        "nodeType": "VariableDeclaration",
                        "scope": 9,
                        "src": "200:29:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "200:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7,
                        "indexed": true,
                        "name": "newOwner",
                        "nodeType": "VariableDeclaration",
                        "scope": 9,
                        "src": "231:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "231:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "199:57:0"
                  },
                  "src": "173:84:0"
                },
                {
                  "body": {
                    "id": 24,
                    "nodeType": "Block",
                    "src": "400:81:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 15,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 12,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3,
                            "src": "406:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 13,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 401,
                              "src": "415:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 14,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "415:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "406:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 16,
                        "nodeType": "ExpressionStatement",
                        "src": "406:19:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 19,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "465:1:0",
                                  "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": 18,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "457:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 20,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "457:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 21,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3,
                              "src": "469:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 17,
                            "name": "OwnershipTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9,
                            "src": "436:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 22,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "436:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 23,
                        "nodeType": "EmitStatement",
                        "src": "431:45:0"
                      }
                    ]
                  },
                  "documentation": "@dev The Ownable constructor sets the original `owner` of the contract to the sender\naccount.",
                  "id": 25,
                  "implemented": true,
                  "kind": "constructor",
                  "modifiers": [],
                  "name": "",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "388:2:0"
                  },
                  "returnParameters": {
                    "id": 11,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "400:0:0"
                  },
                  "scope": 108,
                  "src": "377:104:0",
                  "stateMutability": "nonpayable",
                  "superFunction": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 32,
                    "nodeType": "Block",
                    "src": "583:24:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 30,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3,
                          "src": "596:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 29,
                        "id": 31,
                        "nodeType": "Return",
                        "src": "589:13:0"
                      }
                    ]
                  },
                  "documentation": "@return the address of the owner.",
                  "id": 33,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 26,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "550:2:0"
                  },
                  "returnParameters": {
                    "id": 29,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 28,
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 33,
                        "src": "574:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 27,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "574:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "573:9:0"
                  },
                  "scope": 108,
                  "src": "536:71:0",
                  "stateMutability": "view",
                  "superFunction": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 41,
                    "nodeType": "Block",
                    "src": "708:36:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 36,
                                "name": "isOwner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 53,
                                "src": "722:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                  "typeString": "function () view returns (bool)"
                                }
                              },
                              "id": 37,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "722:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 35,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 404,
                            "src": "714:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 38,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "714:18:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 39,
                        "nodeType": "ExpressionStatement",
                        "src": "714:18:0"
                      },
                      {
                        "id": 40,
                        "nodeType": "PlaceholderStatement",
                        "src": "738:1:0"
                      }
                    ]
                  },
                  "documentation": "@dev Throws if called by any account other than the owner.",
                  "id": 42,
                  "name": "onlyOwner",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 34,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "705:2:0"
                  },
                  "src": "687:57:0",
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 52,
                    "nodeType": "Block",
                    "src": "870:38:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 50,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 47,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 401,
                              "src": "883:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 48,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "883:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 49,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3,
                            "src": "897:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "883:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 46,
                        "id": 51,
                        "nodeType": "Return",
                        "src": "876:27:0"
                      }
                    ]
                  },
                  "documentation": "@return true if `msg.sender` is the owner of the contract.",
                  "id": 53,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isOwner",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 43,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "840:2:0"
                  },
                  "returnParameters": {
                    "id": 46,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 45,
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 53,
                        "src": "864:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 44,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "864:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "863:6:0"
                  },
                  "scope": 108,
                  "src": "824:84:0",
                  "stateMutability": "view",
                  "superFunction": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 71,
                    "nodeType": "Block",
                    "src": "1292:81:0",
                    "statements": [
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 59,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3,
                              "src": "1324:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 61,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1340:1:0",
                                  "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": 60,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1332:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 62,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1332:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 58,
                            "name": "OwnershipTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9,
                            "src": "1303:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 63,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1303:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 64,
                        "nodeType": "EmitStatement",
                        "src": "1298:45:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 69,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 65,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3,
                            "src": "1349:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 67,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1366:1:0",
                                "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": 66,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1358:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 68,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1358:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "1349:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 70,
                        "nodeType": "ExpressionStatement",
                        "src": "1349:19:0"
                      }
                    ]
                  },
                  "documentation": "@dev Allows the current owner to relinquish control of the contract.\nIt will not be possible to call the functions with the `onlyOwner`\nmodifier anymore.\n@notice Renouncing ownership will leave the contract without an owner,\nthereby removing any functionality that is only available to the owner.",
                  "id": 72,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 56,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 55,
                        "name": "onlyOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42,
                        "src": "1282:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1282:9:0"
                    }
                  ],
                  "name": "renounceOwnership",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 54,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1272:2:0"
                  },
                  "returnParameters": {
                    "id": 57,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1292:0:0"
                  },
                  "scope": 108,
                  "src": "1246:127:0",
                  "stateMutability": "nonpayable",
                  "superFunction": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 83,
                    "nodeType": "Block",
                    "src": "1596:39:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 80,
                              "name": "newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "1621:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 79,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 107,
                            "src": "1602:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 81,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1602:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 82,
                        "nodeType": "ExpressionStatement",
                        "src": "1602:28:0"
                      }
                    ]
                  },
                  "documentation": "@dev Allows the current owner to transfer control of the contract to a newOwner.\n@param newOwner The address to transfer ownership to.",
                  "id": 84,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": null,
                      "id": 77,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 76,
                        "name": "onlyOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42,
                        "src": "1586:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$__$",
                          "typeString": "modifier ()"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1586:9:0"
                    }
                  ],
                  "name": "transferOwnership",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 75,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 74,
                        "name": "newOwner",
                        "nodeType": "VariableDeclaration",
                        "scope": 84,
                        "src": "1561:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 73,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1561:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1560:18:0"
                  },
                  "returnParameters": {
                    "id": 78,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1596:0:0"
                  },
                  "scope": 108,
                  "src": "1534:101:0",
                  "stateMutability": "nonpayable",
                  "superFunction": null,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 106,
                    "nodeType": "Block",
                    "src": "1824:114:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 94,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 90,
                                "name": "newOwner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 86,
                                "src": "1838:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 92,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1858:1:0",
                                    "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": 91,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1850:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 93,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1850:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "1838:22:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 89,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 404,
                            "src": "1830:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 95,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1830:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 96,
                        "nodeType": "ExpressionStatement",
                        "src": "1830:31:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 98,
                              "name": "_owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3,
                              "src": "1893:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 99,
                              "name": "newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 86,
                              "src": "1901:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 97,
                            "name": "OwnershipTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9,
                            "src": "1872:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 100,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1872:38:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 101,
                        "nodeType": "EmitStatement",
                        "src": "1867:43:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 102,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3,
                            "src": "1916:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 103,
                            "name": "newOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 86,
                            "src": "1925:8:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1916:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 105,
                        "nodeType": "ExpressionStatement",
                        "src": "1916:17:0"
                      }
                    ]
                  },
                  "documentation": "@dev Transfers control of the contract to a newOwner.\n@param newOwner The address to transfer ownership to.",
                  "id": 107,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transferOwnership",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 87,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 86,
                        "name": "newOwner",
                        "nodeType": "VariableDeclaration",
                        "scope": 107,
                        "src": "1797:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 85,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1797:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1796:18:0"
                  },
                  "returnParameters": {
                    "id": 88,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1824:0:0"
                  },
                  "scope": 108,
                  "src": "1769:169:0",
                  "stateMutability": "nonpayable",
                  "superFunction": null,
                  "visibility": "internal"
                }
              ],
              "scope": 387,
              "src": "125:1815:0"
            },
            {
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": null,
              "fullyImplemented": true,
              "id": 234,
              "linearizedBaseContracts": [
                234
              ],
              "name": "SafeMath",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 140,
                    "nodeType": "Block",
                    "src": "2107:314:0",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 119,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 117,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 110,
                            "src": "2322:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 118,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2327:1:0",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2322:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 123,
                        "nodeType": "IfStatement",
                        "src": "2318:35:0",
                        "trueBody": {
                          "id": 122,
                          "nodeType": "Block",
                          "src": "2330:23:0",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 120,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2345:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 116,
                              "id": 121,
                              "nodeType": "Return",
                              "src": "2338:8:0"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          125
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 125,
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 140,
                            "src": "2359:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 124,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2359:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 129,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 126,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 110,
                            "src": "2371:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 127,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 112,
                            "src": "2375:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2371:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2359:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 135,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 133,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 131,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 125,
                                  "src": "2390:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 132,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 110,
                                  "src": "2394:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2390:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 134,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 112,
                                "src": "2399:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2390:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 130,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 404,
                            "src": "2382:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 136,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2382:19:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 137,
                        "nodeType": "ExpressionStatement",
                        "src": "2382:19:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 138,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 125,
                          "src": "2415:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 116,
                        "id": 139,
                        "nodeType": "Return",
                        "src": "2408:8:0"
                      }
                    ]
                  },
                  "documentation": "@dev Multiplies two unsigned integers, reverts on overflow.",
                  "id": 141,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 113,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 110,
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 141,
                        "src": "2053:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 109,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2053:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 112,
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 141,
                        "src": "2064:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 111,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2064:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2052:22:0"
                  },
                  "returnParameters": {
                    "id": 116,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 115,
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 141,
                        "src": "2098:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 114,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2098:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2097:9:0"
                  },
                  "scope": 234,
                  "src": "2040:381:0",
                  "stateMutability": "pure",
                  "superFunction": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 164,
                    "nodeType": "Block",
                    "src": "2610:207:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 153,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 151,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 145,
                                "src": "2686:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 152,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2690:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "2686:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 150,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 404,
                            "src": "2678:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2678:14:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 155,
                        "nodeType": "ExpressionStatement",
                        "src": "2678:14:0"
                      },
                      {
                        "assignments": [
                          157
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 157,
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 164,
                            "src": "2698:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 156,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2698:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 161,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 160,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 158,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 143,
                            "src": "2710:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 159,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 145,
                            "src": "2714:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2710:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2698:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 162,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 157,
                          "src": "2811:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 149,
                        "id": 163,
                        "nodeType": "Return",
                        "src": "2804:8:0"
                      }
                    ]
                  },
                  "documentation": "@dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.",
                  "id": 165,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "div",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 146,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 143,
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 165,
                        "src": "2556:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 142,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2556:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 145,
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 165,
                        "src": "2567:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 144,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2567:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2555:22:0"
                  },
                  "returnParameters": {
                    "id": 149,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 148,
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 165,
                        "src": "2601:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 147,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2601:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2600:9:0"
                  },
                  "scope": 234,
                  "src": "2543:274:0",
                  "stateMutability": "pure",
                  "superFunction": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 188,
                    "nodeType": "Block",
                    "src": "3009:64:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 177,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 175,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 169,
                                "src": "3023:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 176,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 167,
                                "src": "3028:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3023:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 174,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 404,
                            "src": "3015:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3015:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 179,
                        "nodeType": "ExpressionStatement",
                        "src": "3015:15:0"
                      },
                      {
                        "assignments": [
                          181
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 181,
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 188,
                            "src": "3036:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 180,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3036:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 185,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 182,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 167,
                            "src": "3048:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 183,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 169,
                            "src": "3052:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3048:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3036:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 186,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 181,
                          "src": "3067:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 173,
                        "id": 187,
                        "nodeType": "Return",
                        "src": "3060:8:0"
                      }
                    ]
                  },
                  "documentation": "@dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).",
                  "id": 189,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sub",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 170,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 167,
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 189,
                        "src": "2955:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 166,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2955:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 169,
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 189,
                        "src": "2966:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 168,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2966:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2954:22:0"
                  },
                  "returnParameters": {
                    "id": 173,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 172,
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 189,
                        "src": "3000:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 171,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3000:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "2999:9:0"
                  },
                  "scope": 234,
                  "src": "2942:131:0",
                  "stateMutability": "pure",
                  "superFunction": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 212,
                    "nodeType": "Block",
                    "src": "3215:64:0",
                    "statements": [
                      {
                        "assignments": [
                          199
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 199,
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 212,
                            "src": "3221:9:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 198,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3221:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 203,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 200,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 191,
                            "src": "3233:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 201,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 193,
                            "src": "3237:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3233:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3221:17:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 207,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 205,
                                "name": "c",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 199,
                                "src": "3252:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 206,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 191,
                                "src": "3257:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3252:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 204,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 404,
                            "src": "3244:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3244:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 209,
                        "nodeType": "ExpressionStatement",
                        "src": "3244:15:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 210,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 199,
                          "src": "3273:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 197,
                        "id": 211,
                        "nodeType": "Return",
                        "src": "3266:8:0"
                      }
                    ]
                  },
                  "documentation": "@dev Adds two unsigned integers, reverts on overflow.",
                  "id": 213,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 194,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 191,
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 213,
                        "src": "3161:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 190,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3161:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 193,
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 213,
                        "src": "3172:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 192,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3172:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3160:22:0"
                  },
                  "returnParameters": {
                    "id": 197,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 196,
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 213,
                        "src": "3206:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 195,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3206:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3205:9:0"
                  },
                  "scope": 234,
                  "src": "3148:131:0",
                  "stateMutability": "pure",
                  "superFunction": null,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 232,
                    "nodeType": "Block",
                    "src": "3491:44:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 225,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 223,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 217,
                                "src": "3505:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3510:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "3505:6:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 222,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 404,
                            "src": "3497:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3497:15:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 227,
                        "nodeType": "ExpressionStatement",
                        "src": "3497:15:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 230,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 228,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 215,
                            "src": "3525:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 229,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 217,
                            "src": "3529:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3525:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 221,
                        "id": 231,
                        "nodeType": "Return",
                        "src": "3518:12:0"
                      }
                    ]
                  },
                  "documentation": "@dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero.",
                  "id": 233,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mod",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 218,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 215,
                        "name": "a",
                        "nodeType": "VariableDeclaration",
                        "scope": 233,
                        "src": "3437:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 214,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3437:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 217,
                        "name": "b",
                        "nodeType": "VariableDeclaration",
                        "scope": 233,
                        "src": "3448:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 216,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3448:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3436:22:0"
                  },
                  "returnParameters": {
                    "id": 221,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 220,
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "scope": 233,
                        "src": "3482:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 219,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3482:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3481:9:0"
                  },
                  "scope": 234,
                  "src": "3424:111:0",
                  "stateMutability": "pure",
                  "superFunction": null,
                  "visibility": "internal"
                }
              ],
              "scope": 387,
              "src": "1942:1595:0"
            },
            {
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 235,
                    "name": "Ownable",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 108,
                    "src": "3572:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Ownable_$108",
                      "typeString": "contract Ownable"
                    }
                  },
                  "id": 236,
                  "nodeType": "InheritanceSpecifier",
                  "src": "3572:7:0"
                }
              ],
              "contractDependencies": [
                108
              ],
              "contractKind": "contract",
              "documentation": null,
              "fullyImplemented": true,
              "id": 386,
              "linearizedBaseContracts": [
                386,
                108
              ],
              "name": "CustomPolygonMapping",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "id": 239,
                  "libraryName": {
                    "contractScope": null,
                    "id": 237,
                    "name": "SafeMath",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 234,
                    "src": "3590:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_SafeMath_$234",
                      "typeString": "library SafeMath"
                    }
                  },
                  "nodeType": "UsingForDirective",
                  "src": "3584:27:0",
                  "typeName": {
                    "id": 238,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3603:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 241,
                  "name": "counter",
                  "nodeType": "VariableDeclaration",
                  "scope": 386,
                  "src": "3615:22:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 240,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3615:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "id": 245,
                  "name": "registrations",
                  "nodeType": "VariableDeclaration",
                  "scope": 386,
                  "src": "3641:48:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                    "typeString": "mapping(address => address)"
                  },
                  "typeName": {
                    "id": 244,
                    "keyType": {
                      "id": 242,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3649:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "3641:27:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                      "typeString": "mapping(address => address)"
                    },
                    "valueType": {
                      "id": 243,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "3660:7:0",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    }
                  },
                  "value": null,
                  "visibility": "public"
                },
                {
                  "anonymous": false,
                  "documentation": null,
                  "id": 253,
                  "name": "NewRegistration",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 252,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 247,
                        "indexed": true,
                        "name": "user",
                        "nodeType": "VariableDeclaration",
                        "scope": 253,
                        "src": "3716:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 246,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3716:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 249,
                        "indexed": true,
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 253,
                        "src": "3738:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 248,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3738:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 251,
                        "indexed": true,
                        "name": "receiver",
                        "nodeType": "VariableDeclaration",
                        "scope": 253,
                        "src": "3762:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 250,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3762:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3715:72:0"
                  },
                  "src": "3694:94:0"
                },
                {
                  "anonymous": false,
                  "documentation": null,
                  "id": 261,
                  "name": "RegistrationUpdated",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 260,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 255,
                        "indexed": true,
                        "name": "user",
                        "nodeType": "VariableDeclaration",
                        "scope": 261,
                        "src": "3817:20:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 254,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3817:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 257,
                        "indexed": true,
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 261,
                        "src": "3839:22:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 256,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3839:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 259,
                        "indexed": true,
                        "name": "receiver",
                        "nodeType": "VariableDeclaration",
                        "scope": 261,
                        "src": "3863:24:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 258,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3863:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3816:72:0"
                  },
                  "src": "3791:98:0"
                },
                {
                  "anonymous": false,
                  "documentation": null,
                  "id": 269,
                  "name": "StateSynced",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 268,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 263,
                        "indexed": true,
                        "name": "id",
                        "nodeType": "VariableDeclaration",
                        "scope": 269,
                        "src": "3910:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 262,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3910:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 265,
                        "indexed": true,
                        "name": "contractAddress",
                        "nodeType": "VariableDeclaration",
                        "scope": 269,
                        "src": "3930:31:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 264,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3930:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 267,
                        "indexed": false,
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 269,
                        "src": "3963:10:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 266,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3963:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "3909:65:0"
                  },
                  "src": "3892:83:0"
                },
                {
                  "body": {
                    "id": 284,
                    "nodeType": "Block",
                    "src": "4021:82:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 279,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 274,
                                  "name": "registrations",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 245,
                                  "src": "4035:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                    "typeString": "mapping(address => address)"
                                  }
                                },
                                "id": 276,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 275,
                                  "name": "receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 271,
                                  "src": "4049:8:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "4035:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 277,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 401,
                                  "src": "4062:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 278,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4062:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "src": "4035:37:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e76616c69642073656e646572",
                              "id": 280,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4074:16:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_691168f418fc5a4f61166421198b5a4bea266021eef8bf76cd53f1653d7b7ec0",
                                "typeString": "literal_string \"Invalid sender\""
                              },
                              "value": "Invalid sender"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_691168f418fc5a4f61166421198b5a4bea266021eef8bf76cd53f1653d7b7ec0",
                                "typeString": "literal_string \"Invalid sender\""
                              }
                            ],
                            "id": 273,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 405,
                            "src": "4027:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4027:64:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 282,
                        "nodeType": "ExpressionStatement",
                        "src": "4027:64:0"
                      },
                      {
                        "id": 283,
                        "nodeType": "PlaceholderStatement",
                        "src": "4097:1:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 285,
                  "name": "onlyRegistered",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 272,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 271,
                        "name": "receiver",
                        "nodeType": "VariableDeclaration",
                        "scope": 285,
                        "src": "4003:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 270,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4003:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4002:18:0"
                  },
                  "src": "3979:124:0",
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 333,
                    "nodeType": "Block",
                    "src": "4199:384:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 300,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 295,
                            "name": "counter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 241,
                            "src": "4205:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 298,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4227:1:0",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 296,
                                "name": "counter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 241,
                                "src": "4215:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 297,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 213,
                              "src": "4215:11:0",
                              "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": 299,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4215:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4205:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 301,
                        "nodeType": "ExpressionStatement",
                        "src": "4205:24:0"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 303,
                              "name": "counter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 241,
                              "src": "4252:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 304,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 287,
                              "src": "4261:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 305,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 289,
                              "src": "4271:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 302,
                            "name": "StateSynced",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 269,
                            "src": "4240:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (uint256,address,bytes memory)"
                            }
                          },
                          "id": 306,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4240:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 307,
                        "nodeType": "EmitStatement",
                        "src": "4235:41:0"
                      },
                      {
                        "assignments": [
                          309
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 309,
                            "name": "success",
                            "nodeType": "VariableDeclaration",
                            "scope": 333,
                            "src": "4318:12:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 308,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4318:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 310,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4318:12:0"
                      },
                      {
                        "assignments": [
                          312
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 312,
                            "name": "resultData",
                            "nodeType": "VariableDeclaration",
                            "scope": 333,
                            "src": "4336:23:0",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 311,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "4336:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 313,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4336:23:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "id": 314,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 309,
                                "src": "4366:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 315,
                                "name": "resultData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 312,
                                "src": "4375:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "id": 316,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "TupleExpression",
                            "src": "4365:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "tuple(bool,bytes memory)"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "6f6e5374617465526563656976652875696e743235362c627974657329",
                                    "id": 321,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4434:31:0",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_26c53bea24aae88e4987015630edcc6008c246b7356e234c3343da9873718dc6",
                                      "typeString": "literal_string \"onStateReceive(uint256,bytes)\""
                                    },
                                    "value": "onStateReceive(uint256,bytes)"
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 322,
                                    "name": "counter",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 241,
                                    "src": "4467:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 323,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 289,
                                    "src": "4476:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_26c53bea24aae88e4987015630edcc6008c246b7356e234c3343da9873718dc6",
                                      "typeString": "literal_string \"onStateReceive(uint256,bytes)\""
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 319,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 388,
                                    "src": "4410:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 320,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "encodeWithSignature",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4410:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (string memory) pure returns (bytes memory)"
                                  }
                                },
                                "id": 324,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4410:71:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 317,
                                "name": "receiver",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 287,
                                "src": "4389:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4389:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 325,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4389:98:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "tuple(bool,bytes memory)"
                            }
                          },
                          "src": "4365:122:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 327,
                        "nodeType": "ExpressionStatement",
                        "src": "4365:122:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 329,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 309,
                              "src": "4501:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4641494c45445f414354494f4e5f455845435554494f4e5f435553544f4d5f4d415050494e47",
                              "id": 330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4510:40:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3f3712faa971ffdd2251f1ae49bf3ac4140fed94007d94517bca54a47874f52d",
                                "typeString": "literal_string \"FAILED_ACTION_EXECUTION_CUSTOM_MAPPING\""
                              },
                              "value": "FAILED_ACTION_EXECUTION_CUSTOM_MAPPING"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3f3712faa971ffdd2251f1ae49bf3ac4140fed94007d94517bca54a47874f52d",
                                "typeString": "literal_string \"FAILED_ACTION_EXECUTION_CUSTOM_MAPPING\""
                              }
                            ],
                            "id": 328,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 405,
                            "src": "4493:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4493:58:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 332,
                        "nodeType": "ExpressionStatement",
                        "src": "4493:58:0"
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 334,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 292,
                          "name": "receiver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 287,
                          "src": "4189:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "id": 293,
                      "modifierName": {
                        "argumentTypes": null,
                        "id": 291,
                        "name": "onlyRegistered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 285,
                        "src": "4174:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_modifier$_t_address_$",
                          "typeString": "modifier (address)"
                        }
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "4174:24:0"
                    }
                  ],
                  "name": "syncState",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 290,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 287,
                        "name": "receiver",
                        "nodeType": "VariableDeclaration",
                        "scope": 334,
                        "src": "4126:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 286,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4126:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 289,
                        "name": "data",
                        "nodeType": "VariableDeclaration",
                        "scope": 334,
                        "src": "4144:19:0",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 288,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4144:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4125:39:0"
                  },
                  "returnParameters": {
                    "id": 294,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4199:0:0"
                  },
                  "scope": 386,
                  "src": "4107:476:0",
                  "stateMutability": "nonpayable",
                  "superFunction": null,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 384,
                    "nodeType": "Block",
                    "src": "4688:366:0",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 350,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 342,
                                  "name": "isOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 53,
                                  "src": "4709:7:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                    "typeString": "function () view returns (bool)"
                                  }
                                },
                                "id": 343,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4709:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 349,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 344,
                                    "name": "registrations",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 245,
                                    "src": "4722:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                      "typeString": "mapping(address => address)"
                                    }
                                  },
                                  "id": 346,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 345,
                                    "name": "receiver",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 338,
                                    "src": "4736:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4722:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 347,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 401,
                                    "src": "4749:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 348,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4749:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                "src": "4722:37:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "4709:50:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "537461746553656e6465722e72656769737465723a204e6f7420617574686f72697a656420746f207265676973746572",
                              "id": 351,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4767:50:0",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_56b0844d3caac3db44f9be17329a5c99c94daa9d269a1d1388559e65a0938d48",
                                "typeString": "literal_string \"StateSender.register: Not authorized to register\""
                              },
                              "value": "StateSender.register: Not authorized to register"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_56b0844d3caac3db44f9be17329a5c99c94daa9d269a1d1388559e65a0938d48",
                                "typeString": "literal_string \"StateSender.register: Not authorized to register\""
                              }
                            ],
                            "id": 341,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              404,
                              405
                            ],
                            "referencedDeclaration": 405,
                            "src": "4694:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4694:129:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 353,
                        "nodeType": "ExpressionStatement",
                        "src": "4694:129:0"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 354,
                              "name": "registrations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 245,
                              "src": "4829:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 356,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 355,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 338,
                              "src": "4843:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4829:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 357,
                            "name": "sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 336,
                            "src": "4855:6:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4829:32:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 359,
                        "nodeType": "ExpressionStatement",
                        "src": "4829:32:0"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 366,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 360,
                              "name": "registrations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 245,
                              "src": "4871:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 362,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 361,
                              "name": "receiver",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 338,
                              "src": "4885:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4871:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 364,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4906:1:0",
                                "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": 363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4898:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 365,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4898:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "4871:37:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 382,
                          "nodeType": "Block",
                          "src": "4981:69:0",
                          "statements": [
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 376,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 401,
                                      "src": "5014:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 377,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "5014:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 378,
                                    "name": "sender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 336,
                                    "src": "5026:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 379,
                                    "name": "receiver",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 338,
                                    "src": "5034:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 375,
                                  "name": "RegistrationUpdated",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 261,
                                  "src": "4994:19:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (address,address,address)"
                                  }
                                },
                                "id": 380,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4994:49:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 381,
                              "nodeType": "EmitStatement",
                              "src": "4989:54:0"
                            }
                          ]
                        },
                        "id": 383,
                        "nodeType": "IfStatement",
                        "src": "4867:183:0",
                        "trueBody": {
                          "id": 374,
                          "nodeType": "Block",
                          "src": "4910:65:0",
                          "statements": [
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 368,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 401,
                                      "src": "4939:3:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 369,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "4939:10:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 370,
                                    "name": "sender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 336,
                                    "src": "4951:6:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 371,
                                    "name": "receiver",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 338,
                                    "src": "4959:8:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 367,
                                  "name": "NewRegistration",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 253,
                                  "src": "4923:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (address,address,address)"
                                  }
                                },
                                "id": 372,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4923:45:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 373,
                              "nodeType": "EmitStatement",
                              "src": "4918:50:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": null,
                  "id": 385,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "register",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 339,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 336,
                        "name": "sender",
                        "nodeType": "VariableDeclaration",
                        "scope": 385,
                        "src": "4647:14:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 335,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4647:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 338,
                        "name": "receiver",
                        "nodeType": "VariableDeclaration",
                        "scope": 385,
                        "src": "4663:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 337,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4663:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "4646:34:0"
                  },
                  "returnParameters": {
                    "id": 340,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4688:0:0"
                  },
                  "scope": 386,
                  "src": "4629:425:0",
                  "stateMutability": "nonpayable",
                  "superFunction": null,
                  "visibility": "public"
                }
              ],
              "scope": 387,
              "src": "3539:1517:0"
            }
          ],
          "src": "100:4957:0"
        },
        "id": 0
      }
    }
  }
}