{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "log_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "log_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "log_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "name": "log_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "val",
          "type": "address"
        }
      ],
      "name": "log_named_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "val",
          "type": "bytes"
        }
      ],
      "name": "log_named_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "val",
          "type": "bytes32"
        }
      ],
      "name": "log_named_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        }
      ],
      "name": "log_named_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "val",
          "type": "string"
        }
      ],
      "name": "log_named_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "log_named_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "log_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "logs",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "IS_SCRIPT",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "IS_TEST",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "remoteAddress",
          "type": "bytes32"
        }
      ],
      "name": "createRemoteToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initializeContracts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setUp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vm",
      "outputs": [
        {
          "internalType": "contract Vm",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040526000805462ff00001960ff19909116600117166201000017905534801561002a57600080fd5b5061f473806200003b6000396000f3fe60806040523480156200001157600080fd5b5060043610620000885760003560e01c8063b45036f71162000063578063b45036f714620000f8578063ba414fa61462000102578063f8ccbf471462000120578063fa7626d4146200012a5762000088565b8063055c21e9146200008d5780630a9254e414620000e25780633a76846314620000ee575b600080fd5b620000b960048036036040811015620000a557600080fd5b5063ffffffff813516906020013562000134565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b620000ec62000505565b005b620000b962000d88565b620000ec62000da0565b6200010c6200109a565b604080519115158252519081900360200190f35b6200010c620012d8565b6200010c620012e7565b601354604080517f9d2f254f00000000000000000000000000000000000000000000000000000000815263ffffffff85166004820152602481018490529051600092839273ffffffffffffffffffffffffffffffffffffffff90911691639d2f254f9160448082019260209290919082900301818787803b158015620001b957600080fd5b505af1158015620001ce573d6000803e3d6000fd5b505050506040513d6020811015620001e557600080fd5b5051604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290519192508291620002a69173ffffffffffffffffffffffffffffffffffffffff841691638da5cb5b91600480820192602092909190829003018186803b1580156200025957600080fd5b505afa1580156200026e573d6000803e3d6000fd5b505050506040513d60208110156200028557600080fd5b5051600f5473ffffffffffffffffffffffffffffffffffffffff16620012f0565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c60601b60601c73ffffffffffffffffffffffffffffffffffffffff166306447d568273ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033257600080fd5b505afa15801562000347573d6000803e3d6000fd5b505050506040513d60208110156200035e57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015251602480830192600092919082900301818387803b158015620003cc57600080fd5b505af1158015620003e1573d6000803e3d6000fd5b5050600a54600b54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260248101929092525191851693506340c10f19925060448082019260009290919082900301818387803b1580156200046457600080fd5b505af115801562000479573d6000803e3d6000fd5b5050604080517f90c5013b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d93506390c5013b9250600480830192600092919082900301818387803b158015620004e357600080fd5b505af1158015620004f8573d6000803e3d6000fd5b5093979650505050505050565b6101a46008819055604080517fffa18649000000000000000000000000000000000000000000000000000000008152600481019290925251737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200057b57600080fd5b505af115801562000590573d6000803e3d6000fd5b505050506040513d6020811015620005a757600080fd5b5051600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa1864900000000000000000000000000000000000000000000000000000000815261245960048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200065c57600080fd5b505af115801562000671573d6000803e3d6000fd5b505050506040513d60208110156200068857600080fd5b5051600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa1864900000000000000000000000000000000000000000000000000000000815262018333600482015290516200077891737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa18649916024808201926020929091908290030181600087803b1580156200074457600080fd5b505af115801562000759573d6000803e3d6000fd5b505050506040513d60208110156200077057600080fd5b505162001474565b600c55612710600b556040516200078f90620016d9565b604051809103906000f080158015620007ac573d6000803e3d6000fd5b50600d80547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff93841602179055600a54600b546040519190921691906200080f90620016e7565b73ffffffffffffffffffffffffffffffffffffffff909216604080840191909152606083019190915260808083526004908301527f46616b650000000000000000000000000000000000000000000000000000000060a083015260c0602083018190526002908301527f464b00000000000000000000000000000000000000000000000000000000000060e0830152519081900361010001906000f080158015620008be573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600a80547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167505dc0000000000000000000000000000000000000000179055600d8054610bb87fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009091161790556200097f61beef62001474565b601755600a546040517401000000000000000000000000000000000000000090910463ffffffff1690620009b390620016f5565b63ffffffff909116815260405190819003602001906000f080158015620009de573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600d546040516401000000009091049091169062000a3e9062001703565b73ffffffffffffffffffffffffffffffffffffffff909116815260405190819003602001906000f08015801562000a79573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162000acd9062001711565b604051809103906000f08015801562000aea573d6000803e3d6000fd5b50601380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162000b3e906200171f565b604051809103906000f08015801562000b5b573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162000baf906200172d565b604051809103906000f08015801562000bcc573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162000c20906200173b565b604051809103906000f08015801562000c3d573d6000803e3d6000fd5b50601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179081905560115460405191831692169062000c989062001749565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604080519182900301906000f08015801562000cd9573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562000d2962000da0565b600d5460175462000d419163ffffffff169062000134565b601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b601354601254601054604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015251919092169163485cc95591604480830192600092919082900301818387803b15801562000e2257600080fd5b505af115801562000e37573d6000803e3d6000fd5b5050600f54601354601054604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301525191909216935063485cc9559250604480830192600092919082900301818387803b15801562000ebd57600080fd5b505af115801562000ed2573d6000803e3d6000fd5b5050601354600f54604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905191909216935063f2fde38b9250602480830192600092919082900301818387803b15801562000f4e57600080fd5b505af115801562000f63573d6000803e3d6000fd5b5050601054600e54604080517f6ef0f37f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051919092169350636ef0f37f9250602480830192600092919082900301818387803b15801562000fdf57600080fd5b505af115801562000ff4573d6000803e3d6000fd5b5050600f54600d54600c54604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015260248301919091525173ffffffffffffffffffffffffffffffffffffffff909216935063b49c53a7925060448082019260009290919082900301818387803b1580156200107f57600080fd5b505af115801562001094573d6000803e3d6000fd5b50505050565b60008054610100900460ff1615620010be5750600054610100900460ff16620012d5565b6000620010ca6200148d565b15620012d25760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152835180840385018152606084019094527f667f9d700000000000000000000000000000000000000000000000000000000060808401908152845160009593947f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49493608490910191908401908083835b60208310620011c557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162001186565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106200124957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016200120a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620012ad576040519150601f19603f3d011682016040523d82523d6000602084013e620012b2565b606091505b50915050808060200190516020811015620012cc57600080fd5b50519150505b90505b90565b60005462010000900460ff1681565b60005460ff1681565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462001470577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040518080602001828103825260258152602001806200f4426025913960400191505060405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff83166020820152818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a16040805173ffffffffffffffffffffffffffffffffffffffff84166020820152818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a162001470620014a8565b5050565b73ffffffffffffffffffffffffffffffffffffffff1690565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b151590565b620014b26200148d565b15620016ab5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152600160608481019190915284518085039091018152608084019094527f70ca10bb0000000000000000000000000000000000000000000000000000000060a08401908152845160009593947f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4949360a490910191908401908083835b60208310620015b957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016200157a565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106200163d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101620015fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620016a1576040519150601f19603f3d011682016040523d82523d6000602084013e620016a6565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6103cd806200175883390190565b6114808062001b2583390190565b6104db8062002fa583390190565b6152dd806200348083390190565b612783806200875d83390190565b611581806200aee083390190565b61070d806200c46183390190565b612583806200cb6e83390190565b610351806200f0f18339019056fe608060405234801561001057600080fd5b506103ad806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063172a93fb146100465780636c2676331461008b5780637013ca26146100d2575b600080fd5b6100896004803603606081101561005c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610113565b005b6100be600480360360208110156100a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661017d565b604080519115158252519081900360200190f35b6100da6101f9565b60405180826101c080838360005b838110156101005781810151838201526020016100e8565b5050505090500191505060405180910390f35b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fa0fe60ff59098af32f94c6874d343e75865ae755f38e2dbd9320650270bdf331836040518082815260200191505060405180910390a3505050565b6000806101886101f9565b905060005b600e8110156101ed578181600e81106101a257fe5b602002015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156101e5576001925050506101f4565b60010161018d565b5060009150505b919050565b610201610381565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b604051806101c00160405280600e90602082028036833750919291505056fea164736f6c6343000706000a60806040526040516200148038038062001480833981810160405260808110156200002957600080fd5b81019080805160405193929190846401000000008211156200004a57600080fd5b9083019060208201858111156200006057600080fd5b82516401000000008111828201881017156200007b57600080fd5b82525081516020918201929091019080838360005b83811015620000aa57818101518382015260200162000090565b50505050905090810190601f168015620000d85780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620000fc57600080fd5b9083019060208201858111156200011257600080fd5b82516401000000008111828201881017156200012d57600080fd5b82525081516020918201929091019080838360005b838110156200015c57818101518382015260200162000142565b50505050905090810190601f1680156200018a5780820380516001836020036101000a031916815260200191505b50604090815260208281015192909101518651929450925085918591620001b79160039185019062000369565b508051620001cd90600490602084019062000369565b50506005805460ff1916601217905550620001e98282620001f3565b5050505062000415565b6001600160a01b0382166200024f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200025d6000838362000302565b62000279816002546200030760201b620007d11790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002ac918390620007d162000307821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008282018381101562000362576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003a15760008555620003ec565b82601f10620003bc57805160ff1916838001178555620003ec565b82800160010185558215620003ec579182015b82811115620003ec578251825591602001919060010190620003cf565b50620003fa929150620003fe565b5090565b5b80821115620003fa5760008155600101620003ff565b61105b80620004256000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610374578063a457c2d7146103ad578063a9059cbb146103e6578063dd62ed3e1461041f576100f5565b806340c10f19146102bd57806356189cb4146102f657806370a082311461033957806395d89b411461036c576100f5565b8063222f5be0116100d3578063222f5be0146101de57806323b872dd14610223578063313ce567146102665780633950935114610284576100f5565b806306fdde03146100fa578063095ea7b31461017757806318160ddd146101c4575b600080fd5b61010261045a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b06004803603604081101561018d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561050e565b604080519115158252519081900360200190f35b6101cc61052b565b60408051918252519081900360200190f35b610221600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610531565b005b6101b06004803603606081101561023957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610541565b61026e6105e2565b6040805160ff9092168252519081900360200190f35b6101b06004803603604081101561029a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105eb565b610221600480360360408110156102d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610646565b6102216004803603606081101561030c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610654565b6101cc6004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661065f565b610102610687565b6102216004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610706565b6101b0600480360360408110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610710565b6101b0600480360360408110156103fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610785565b6101cc6004803603604081101561043557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610799565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b5050505050905090565b600061052261051b61084c565b8484610850565b50600192915050565b60025490565b61053c838383610997565b505050565b600061054e848484610997565b6105d88461055a61084c565b6105d385604051806060016040528060288152602001610f986028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600160205260408120906105a561084c565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610b67565b610850565b5060019392505050565b60055460ff1690565b60006105226105f861084c565b846105d3856001600061060961084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c1681529252902054906107d1565b6106508282610c18565b5050565b61053c838383610850565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b6106508282610d49565b600061052261071d61084c565b846105d38560405180606001604052806025815260200161102a602591396001600061074761084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610b67565b600061052261079261084c565b8484610997565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60008282018381101561084557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110066024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610928576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610f506022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610fe16025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610f0b6023913960400191505060405180910390fd5b610a7a83838361053c565b610ac481604051806060016040528060268152602001610f726026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610b0090826107d1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610c10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bd5578181015183820152602001610bbd565b50505050905090810190601f168015610c025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8216610c9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610ca66000838361053c565b600254610cb390826107d1565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610ce690826107d1565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610fc06021913960400191505060405180910390fd5b610dc18260008361053c565b610e0b81604051806060016040528060228152602001610f2e6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254610e3e9082610e93565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082821115610f0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a608060405234801561001057600080fd5b506040516104db3803806104db8339818101604052602081101561003357600080fd5b50516000805463ffffffff90921663ffffffff1990921691909117905561047c8061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638d3638f4116100505780638d3638f4146100a1578063b95a2001146100c2578063fa31de01146100e557610072565b806306661abd14610077578063522ae0021461009157806367a6771d14610099575b600080fd5b61007f61019f565b60408051918252519081900360200190f35b61007f6101ac565b61007f6101b2565b6100a96101b8565b6040805163ffffffff9092168252519081900360200190f35b6100a9600480360360208110156100d857600080fd5b503563ffffffff166101c4565b61019d600480360360608110156100fb57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561012857600080fd5b82018360208201111561013a57600080fd5b8035906020019184600183028401116401000000008311171561015c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506101dc945050505050565b005b6001805481019081905590565b61080081565b60035481565b60005463ffffffff1681565b60026020526000908152604090205463ffffffff1681565b6108008151111561024e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff838116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000081166001918516918201851617909155815490926102aa9116338488888861037f565b805160208201209091506102be8684610455565b67ffffffffffffffff1660016102d261019f565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a600354866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061041057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103d3565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b63ffffffff1660209190911b67ffffffff0000000016179056fea164736f6c6343000706000a60a060405234801561001057600080fd5b50604051620052dd380380620052dd8339818101604052602081101561003557600080fd5b5051606081901b6001600160601b0319166080526001600160a01b031661525a6200008360003980610d035280610e815280610f5f52806111555280611ec35280611f7b525061525a6000f3fe6080604052600436106101845760003560e01c80638da5cb5b116100d6578063bc7dbab31161007f578063e4ad9a1811610059578063e4ad9a18146107eb578063f2fde38b1461086d578063ffa1ad74146108ad5761018b565b8063bc7dbab3146105aa578063ce5494bb1461065b578063e280bc7e1461069b5761018b565b8063a9bd1226116100b0578063a9bd122614610444578063ab2dc3f5146104a4578063b49c53a7146105745761018b565b80638da5cb5b1461040557806397f641ab1461041a5780639d23c4c71461042f5761018b565b8063485cc95511610138578063715018a611610112578063715018a61461034e57806383bbb8061461036357806386e532d4146103a55761018b565b8063485cc955146102c75780634fb3ccc51461030f578063546d573d146103245761018b565b80633339df96116101695780633339df961461023457806341bdc8b514610272578063459f1383146102b25761018b565b8063044dc0d71461019057806328b1aea0146101e25761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101e0600480360360608110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013591604090910135166108d8565b005b3480156101ee57600080fd5b506101e06004803603606081101561020557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166108e8565b34801561024057600080fd5b50610249610b4c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561027e57600080fd5b506101e06004803603602081101561029557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b68565b3480156102be57600080fd5b506101e0610c57565b3480156102d357600080fd5b506101e0600480360360408110156102ea57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610ff5565b34801561031b57600080fd5b50610249611153565b34801561033057600080fd5b506102496004803603602081101561034757600080fd5b5035611177565b34801561035a57600080fd5b506101e061119f565b34801561036f57600080fd5b506103936004803603602081101561038657600080fd5b503563ffffffff16611249565b60408051918252519081900360200190f35b3480156103b157600080fd5b506101e0600480360360608110156103c857600080fd5b5063ffffffff813516907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000006020820135811691604001351661125b565b34801561041157600080fd5b50610249611266565b34801561042657600080fd5b50610393611282565b34801561043b57600080fd5b5061024961128d565b34801561045057600080fd5b506101e0600480360360a081101561046757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff604082013516906060810135906080013515156112a9565b3480156104b057600080fd5b506101e0600480360360808110156104c757600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156104ff57600080fd5b82018360208201111561051157600080fd5b8035906020019184600183028401116401000000008311171561053357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611435945050505050565b34801561058057600080fd5b506101e06004803603604081101561059757600080fd5b5063ffffffff81351690602001356116a5565b3480156105b657600080fd5b506101e0600480360360a08110156105cd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a08101608082013564010000000081111561061c57600080fd5b82018360208201111561062e57600080fd5b8035906020019184600183028401116401000000008311171561065057600080fd5b5090925090506117f9565b34801561066757600080fd5b506101e06004803603602081101561067e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119e3565b3480156106a757600080fd5b506101e0600480360360808110156106be57600080fd5b63ffffffff82358116926020810135909116918101906060810160408201356401000000008111156106ef57600080fd5b82018360208201111561070157600080fd5b8035906020019184600183028401116401000000008311171561072357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460018302840111640100000000831117156107aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ccf945050505050565b3480156107f757600080fd5b506108316004803603604081101561080e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909316835260208301919091528051918290030190f35b34801561087957600080fd5b506101e06004803603602081101561089057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611d1a565b3480156108b957600080fd5b506108c2611ebc565b6040805160ff9092168252519081900360200190f35b6108e3838383611ec1565b505050565b6108f0612066565b73ffffffffffffffffffffffffffffffffffffffff1661090e611266565b73ffffffffffffffffffffffffffffffffffffffff161461099057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b610b70612066565b73ffffffffffffffffffffffffffffffffffffffff16610b8e611266565b73ffffffffffffffffffffffffffffffffffffffff1614610c1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610c5f612066565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611266565b73ffffffffffffffffffffffffffffffffffffffff1614610cff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c0811015610da257600080fd5b50905060005b600e811015610ff15760008282600e8110610dbf57fe5b6020020151905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e2f57600080fd5b505afa158015610e43573d6000803e3d6000fd5b505050506040513d6020811015610e5957600080fd5b505190508015610fe7578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f000000000000000000000000000000000000000000000000000000000000000060006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505050506040513d6020811015610f1f57600080fd5b5050604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905291519184169163095ea7b3916044808201926020929091908290030181600087803b158015610fba57600080fd5b505af1158015610fce573d6000803e3d6000fd5b505050506040513d6020811015610fe457600080fd5b50505b5050600101610da8565b5050565b600054610100900460ff168061100e575061100e61206a565b8061101c575060005460ff16155b611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff161580156110d757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556111208261207b565b80156108e357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6111a7612066565b73ffffffffffffffffffffffffffffffffffffffff166111c5611266565b73ffffffffffffffffffffffffffffffffffffffff161461124757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b6108e38383836121d7565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b8161131557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080611322878761234b565b915091506113358262ffffff191661296d565b63ffffffff168563ffffffff16146113ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b60006113bb8588846129d8565b90506113c88684836121d7565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b61143e33612a3d565b6114a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b83826114b58282612ae8565b61152057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b600061155661152f8583612b14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612b38565b905060006115857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612b6d565b905060006115b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612bb1565b90506115e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612c49565b156115f7576115f289898484612c56565b61169a565b6116227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612ca3565b15611633576115f289898484612cb0565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b6116ad612066565b73ffffffffffffffffffffffffffffffffffffffff166116cb611266565b73ffffffffffffffffffffffffffffffffffffffff161461174d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611755613015565b63ffffffff168263ffffffff1614158015611775575063ffffffff821615155b6117e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b600080611806888861234b565b90925090508461187757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6118a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661296d565b63ffffffff168663ffffffff161461191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061196886898461192c336130b1565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130ca92505050565b90506119758784836121d7565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8082169083161415611b1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015611b8157600080fd5b505afa158015611b95573d6000803e3d6000fd5b505050506040513d6020811015611bab57600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b158015611c2557600080fd5b505af1158015611c39573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b158015611cb157600080fd5b505af1158015611cc5573d6000803e3d6000fd5b5050505050505050565b6000611cde60015b8490612b14565b90506000611cec6005611cd7565b9050611cfa86868484612cb0565b505050505050565b600080611d0f848461234b565b915091509250929050565b611d22612066565b73ffffffffffffffffffffffffffffffffffffffff16611d40611266565b73ffffffffffffffffffffffffffffffffffffffff1614611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150c76026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c267633846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d6020811015611f7257600080fd5b505115612045577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663172a93fb8483856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561202857600080fd5b505af115801561203c573d6000803e3d6000fd5b505050506108e3565b6108e373ffffffffffffffffffffffffffffffffffffffff8416828461319a565b3390565b600061207530613227565b15905090565b600054610100900460ff1680612094575061209461206a565b806120a2575060005460ff16155b6120f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561215d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556121a561322d565b8015610ff157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b60006121e284613351565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561224c57600080fd5b505afa158015612260573d6000803e3d6000fd5b505050506040513d602081101561227657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de01858361229f87876133d3565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122fd5781810151838201526020016122e5565b50505050905090810190601f16801561232a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611cb157600080fd5b600080600083116123bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b15801561243357600080fd5b505afa158015612447573d6000803e3d6000fd5b505050506040513d602081101561245d57600080fd5b5051156127ab5761248673ffffffffffffffffffffffffffffffffffffffff86163330876134e7565b6127a48173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124d157600080fd5b505af11580156124e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561252c57600080fd5b810190808051604051939291908464010000000082111561254c57600080fd5b90830190602082018581111561256157600080fd5b825164010000000081118282018810171561257b57600080fd5b82525081516020918201929091019080838360005b838110156125a8578181015183820152602001612590565b50505050905090810190601f1680156125d55780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561262257600080fd5b505afa158015612636573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561267d57600080fd5b810190808051604051939291908464010000000082111561269d57600080fd5b9083019060208201858111156126b257600080fd5b82516401000000008111828201881017156126cc57600080fd5b82525081516020918201929091019080838360005b838110156126f95781810151838201526020016126e1565b50505050905090810190601f1680156127265780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d602081101561279d57600080fd5b5051613582565b91506128ac565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b15801561281f57600080fd5b505af1158015612833573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b15801561287d57600080fd5b505afa158015612891573d6000803e3d6000fd5b505050506040513d60208110156128a757600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b15801561291f57600080fd5b505afa158015612933573d6000803e3d6000fd5b505050506040513d604081101561294957600080fd5b508051602090910151909250905061296182826136bd565b94505050509250929050565b60008160016129a0815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690613714565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004613894565b949350505050565b6000612a33600380868686604051602001808560068111156129f657fe5b60f81b8152600101848152602001838152602001828152602001945050505050604051602081830303815290604052612b1490919063ffffffff16565b90505b9392505050565b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b158015612ab457600080fd5b505afa158015612ac8573d6000803e3d6000fd5b505050506040513d6020811015612ade57600080fd5b505190505b919050565b63ffffffff821660009081526097602052604081205482148015612b0b57508115155b90505b92915050565b815160009060208401612b2f64ffffffffff851682846138b5565b95945050505050565b6000612b0e612b468361390b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613957565b6000816002612b7b81612977565b506129d06000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088169291906139d1565b6000816002612bbf81612977565b5060006024612bef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613a57565b6bffffffffffffffffffffffff160390506000612c0b86613a6b565b60ff169050612c3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716602484846139d1565b9695505050505050565b6000612b0e826003613a9c565b6000612c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613ae9565b9050612c928585858585613b25565b50612c9c81613dc8565b5050505050565b6000612b0e826005613a9c565b6000612cdd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613e38565b90506000612cee8686868686613b25565b905060007f048494fe0000000000000000000000000000000000000000000000000000000087612d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613e46565b612d6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000891661296d565b612d957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a16613e84565b86612dc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b16613ec2565b612e16612def7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d16613ef3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613f49565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612e9c578181015183820152602001612e84565b50505050905090810190601f168015612ec95780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310612f9a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f5d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ffc576040519150601f19603f3d011682016040523d82523d6000602084013e613001565b606091505b5050905080611cc5573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561308057600080fd5b505afa158015613094573d6000803e3d6000fd5b505050506040513d60208110156130aa57600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000612c3f6005808888888888604051602001808760068111156130ea57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831061315357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613116565b6001836020036101000a0380198251168184511680821785525050505050509050019650505050505050604051602081830303815290604052612b1490919063ffffffff16565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526108e3908490613f8d565b3b151590565b600054610100900460ff1680613246575061324661206a565b80613254575060005460ff16155b6132a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561330f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b613317614065565b61331f614177565b801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b63ffffffff811660009081526097602052604090205480612ae357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60608260016133e181612977565b506133eb84614307565b61345657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050858160008151811061348557fe5b602002602001019062ffffff1916908162ffffff19168152505084816001815181106134ad57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090921660209283029190910190910152612c3f81614321565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261357c908590613f8d565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b602083106135e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016135a4565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b6020831061366957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161362c565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b6000612b0b6001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b166020820152602480820187905282518083039091018152604490910190915290612b14565b60006137208383614371565b61388d57600061373e61373285614393565b64ffffffffff16614399565b91505060006137538464ffffffffff16614399565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b8381101561385257818101518382015260200161383a565b50505050905090810190601f16801561387f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff166138ab85858561446d565b901c949350505050565b6000806138c284846145db565b90506040518111156138d2575060005b80613900577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050612a36565b612b2f85858561464d565b600061391682614660565b1561394f576139487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660026146b2565b9050612ae3565b612b0e6146d8565b6000613962826146fc565b6139cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b6000806139dd86614739565b6bffffffffffffffffffffffff1690506139f68661474d565b613a0a85613a0484896145db565b906145db565b1115613a39577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506129d0565b613a4381866145db565b9050612c3f8364ffffffffff1682866138b5565b60181c6bffffffffffffffffffffffff1690565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001613894565b6000816006811115613aaa57fe5b60ff16613ab684614777565b60ff16148015612b0b5750816006811115613acd57fe5b613ad6846147a7565b6006811115613ae157fe5b149392505050565b6000816003613af781612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d6147e2565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a613b717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000871661296d565b613b9c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613e84565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b158015613bdf57600080fd5b505af1158015613bf3573d6000803e3d6000fd5b505050506040513d6020811015613c0957600080fd5b505190506000613c3a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516613ec2565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b158015613caf57600080fd5b505afa158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b505115613cf057613ceb828285611ec1565b613d26565b613d26828285613d217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166147f0565b614821565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16613d5e89896148fd565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff1631108015613dfc575066d529ae9e8600004710155b1561334e5760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b6000816005613af781612977565b6000816005613e5481612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166061602061446d565b6000816001613e9281612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166004602061446d565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020613894565b6000816005613f0181612977565b506129d0608180613f337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613a57565b6bffffffffffffffffffffffff16036006612b86565b6060600080613f5784613a57565b6bffffffffffffffffffffffff1690506040519150819250613f7c8483602001614917565b508181016020016040529052919050565b6000613fef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614a439092919063ffffffff16565b8051909150156108e35780806020019051602081101561400e57600080fd5b50516108e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061519c602a913960400191505060405180910390fd5b600054610100900460ff168061407e575061407e61206a565b8061408c575060005460ff16155b6140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561331f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680614190575061419061206a565b8061419e575060005460ff16155b6141f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561425957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000614263612066565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600061431282612c49565b80612b0e5750612b0e82612ca3565b60405160609060006143368460208401614a52565b9050600061434382613a57565b6bffffffffffffffffffffffff169050600061435e83614aca565b9184525082016020016040525092915050565b60008164ffffffffff1661438484614393565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff1611156144015760ff600882021684901c6143be81614ade565b61ffff16841793508160ff166010146143d957601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161439f565b50600f5b60ff8160ff1610156144675760ff600882021684901c61442481614ade565b61ffff16831792508160ff1660001461443f57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614405565b50915091565b600060ff821661447f57506000612a36565b61448884613a57565b6bffffffffffffffffffffffff166144a38460ff85166145db565b1115614545576144e46144b585614739565b6bffffffffffffffffffffffff166144cc86613a57565b6bffffffffffffffffffffffff16858560ff16614b0e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561385257818101518382015260200161383a565b60208260ff1611156145a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615162603a913960400191505060405180910390fd5b6008820260006145b186614739565b6bffffffffffffffffffffffff16905060006145cc83614c69565b91909501511695945050505050565b81810182811015612b0e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60008061468e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416613a57565b6bffffffffffffffffffffffff1690506085811480612a36575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b600061470782614393565b64ffffffffff1664ffffffffff141561472257506000612ae3565b600061472d8361474d565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b600061475882613a57565b61476183614739565b016bffffffffffffffffffffffff169050919050565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001613894565b60006147d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316614393565b60ff166006811115612b0e57fe5b6000612b0b83836014613894565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166041602061446d565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561489257600080fd5b505af11580156148a6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cb157600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b600061492283614cb2565b614977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c66028913960400191505060405180910390fd5b614980836146fc565b6149d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806151ee602b913960400191505060405180910390fd5b60006149e084613a57565b6bffffffffffffffffffffffff16905060006149fb85614739565b6bffffffffffffffffffffffff1690506000604051905084811115614a205760206060fd5b8285848460045afa50612c3f614a3587614393565b64ffffffffff16868561464d565b6060612a338484600085614cc4565b600060405182811115614a655760206060fd5b506000805b8451811015614abd576000858281518110614a8157fe5b60200260200101519050614a9781848701614917565b50614aa181613a57565b6bffffffffffffffffffffffff16929092019150600101614a6a565b506129d06000848361464d565b6000614ad582614e7e565b60200292915050565b6000614af060048360ff16901c614eb2565b60ff161760081b62ffff0016614b0582614eb2565b60ff1617919050565b60606000614b1b86614399565b9150506000614b2986614399565b9150506000614b3786614399565b9150506000614b4586614399565b915050838383836040516020018080615219603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a820152605001602161511382397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000614cbd8261501e565b1592915050565b606082471015614d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150ed6026913960400191505060405180910390fd5b614d2885613227565b614d9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614dfc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614dbf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614e5e576040519150601f19603f3d011682016040523d82523d6000602084013e614e63565b606091505b5091509150614e73828286615046565b979650505050505050565b60006020614ea46020614e9085613a57565b6bffffffffffffffffffffffff16906145db565b81614eab57fe5b0492915050565b600060f08083179060ff82161415614ece576030915050612ae3565b8060ff1660f11415614ee4576031915050612ae3565b8060ff1660f21415614efa576032915050612ae3565b8060ff1660f31415614f10576033915050612ae3565b8060ff1660f41415614f26576034915050612ae3565b8060ff1660f51415614f3c576035915050612ae3565b8060ff1660f61415614f52576036915050612ae3565b8060ff1660f71415614f68576037915050612ae3565b8060ff1660f81415614f7e576038915050612ae3565b8060ff1660f91415614f94576039915050612ae3565b8060ff1660fa1415614faa576061915050612ae3565b8060ff1660fb1415614fc0576062915050612ae3565b8060ff1660fc1415614fd6576063915050612ae3565b8060ff1660fd1415614fec576064915050612ae3565b8060ff1660fe1415615002576065915050612ae3565b8060ff1660ff1415615018576066915050612ae3565b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b60608315615055575081612a36565b8251156150655782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561385257818101518382015260200161383a56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a608060405234801561001057600080fd5b50612763806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001c05760003560e01c80638da5cb5b11620000f9578063ccf5a77c1162000099578063ec694a14116200006f578063ec694a1414620005d1578063f153768614620006e1578063f2fde38b146200071757620001c0565b8063ccf5a77c1462000559578063d82d05311462000563578063dc9685a714620005a557620001c0565b8063b9730eaf11620000cf578063b9730eaf1462000491578063c2561f6514620004c7578063c86415cb146200050f57620001c0565b80638da5cb5b146200042f5780639d2f254f1462000439578063b869d89a146200046557620001c0565b80633339df961162000165578063589b3c64116200013b578063589b3c6414620003b1578063715018a614620003dd57806380350c2214620003e757620001c0565b80633339df96146200033357806341bdc8b5146200033d578063485cc955146200037357620001c0565b80631ecf6f9f116200019b5780631ecf6f9f146200029d57806328b1aea014620002bd5780632c3da59c146200030757620001c0565b806303e418c214620001c55780630e71e251146200021b5780630fdeeba9146200027a575b600080fd5b620001fb60048036036020811015620001dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166200074d565b6040805163ffffffff909316835260208301919091528051918290030190f35b62000251600480360360208110156200023357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166200076f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b620002846200083f565b6040805163ffffffff9092168252519081900360200190f35b6200025160048036036020811015620002b557600080fd5b503562000850565b6200030560048036036060811015620002d557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000878565b005b62000251600480360360408110156200031f57600080fd5b5063ffffffff813516906020013562000944565b62000251620009e1565b62000305600480360360208110156200035557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16620009fd565b62000305600480360360408110156200038b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351662000af1565b6200025160048036036040811015620003c957600080fd5b5063ffffffff813516906020013562000c59565b6200030562000c98565b6200030560048036036060811015620003ff57600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000932565b6200025162000d47565b62000251600480360360408110156200045157600080fd5b5063ffffffff813516906020013562000d63565b62000251600480360360408110156200047d57600080fd5b5063ffffffff813516906020013562000d71565b620001fb60048036036020811015620004a957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000e56565b6200030560048036036060811015620004df57600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000ea1565b62000545600480360360208110156200052757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000eae565b604080519115158252519081900360200190f35b6200025162000ef4565b62000251600480360360408110156200057b57600080fd5b50803563ffffffff16906020013573ffffffffffffffffffffffffffffffffffffffff1662000f10565b6200025160048036036040811015620005bd57600080fd5b5063ffffffff813516906020013562000f28565b620005fd60048036036040811015620005e957600080fd5b5063ffffffff813516906020013562000f96565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156200064057818101518382015260200162000626565b50505050905090810190601f1680156200066e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620006a357818101518382015260200162000689565b50505050905090810190601f168015620006d15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b620001fb60048036036020811015620006f957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000fb0565b62000305600480360360208110156200072f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662001031565b6098602052600090815260409020805460019091015463ffffffff9091169082565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff1680835260019091015492820192909252906200082457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2172657072000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b620008388160000151826020015162000f28565b9392505050565b60006200084b620011da565b905090565b60996020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b62000882620011e6565b73ffffffffffffffffffffffffffffffffffffffff16620008a262000d47565b73ffffffffffffffffffffffffffffffffffffffff16146200092557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000932838383620011ea565b6200093f838383620012bc565b505050565b60008062000953848462000c59565b905073ffffffffffffffffffffffffffffffffffffffff8116620009d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21746f6b656e0000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b90505b92915050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b62000a07620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000a2762000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000aaa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff168062000b0d575062000b0d620013d6565b8062000b1c575060005460ff16155b62000b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562000bda57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905562000c2582620013e9565b80156200093f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b600062000c65620011da565b63ffffffff168363ffffffff16141562000c8c5762000c848262001550565b9050620009db565b620009d8838362000f28565b62000ca2620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000cc262000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000d4557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b6000620009d8838362001553565b600062000d7d620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000d9d62000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000e2057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000e2c838362000c59565b905073ffffffffffffffffffffffffffffffffffffffff8116620009db57620009d8838362001553565b73ffffffffffffffffffffffffffffffffffffffff166000908152609860209081526040918290208251808401909352805463ffffffff168084526001909101549290910182905291565b6200093f838383620011ea565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602052604081205463ffffffff161562000ee95750600062000eef565b50803b15155b919050565b60975473ffffffffffffffffffffffffffffffffffffffff1681565b6000620009d88362000f22846200187e565b62000c59565b60008062000f37848462001897565b9050600062000f687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316620018f0565b60009081526099602052604090205473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b60608062000fa5848462001933565b915091509250929050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff168083526001909101549282019290925282916200101e5762001009620011da565b925062001016846200187e565b91506200102b565b8051602082015190935091505b50915091565b6200103b620011e6565b73ffffffffffffffffffffffffffffffffffffffff166200105b62000d47565b73ffffffffffffffffffffffffffffffffffffffff1614620010de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166200114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620027036026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006200084b62001a13565b3390565b63ffffffff83166200125d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f216e756c6c20646f6d61696e0000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260986020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff93909316929092178255600190910155565b73ffffffffffffffffffffffffffffffffffffffff81166200133f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f216e756c6c207265707200000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006200134d848462001897565b905060006200137e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316620018f0565b600090815260996020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925550505050565b6000620013e33062001ab2565b15905090565b600054610100900460ff168062001405575062001405620013d6565b8062001414575060005460ff16155b6200146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff16158015620014d257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556200151c62001ab8565b80156200154c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b90565b60975460405160009173ffffffffffffffffffffffffffffffffffffffff16906200157e9062002192565b73ffffffffffffffffffffffffffffffffffffffff909116815260406020820181905260008183018190529051918290036060019190f080158015620015c8573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200161457600080fd5b505af115801562001629573d6000803e3d6000fd5b505050506000806200163c858562001933565b915091508273ffffffffffffffffffffffffffffffffffffffff1663654935f4838360126040518463ffffffff1660e01b8152600401808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015620016b85781810151838201526020016200169e565b50505050905090810190601f168015620016e65780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156200171b57818101518382015260200162001701565b50505050905090810190601f168015620017495780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156200176c57600080fd5b505af115801562001781573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663f2fde38b620017ab62000d47565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015620017f857600080fd5b505af11580156200180d573d6000803e3d6000fd5b505050506200181e858585620012bc565b6200182b858585620011ea565b8273ffffffffffffffffffffffffffffffffffffffff16848663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a4505092915050565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000620009d86001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16602082015260248082018790528251808303909101815260449091019091529062001be8565b600080620018fe8362001c0e565b6bffffffffffffffffffffffff16905060006200191b8462001c22565b6bffffffffffffffffffffffff169091209392505050565b6060806000620019438462001c36565b915050620019518562001d0e565b6040805160b09290921b7fffffffffffffffffffff000000000000000000000000000000000000000000001660208301527f2e00000000000000000000000000000000000000000000000000000000000000602a83015260e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016602b8301528051808303600f9081018252602f8401818152606f85019093529095509091604f01818036833701905050915060208301516020830152509250929050565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801562001a7f57600080fd5b505afa15801562001a94573d6000803e3d6000fd5b505050506040513d602081101562001aab57600080fd5b5051905090565b3b151590565b600054610100900460ff168062001ad4575062001ad4620013d6565b8062001ae3575060005460ff16155b62001b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001ba157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b62001bab62001d70565b62001bb562001e8a565b801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b81516000906020840162001c0564ffffffffff8516828462002024565b95945050505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600080601f5b600f8160ff16111562001ca35760ff600882021684901c62001c5e8162002081565b61ffff16841793508160ff1660101462001c7a57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001c3c565b50600f5b60ff8160ff1610156200102b5760ff600882021684901c62001cc98162002081565b61ffff16831792508160ff1660001462001ce557601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001ca7565b60006030815b600a8160ff16101562001d695760ff600882021682600a63ffffffff87160663ffffffff160169ffffffffffffffffffff16901b83179250600a8463ffffffff168162001d5d57fe5b04935060010162001d14565b5050919050565b600054610100900460ff168062001d8c575062001d8c620013d6565b8062001d9b575060005460ff16155b62001df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001bb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168062001ea6575062001ea6620013d6565b8062001eb5575060005460ff16155b62001f0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001f7357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600062001f7f620011e6565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080620020338484620020b5565b905060405181111562002044575060005b8062002074577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505062000838565b62001c0585858562002128565b60006200209560048360ff16901c6200213b565b60ff161760081b62ffff0016620020ac826200213b565b60ff1617919050565b81810182811015620009db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b6040805180820190915260108082527f30313233343536373839616263646566000000000000000000000000000000006020830152600091600f841691829081106200218357fe5b016020015160f81c9392505050565b61056280620021a18339019056fe60a06040526040516105623803806105628339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506100f0826101d060201b6100291760201c565b610134576040805162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015290519081900360640190fd5b6001600160601b0319606083901b166080526000610151836101d6565b9050610166816101d060201b6100291760201c565b6101b7576040805162461bcd60e51b815260206004820152601f60248201527f626561636f6e20696d706c656d656e746174696f6e2021636f6e747261637400604482015290519081900360640190fd5b8151156101c8576101c881836102d6565b50505061038f565b3b151590565b604051600090819081906001600160a01b0385169082818181855afa9150503d8060008114610221576040519150601f19603f3d011682016040523d82523d6000602084013e610226565b606091505b50915091508181906102b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561027b578181015183820152602001610263565b50505050905090810190601f1680156102a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156102cc57600080fd5b5051949350505050565b6000826001600160a01b0316826040518082805190602001908083835b602083106103125780518252601f1990920191602091820191016102f3565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610372576040519150601f19603f3d011682016040523d82523d6000602084013e610377565b606091505b505090508061038a573d6000803e3d6000fd5b505050565b60805160601c6101b76103ab60003980603652506101b76000f3fe60806040523661001357610011610017565b005b6100115b61002761002261002f565b61005f565b565b3b151590565b600061005a7f0000000000000000000000000000000000000000000000000000000000000000610083565b905090565b3660008037600080366000845af43d6000803e80801561007e573d6000f35b3d6000fd5b6040516000908190819073ffffffffffffffffffffffffffffffffffffffff85169082818181855afa9150503d80600081146100db576040519150601f19603f3d011682016040523d82523d6000602084013e6100e0565b606091505b509150915081819061018a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561014f578181015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156101a057600080fd5b505194935050505056fea164736f6c6343000706000a4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115048061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638f5d90e01161008c578063b9cff16211610066578063b9cff162146102b9578063e0e7a913146102dc578063f2fde38b14610394578063f31faefb146103c7576100ea565b80638f5d90e014610237578063916c34701461026a5780639fa92f9d146102b1576100ea565b80636ef0f37f116100c85780636ef0f37f146101c1578063715018a6146101f65780638d3638f4146101fe5780638da5cb5b14610206576100ea565b8063427ebef5146100ef5780635190bc53146101425780635f8b1dba14610175575b600080fd5b61012e6004803603604081101561010557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610406565b604080519115158252519081900360200190f35b61012e6004803603602081101561015857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b6101a86004803603602081101561018b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610476565b6040805163ffffffff9092168252519081900360200190f35b6101f4600480360360208110156101d757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661048e565b005b6101f461057d565b6101a8610627565b61020e6106c3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f46004803603602081101561024d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106df565b6101f46004803603606081101561028057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001351515610793565b61020e6108e1565b61020e600480360360208110156102cf57600080fd5b503563ffffffff166108fd565b6101f4600480360360608110156102f257600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561031f57600080fd5b82018360208201111561033157600080fd5b8035906020019184600183028401116401000000008311171561035357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610925945050505050565b6101f4600480360360208110156103aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b9e565b6101f4600480360360408110156103dd57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610d3f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205460ff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205463ffffffff16151590565b60026020526000908152604090205463ffffffff1681565b610496610ebc565b73ffffffffffffffffffffffffffffffffffffffff166104b46106c3565b73ffffffffffffffffffffffffffffffffffffffff161461053657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610585610ebc565b73ffffffffffffffffffffffffffffffffffffffff166105a36106c3565b73ffffffffffffffffffffffffffffffffffffffff161461062557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600154604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d60208110156106bc57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6106e7610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107056106c3565b73ffffffffffffffffffffffffffffffffffffffff161461078757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61079081610ec0565b50565b61079b610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107b96106c3565b73ffffffffffffffffffffffffffffffffffffffff161461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604080832063ffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815194855291840191909152805191927f517de16b526853f481451c5151e87484e1b251ec7d0302efa1019c2ece179c2c929081900390910190a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b63ffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806109bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265706c696361206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b6109c683610fad565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610ad057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f2163757272656e74207570646174657200000000000000000000000000000000604482015290519081900360640190fd5b6000610ae685610adf84610fb0565b8686610fc9565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832063ffffffff8a16845290915290205490915060ff16610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2176616c69642077617463686572000000000000000000000000000000000000604482015290519081900360640190fd5b610b9782610ec0565b5050505050565b610ba6610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610bc46106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061148e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d47610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610d656106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610df082610ec0565b610df9816110bf565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8716908117909155808452600383529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905580519384525191927f8440df9bf8a8542634a9eb196da1735b786ed9aa2fc12b080ac34c5fa81a9234929081900390910190a25050565b3390565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205463ffffffff168015610fa95763ffffffff8116600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8616808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25b5050565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600080610fd585610fad565b73ffffffffffffffffffffffffffffffffffffffff166345630b1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561101a57600080fd5b505afa15801561102e573d6000803e3d6000fd5b505050506040513d602081101561104457600080fd5b50516040805160208181018490527fffffffff0000000000000000000000000000000000000000000000000000000060e08b901b1682840152604480830189905283518084039091018152606490920190925280519101209091506110a8816111ab565b90506110b481856111fc565b979650505050505050565b63ffffffff811660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa95763ffffffff8216600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8516808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461126e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61128c86828585611296565b9695505050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114b46022913960400191505060405180910390fd5b8360ff16601b148061132657508360ff16601c145b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114d66022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661148457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6106908061007d6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063715018a6146100515780638da5cb5b1461005b57806399a88ec41461008c578063f2fde38b146100c7575b600080fd5b6100596100fa565b005b610063610211565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610059600480360360408110156100a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661022d565b610059600480360360208110156100dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b2565b610102610653565b73ffffffffffffffffffffffffffffffffffffffff16610120610211565b73ffffffffffffffffffffffffffffffffffffffff16146101a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b610235610653565b73ffffffffffffffffffffffffffffffffffffffff16610253610211565b73ffffffffffffffffffffffffffffffffffffffff16146102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6102de82610657565b61034957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f626561636f6e2021636f6e747261637400000000000000000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106103e557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610447576040519150601f19603f3d011682016040523d82523d6000602084013e61044c565b606091505b505090508061045f573d6000803e3d6000fd5b6040805173ffffffffffffffffffffffffffffffffffffffff84811682529151918516917fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09181900360200190a2505050565b6104ba610653565b73ffffffffffffffffffffffffffffffffffffffff166104d8610211565b73ffffffffffffffffffffffffffffffffffffffff161461055a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061065e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a164736f6c6343000706000a7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9608052610120604052600160e052603160f81b610100527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a05261190160f01b60c05234801561007057600080fd5b5060805160a05160c05160f01c6124de6100a5600039806110fa52508061142f525080610d84528061109652506124de6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638129fc1c116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461060b578063f2fde38b14610646578063f698da2514610679578063ffa1ad7414610681576101a3565b8063a9059cbb14610557578063cc2ab7c714610590578063d505accf146105ad576101a3565b8063982aaf6b116100c8578063982aaf6b146104dd5780639dc29fac146104e5578063a457c2d71461051e576101a3565b80638129fc1c1461049c5780638da5cb5b146104a457806395d89b41146104d5576101a3565b806340c10f191161015057806370a082311161012a57806370a082311461042e578063715018a6146104615780637ecebe0014610469576101a3565b806340c10f19146103265780634815fcb114610361578063654935f414610369576101a3565b806323b872dd1161018157806323b872dd1461028c578063313ce567146102cf57806339509351146102ed576101a3565b806306fdde03146101a8578063095ea7b31461022557806318160ddd14610272575b600080fd5b6101b0610689565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ea5781810151838201526020016101d2565b50505050905090810190601f1680156102175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025e6004803603604081101561023b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561073d565b604080519115158252519081900360200190f35b61027a610753565b60408051918252519081900360200190f35b61025e600480360360608110156102a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610759565b6102d76107cf565b6040805160ff9092168252519081900360200190f35b61025e6004803603604081101561030357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107d8565b61035f6004803603604081101561033c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561081b565b005b61027a6108d1565b61035f6004803603606081101561037f57600080fd5b81019060208101813564010000000081111561039a57600080fd5b8201836020820111156103ac57600080fd5b803590602001918460018302840111640100000000831117156103ce57600080fd5b9193909290916020810190356401000000008111156103ec57600080fd5b8201836020820111156103fe57600080fd5b8035906020019184600183028401116401000000008311171561042057600080fd5b91935091503560ff166108d7565b61027a6004803603602081101561044457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610afe565b61035f610b0f565b61027a6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bb9565b61035f610bcb565b6104ac610ce7565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b0610d03565b61027a610d82565b61035f600480360360408110156104fb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da6565b61025e6004803603604081101561053457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e58565b61025e6004803603604081101561056d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610eb4565b61035f600480360360208110156105a657600080fd5b5035610ec1565b61035f600480360360e08110156105c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610f77565b61027a6004803603604081101561062157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112a4565b61035f6004803603602081101561065c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112dc565b61027a61138d565b6102d7611483565b60688054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b600061074a338484611488565b50600192915050565b60675490565b60006107668484846115cf565b6107c584336107c08560405180606001604052806028815260200161241b6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260666020908152604080832033845290915290205491906117a1565b611488565b5060019392505050565b606a5460ff1690565b33600081815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161074a9185906107c09086611852565b6108236118cd565b73ffffffffffffffffffffffffffffffffffffffff16610841610ce7565b73ffffffffffffffffffffffffffffffffffffffff16146108c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd82826118d1565b5050565b606c5481565b60685460009060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415801561094c575060695460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604155b801561095b5750606a5460ff16155b905080806109de5750606c546109dc87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250611a04915050565b145b610a4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f21636f6d6d69747465642064657461696c730000000000000000000000000000604482015290519081900360640190fd5b610a556068878761227a565b50610a626069858561227a565b50606a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff841617905580610af6578160ff168484604051808383808284376040519201829003822094508b93508a92508190508383808284376040519201829003822094507f96848da8c41ae282b5ec5c04f45fc469a8186bb78de70419275c2c402fcc27b193506000925050a45b505050505050565b6000610b0982611b3f565b92915050565b610b176118cd565b73ffffffffffffffffffffffffffffffffffffffff16610b35610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610bb757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b606b6020526000908152604090205481565b600054610100900460ff1680610be45750610be4611b67565b80610bf2575060005460ff16155b610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cad57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610cb5611b78565b8015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b60698054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b7f000000000000000000000000000000000000000000000000000000000000000081565b610dae6118cd565b73ffffffffffffffffffffffffffffffffffffffff16610dcc610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610e4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd8282611c6a565b600061074a33846107c0856040518060600160405280602581526020016124ad6025913933600090815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906117a1565b600061074a3384846115cf565b610ec96118cd565b73ffffffffffffffffffffffffffffffffffffffff16610ee7610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610f6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b80606c5414610ce457606c55565b83421115610fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff871661106857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332305065726d69743a206f776e6572207a65726f206164647265737300604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8088166000818152606b602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948b166060850152608084018a905260a0840185905260c08085018a90528151808603909101815260e090940190528251920191909120907f000000000000000000000000000000000000000000000000000000000000000061112161138d565b83604051602001808461ffff1660f01b81526002018381526020018281526020019350505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156111bb573d6000803e3d6000fd5b5050506020604051035190508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461126157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8b166000908152606b602052604090206001850190556112978b8b8b611488565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260666020908152604080832093909416825291909152205490565b6112e46118cd565b73ffffffffffffffffffffffffffffffffffffffff16611302610ce7565b73ffffffffffffffffffffffffffffffffffffffff161461138457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ce481611db4565b6000804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f606860000160405180828054600181600116156101000203166002900480156114145780601f106113f2576101008083540402835291820191611414565b820191906000526020600020905b815481529060010190602001808311611400575b505060408051918290038220602080840196909652828201527f0000000000000000000000000000000000000000000000000000000000000000606083015260808201959095523060a0808301919091528551808303909101815260c090910190945250508151910120905090565b600081565b73ffffffffffffffffffffffffffffffffffffffff83166114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806124896024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123a56022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806124646025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061233a6023913960400191505060405180910390fd5b6116b2838383611f56565b6116fc816040518060600160405280602681526020016123c76026913973ffffffffffffffffffffffffffffffffffffffff861660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526065602052604080822093909355908416815220546117389082611852565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561180f5781810151838201526020016117f7565b50505050905090810190601f16801561183c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156118c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff821661195357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61195f60008383611f56565b60675461196c9082611852565b60675573ffffffffffffffffffffffffffffffffffffffff821660009081526065602052604090205461199f9082611852565b73ffffffffffffffffffffffffffffffffffffffff831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310611a6357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a26565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310611aeb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611aae565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526065602052604090205490565b6000611b7230611f5b565b15905090565b600054610100900460ff1680611b915750611b91611b67565b80611b9f575060005460ff16155b611bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015611c5a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c62611f61565b610cb5612073565b73ffffffffffffffffffffffffffffffffffffffff8216611cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806124436021913960400191505060405180910390fd5b611ce282600083611f56565b611d2c8160405180606001604052806022815260200161235d6022913973ffffffffffffffffffffffffffffffffffffffff851660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260656020526040902055606754611d5f9082612203565b60675560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611dbc6118cd565b73ffffffffffffffffffffffffffffffffffffffff16611dda610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061237f6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b505050565b3b151590565b600054610100900460ff1680611f7a5750611f7a611b67565b80611f88575060005460ff16155b611fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168061208c575061208c611b67565b8061209a575060005460ff16155b6120ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff1615801561215557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600061215f6118cd565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008282111561227457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826122b05760008555612314565b82601f106122e7578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612314565b82800160010185558215612314579182015b828111156123145782358255916020019190600101906122f9565b50612320929150612324565b5090565b5b80821115612320576000815560010161232556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a60a060405234801561001057600080fd5b506040516103513803806103518339818101604052604081101561003357600080fd5b5080516020909101516100458261005b565b60601b6001600160601b0319166080525061015b565b6000546001600160a01b03828116911614156100a9576040805162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b604482015290519081900360640190fd5b6100bc8161015560201b6101c71760201c565b61010d576040805162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b151590565b60805160601c6101da61017760003980601c52506101da6000f3fe60806040523373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461004d5760005460005260206000f35b6000356100598161005c565b50005b60005473ffffffffffffffffffffffffffffffffffffffff828116911614156100e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2175706772616465000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6100ef816101c7565b61015a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b15159056fea164736f6c6343000706000a4572726f723a2061203d3d2062206e6f7420736174697366696564205b616464726573735da164736f6c6343000706000a",
    "sourceMap": "1012:3664:57:-:0;;;1572:26:0;;;-1:-1:-1;;;;1572:26:0;;;1594:4;1572:26;170:28:1;;;;;1012:3664:57;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x60806040523480156200001157600080fd5b5060043610620000885760003560e01c8063b45036f71162000063578063b45036f714620000f8578063ba414fa61462000102578063f8ccbf471462000120578063fa7626d4146200012a5762000088565b8063055c21e9146200008d5780630a9254e414620000e25780633a76846314620000ee575b600080fd5b620000b960048036036040811015620000a557600080fd5b5063ffffffff813516906020013562000134565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b620000ec62000505565b005b620000b962000d88565b620000ec62000da0565b6200010c6200109a565b604080519115158252519081900360200190f35b6200010c620012d8565b6200010c620012e7565b601354604080517f9d2f254f00000000000000000000000000000000000000000000000000000000815263ffffffff85166004820152602481018490529051600092839273ffffffffffffffffffffffffffffffffffffffff90911691639d2f254f9160448082019260209290919082900301818787803b158015620001b957600080fd5b505af1158015620001ce573d6000803e3d6000fd5b505050506040513d6020811015620001e557600080fd5b5051604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290519192508291620002a69173ffffffffffffffffffffffffffffffffffffffff841691638da5cb5b91600480820192602092909190829003018186803b1580156200025957600080fd5b505afa1580156200026e573d6000803e3d6000fd5b505050506040513d60208110156200028557600080fd5b5051600f5473ffffffffffffffffffffffffffffffffffffffff16620012f0565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c60601b60601c73ffffffffffffffffffffffffffffffffffffffff166306447d568273ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033257600080fd5b505afa15801562000347573d6000803e3d6000fd5b505050506040513d60208110156200035e57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015251602480830192600092919082900301818387803b158015620003cc57600080fd5b505af1158015620003e1573d6000803e3d6000fd5b5050600a54600b54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015260248101929092525191851693506340c10f19925060448082019260009290919082900301818387803b1580156200046457600080fd5b505af115801562000479573d6000803e3d6000fd5b5050604080517f90c5013b0000000000000000000000000000000000000000000000000000000081529051737109709ecfa91a80626ff3989d68f67f5b1dd12d93506390c5013b9250600480830192600092919082900301818387803b158015620004e357600080fd5b505af1158015620004f8573d6000803e3d6000fd5b5093979650505050505050565b6101a46008819055604080517fffa18649000000000000000000000000000000000000000000000000000000008152600481019290925251737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200057b57600080fd5b505af115801562000590573d6000803e3d6000fd5b505050506040513d6020811015620005a757600080fd5b5051600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa1864900000000000000000000000000000000000000000000000000000000815261245960048201529051737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa186499160248083019260209291908290030181600087803b1580156200065c57600080fd5b505af115801562000671573d6000803e3d6000fd5b505050506040513d60208110156200068857600080fd5b5051600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604080517fffa1864900000000000000000000000000000000000000000000000000000000815262018333600482015290516200077891737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ffa18649916024808201926020929091908290030181600087803b1580156200074457600080fd5b505af115801562000759573d6000803e3d6000fd5b505050506040513d60208110156200077057600080fd5b505162001474565b600c55612710600b556040516200078f90620016d9565b604051809103906000f080158015620007ac573d6000803e3d6000fd5b50600d80547fffffffffffffffff0000000000000000000000000000000000000000ffffffff1664010000000073ffffffffffffffffffffffffffffffffffffffff93841602179055600a54600b546040519190921691906200080f90620016e7565b73ffffffffffffffffffffffffffffffffffffffff909216604080840191909152606083019190915260808083526004908301527f46616b650000000000000000000000000000000000000000000000000000000060a083015260c0602083018190526002908301527f464b00000000000000000000000000000000000000000000000000000000000060e0830152519081900361010001906000f080158015620008be573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600a80547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167505dc0000000000000000000000000000000000000000179055600d8054610bb87fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009091161790556200097f61beef62001474565b601755600a546040517401000000000000000000000000000000000000000090910463ffffffff1690620009b390620016f5565b63ffffffff909116815260405190819003602001906000f080158015620009de573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600d546040516401000000009091049091169062000a3e9062001703565b73ffffffffffffffffffffffffffffffffffffffff909116815260405190819003602001906000f08015801562000a79573d6000803e3d6000fd5b50600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162000acd9062001711565b604051809103906000f08015801562000aea573d6000803e3d6000fd5b50601380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162000b3e906200171f565b604051809103906000f08015801562000b5b573d6000803e3d6000fd5b50601080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162000baf906200172d565b604051809103906000f08015801562000bcc573d6000803e3d6000fd5b50601180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162000c20906200173b565b604051809103906000f08015801562000c3d573d6000803e3d6000fd5b50601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179081905560115460405191831692169062000c989062001749565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604080519182900301906000f08015801562000cd9573d6000803e3d6000fd5b50601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905562000d2962000da0565b600d5460175462000d419163ffffffff169062000134565b601680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b601354601254601054604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152918316602483015251919092169163485cc95591604480830192600092919082900301818387803b15801562000e2257600080fd5b505af115801562000e37573d6000803e3d6000fd5b5050600f54601354601054604080517f485cc95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301525191909216935063485cc9559250604480830192600092919082900301818387803b15801562000ebd57600080fd5b505af115801562000ed2573d6000803e3d6000fd5b5050601354600f54604080517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905191909216935063f2fde38b9250602480830192600092919082900301818387803b15801562000f4e57600080fd5b505af115801562000f63573d6000803e3d6000fd5b5050601054600e54604080517f6ef0f37f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529051919092169350636ef0f37f9250602480830192600092919082900301818387803b15801562000fdf57600080fd5b505af115801562000ff4573d6000803e3d6000fd5b5050600f54600d54600c54604080517fb49c53a700000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015260248301919091525173ffffffffffffffffffffffffffffffffffffffff909216935063b49c53a7925060448082019260009290919082900301818387803b1580156200107f57600080fd5b505af115801562001094573d6000803e3d6000fd5b50505050565b60008054610100900460ff1615620010be5750600054610100900460ff16620012d5565b6000620010ca6200148d565b15620012d25760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152835180840385018152606084019094527f667f9d700000000000000000000000000000000000000000000000000000000060808401908152845160009593947f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49493608490910191908401908083835b60208310620011c557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910162001186565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106200124957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016200120a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620012ad576040519150601f19603f3d011682016040523d82523d6000602084013e620012b2565b606091505b50915050808060200190516020811015620012cc57600080fd5b50519150505b90505b90565b60005462010000900460ff1681565b60005460ff1681565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462001470577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040518080602001828103825260258152602001806200f4426025913960400191505060405180910390a16040805173ffffffffffffffffffffffffffffffffffffffff83166020820152818152600a818301527f2020457870656374656400000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a16040805173ffffffffffffffffffffffffffffffffffffffff84166020820152818152600a818301527f2020202041637475616c00000000000000000000000000000000000000000000606082015290517f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f9181900360800190a162001470620014a8565b5050565b73ffffffffffffffffffffffffffffffffffffffff1690565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b151590565b620014b26200148d565b15620016ab5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d60208083018290527f6661696c6564000000000000000000000000000000000000000000000000000083850152600160608481019190915284518085039091018152608084019094527f70ca10bb0000000000000000000000000000000000000000000000000000000060a08401908152845160009593947f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4949360a490910191908401908083835b60208310620015b957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016200157a565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b602083106200163d57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101620015fe565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620016a1576040519150601f19603f3d011682016040523d82523d6000602084013e620016a6565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6103cd806200175883390190565b6114808062001b2583390190565b6104db8062002fa583390190565b6152dd806200348083390190565b612783806200875d83390190565b611581806200aee083390190565b61070d806200c46183390190565b612583806200cb6e83390190565b610351806200f0f18339019056fe608060405234801561001057600080fd5b506103ad806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063172a93fb146100465780636c2676331461008b5780637013ca26146100d2575b600080fd5b6100896004803603606081101561005c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610113565b005b6100be600480360360208110156100a157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661017d565b604080519115158252519081900360200190f35b6100da6101f9565b60405180826101c080838360005b838110156101005781810151838201526020016100e8565b5050505090500191505060405180910390f35b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fa0fe60ff59098af32f94c6874d343e75865ae755f38e2dbd9320650270bdf331836040518082815260200191505060405180910390a3505050565b6000806101886101f9565b905060005b600e8110156101ed578181600e81106101a257fe5b602002015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156101e5576001925050506101f4565b60010161018d565b5060009150505b919050565b610201610381565b50604080516101c081018252732260fac5e5542a773aa44fbcfedf7c193bc2c599815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602082015273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489181019190915273853d955acef822db058eb8505911ed77f175b99e606082015273dac17f958d2ee523a2206206994597c13d831ec76080820152736b175474e89094c44da98b954eedeac495271d0f60a082015273d417144312dbf50465b1c641d016962017ef624060c0820152733d6f0dea3ac3c607b3998e6ce14b6350721752d960e08201527340eb746dee876ac1e78697b7ca85142d178a1fc861010082015273f1a91c7d44768070f711c68f33a7ca25c8d30268610120820152733432b6a60d23ca0dfca7761b7ab56459d9c964d0610140820152733431f91b3a388115f00c5ba9fdb899851d005fb561016082015273e5097d9baeafb89f9bcb78c9290d545db5f9e9cb61018082015273f1dc500fde233a4055e25e5bbf516372bc4f68716101a082015290565b604051806101c00160405280600e90602082028036833750919291505056fea164736f6c6343000706000a60806040526040516200148038038062001480833981810160405260808110156200002957600080fd5b81019080805160405193929190846401000000008211156200004a57600080fd5b9083019060208201858111156200006057600080fd5b82516401000000008111828201881017156200007b57600080fd5b82525081516020918201929091019080838360005b83811015620000aa57818101518382015260200162000090565b50505050905090810190601f168015620000d85780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620000fc57600080fd5b9083019060208201858111156200011257600080fd5b82516401000000008111828201881017156200012d57600080fd5b82525081516020918201929091019080838360005b838110156200015c57818101518382015260200162000142565b50505050905090810190601f1680156200018a5780820380516001836020036101000a031916815260200191505b50604090815260208281015192909101518651929450925085918591620001b79160039185019062000369565b508051620001cd90600490602084019062000369565b50506005805460ff1916601217905550620001e98282620001f3565b5050505062000415565b6001600160a01b0382166200024f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200025d6000838362000302565b62000279816002546200030760201b620007d11790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620002ac918390620007d162000307821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008282018381101562000362576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003a15760008555620003ec565b82601f10620003bc57805160ff1916838001178555620003ec565b82800160010185558215620003ec579182015b82811115620003ec578251825591602001919060010190620003cf565b50620003fa929150620003fe565b5090565b5b80821115620003fa5760008155600101620003ff565b61105b80620004256000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806340c10f19116100975780639dc29fac116100665780639dc29fac14610374578063a457c2d7146103ad578063a9059cbb146103e6578063dd62ed3e1461041f576100f5565b806340c10f19146102bd57806356189cb4146102f657806370a082311461033957806395d89b411461036c576100f5565b8063222f5be0116100d3578063222f5be0146101de57806323b872dd14610223578063313ce567146102665780633950935114610284576100f5565b806306fdde03146100fa578063095ea7b31461017757806318160ddd146101c4575b600080fd5b61010261045a565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b06004803603604081101561018d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561050e565b604080519115158252519081900360200190f35b6101cc61052b565b60408051918252519081900360200190f35b610221600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610531565b005b6101b06004803603606081101561023957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610541565b61026e6105e2565b6040805160ff9092168252519081900360200190f35b6101b06004803603604081101561029a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105eb565b610221600480360360408110156102d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610646565b6102216004803603606081101561030c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610654565b6101cc6004803603602081101561034f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661065f565b610102610687565b6102216004803603604081101561038a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610706565b6101b0600480360360408110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610710565b6101b0600480360360408110156103fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610785565b6101cc6004803603604081101561043557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610799565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b5050505050905090565b600061052261051b61084c565b8484610850565b50600192915050565b60025490565b61053c838383610997565b505050565b600061054e848484610997565b6105d88461055a61084c565b6105d385604051806060016040528060288152602001610f986028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600160205260408120906105a561084c565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610b67565b610850565b5060019392505050565b60055460ff1690565b60006105226105f861084c565b846105d3856001600061060961084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c1681529252902054906107d1565b6106508282610c18565b5050565b61053c838383610850565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105045780601f106104d957610100808354040283529160200191610504565b6106508282610d49565b600061052261071d61084c565b846105d38560405180606001604052806025815260200161102a602591396001600061074761084c565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610b67565b600061052261079261084c565b8484610997565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60008282018381101561084557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff83166108bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110066024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610928576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610f506022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610fe16025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610f0b6023913960400191505060405180910390fd5b610a7a83838361053c565b610ac481604051806060016040528060268152602001610f726026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610b0090826107d1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610c10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610bd5578181015183820152602001610bbd565b50505050905090810190601f168015610c025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8216610c9a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610ca66000838361053c565b600254610cb390826107d1565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610ce690826107d1565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610fc06021913960400191505060405180910390fd5b610dc18260008361053c565b610e0b81604051806060016040528060228152602001610f2e6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610b67565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254610e3e9082610e93565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082821115610f0457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a608060405234801561001057600080fd5b506040516104db3803806104db8339818101604052602081101561003357600080fd5b50516000805463ffffffff90921663ffffffff1990921691909117905561047c8061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638d3638f4116100505780638d3638f4146100a1578063b95a2001146100c2578063fa31de01146100e557610072565b806306661abd14610077578063522ae0021461009157806367a6771d14610099575b600080fd5b61007f61019f565b60408051918252519081900360200190f35b61007f6101ac565b61007f6101b2565b6100a96101b8565b6040805163ffffffff9092168252519081900360200190f35b6100a9600480360360208110156100d857600080fd5b503563ffffffff166101c4565b61019d600480360360608110156100fb57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561012857600080fd5b82018360208201111561013a57600080fd5b8035906020019184600183028401116401000000008311171561015c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506101dc945050505050565b005b6001805481019081905590565b61080081565b60035481565b60005463ffffffff1681565b60026020526000908152604090205463ffffffff1681565b6108008151111561024e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff838116600090815260026020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000081166001918516918201851617909155815490926102aa9116338488888861037f565b805160208201209091506102be8684610455565b67ffffffffffffffff1660016102d261019f565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a600354866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561033c578181015183820152602001610324565b50505050905090810190601f1680156103695780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061041057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103d3565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b63ffffffff1660209190911b67ffffffff0000000016179056fea164736f6c6343000706000a60a060405234801561001057600080fd5b50604051620052dd380380620052dd8339818101604052602081101561003557600080fd5b5051606081901b6001600160601b0319166080526001600160a01b031661525a6200008360003980610d035280610e815280610f5f52806111555280611ec35280611f7b525061525a6000f3fe6080604052600436106101845760003560e01c80638da5cb5b116100d6578063bc7dbab31161007f578063e4ad9a1811610059578063e4ad9a18146107eb578063f2fde38b1461086d578063ffa1ad74146108ad5761018b565b8063bc7dbab3146105aa578063ce5494bb1461065b578063e280bc7e1461069b5761018b565b8063a9bd1226116100b0578063a9bd122614610444578063ab2dc3f5146104a4578063b49c53a7146105745761018b565b80638da5cb5b1461040557806397f641ab1461041a5780639d23c4c71461042f5761018b565b8063485cc95511610138578063715018a611610112578063715018a61461034e57806383bbb8061461036357806386e532d4146103a55761018b565b8063485cc955146102c75780634fb3ccc51461030f578063546d573d146103245761018b565b80633339df96116101695780633339df961461023457806341bdc8b514610272578063459f1383146102b25761018b565b8063044dc0d71461019057806328b1aea0146101e25761018b565b3661018b57005b600080fd5b34801561019c57600080fd5b506101e0600480360360608110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013591604090910135166108d8565b005b3480156101ee57600080fd5b506101e06004803603606081101561020557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff166108e8565b34801561024057600080fd5b50610249610b4c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561027e57600080fd5b506101e06004803603602081101561029557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b68565b3480156102be57600080fd5b506101e0610c57565b3480156102d357600080fd5b506101e0600480360360408110156102ea57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610ff5565b34801561031b57600080fd5b50610249611153565b34801561033057600080fd5b506102496004803603602081101561034757600080fd5b5035611177565b34801561035a57600080fd5b506101e061119f565b34801561036f57600080fd5b506103936004803603602081101561038657600080fd5b503563ffffffff16611249565b60408051918252519081900360200190f35b3480156103b157600080fd5b506101e0600480360360608110156103c857600080fd5b5063ffffffff813516907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000006020820135811691604001351661125b565b34801561041157600080fd5b50610249611266565b34801561042657600080fd5b50610393611282565b34801561043b57600080fd5b5061024961128d565b34801561045057600080fd5b506101e0600480360360a081101561046757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff604082013516906060810135906080013515156112a9565b3480156104b057600080fd5b506101e0600480360360808110156104c757600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156104ff57600080fd5b82018360208201111561051157600080fd5b8035906020019184600183028401116401000000008311171561053357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611435945050505050565b34801561058057600080fd5b506101e06004803603604081101561059757600080fd5b5063ffffffff81351690602001356116a5565b3480156105b657600080fd5b506101e0600480360360a08110156105cd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a08101608082013564010000000081111561061c57600080fd5b82018360208201111561062e57600080fd5b8035906020019184600183028401116401000000008311171561065057600080fd5b5090925090506117f9565b34801561066757600080fd5b506101e06004803603602081101561067e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119e3565b3480156106a757600080fd5b506101e0600480360360808110156106be57600080fd5b63ffffffff82358116926020810135909116918101906060810160408201356401000000008111156106ef57600080fd5b82018360208201111561070157600080fd5b8035906020019184600183028401116401000000008311171561072357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460018302840111640100000000831117156107aa57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ccf945050505050565b3480156107f757600080fd5b506108316004803603604081101561080e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d02565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909316835260208301919091528051918290030190f35b34801561087957600080fd5b506101e06004803603602081101561089057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611d1a565b3480156108b957600080fd5b506108c2611ebc565b6040805160ff9092168252519081900360200190f35b6108e3838383611ec1565b505050565b6108f0612066565b73ffffffffffffffffffffffffffffffffffffffff1661090e611266565b73ffffffffffffffffffffffffffffffffffffffff161461099057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b610b70612066565b73ffffffffffffffffffffffffffffffffffffffff16610b8e611266565b73ffffffffffffffffffffffffffffffffffffffff1614610c1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610c5f612066565b73ffffffffffffffffffffffffffffffffffffffff16610c7d611266565b73ffffffffffffffffffffffffffffffffffffffff1614610cff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637013ca266040518163ffffffff1660e01b81526004016101c06040518083038186803b158015610d6857600080fd5b505afa158015610d7c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506101c0811015610da257600080fd5b50905060005b600e811015610ff15760008282600e8110610dbf57fe5b6020020151905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e2f57600080fd5b505afa158015610e43573d6000803e3d6000fd5b505050506040513d6020811015610e5957600080fd5b505190508015610fe7578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f000000000000000000000000000000000000000000000000000000000000000060006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505050506040513d6020811015610f1f57600080fd5b5050604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905291519184169163095ea7b3916044808201926020929091908290030181600087803b158015610fba57600080fd5b505af1158015610fce573d6000803e3d6000fd5b505050506040513d6020811015610fe457600080fd5b50505b5050600101610da8565b5050565b600054610100900460ff168061100e575061100e61206a565b8061101c575060005460ff16155b611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff161580156110d757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556111208261207b565b80156108e357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6111a7612066565b73ffffffffffffffffffffffffffffffffffffffff166111c5611266565b73ffffffffffffffffffffffffffffffffffffffff161461124757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b6108e38383836121d7565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b8161131557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080611322878761234b565b915091506113358262ffffff191661296d565b63ffffffff168563ffffffff16146113ae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b60006113bb8588846129d8565b90506113c88684836121d7565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b61143e33612a3d565b6114a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b83826114b58282612ae8565b61152057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b600061155661152f8583612b14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612b38565b905060006115857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316612b6d565b905060006115b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416612bb1565b90506115e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612c49565b156115f7576115f289898484612c56565b61169a565b6116227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612ca3565b15611633576115f289898484612cb0565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b6116ad612066565b73ffffffffffffffffffffffffffffffffffffffff166116cb611266565b73ffffffffffffffffffffffffffffffffffffffff161461174d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611755613015565b63ffffffff168263ffffffff1614158015611775575063ffffffff821615155b6117e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b600080611806888861234b565b90925090508461187757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6118a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661296d565b63ffffffff168663ffffffff161461191b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061196886898461192c336130b1565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506130ca92505050565b90506119758784836121d7565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b158015611a5a57600080fd5b505afa158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff8082169083161415611b1057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015611b8157600080fd5b505afa158015611b95573d6000803e3d6000fd5b505050506040513d6020811015611bab57600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b158015611c2557600080fd5b505af1158015611c39573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b158015611cb157600080fd5b505af1158015611cc5573d6000803e3d6000fd5b5050505050505050565b6000611cde60015b8490612b14565b90506000611cec6005611cd7565b9050611cfa86868484612cb0565b505050505050565b600080611d0f848461234b565b915091509250929050565b611d22612066565b73ffffffffffffffffffffffffffffffffffffffff16611d40611266565b73ffffffffffffffffffffffffffffffffffffffff1614611dc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150c76026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c267633846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d6020811015611f7257600080fd5b505115612045577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663172a93fb8483856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561202857600080fd5b505af115801561203c573d6000803e3d6000fd5b505050506108e3565b6108e373ffffffffffffffffffffffffffffffffffffffff8416828461319a565b3390565b600061207530613227565b15905090565b600054610100900460ff1680612094575061209461206a565b806120a2575060005460ff16155b6120f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561215d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556121a561322d565b8015610ff157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b60006121e284613351565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561224c57600080fd5b505afa158015612260573d6000803e3d6000fd5b505050506040513d602081101561227657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de01858361229f87876133d3565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122fd5781810151838201526020016122e5565b50505050905090810190601f16801561232a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015611cb157600080fd5b600080600083116123bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b15801561243357600080fd5b505afa158015612447573d6000803e3d6000fd5b505050506040513d602081101561245d57600080fd5b5051156127ab5761248673ffffffffffffffffffffffffffffffffffffffff86163330876134e7565b6127a48173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124d157600080fd5b505af11580156124e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561252c57600080fd5b810190808051604051939291908464010000000082111561254c57600080fd5b90830190602082018581111561256157600080fd5b825164010000000081118282018810171561257b57600080fd5b82525081516020918201929091019080838360005b838110156125a8578181015183820152602001612590565b50505050905090810190601f1680156125d55780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561262257600080fd5b505afa158015612636573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561267d57600080fd5b810190808051604051939291908464010000000082111561269d57600080fd5b9083019060208201858111156126b257600080fd5b82516401000000008111828201881017156126cc57600080fd5b82525081516020918201929091019080838360005b838110156126f95781810151838201526020016126e1565b50505050905090810190601f1680156127265780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561277357600080fd5b505afa158015612787573d6000803e3d6000fd5b505050506040513d602081101561279d57600080fd5b5051613582565b91506128ac565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b15801561281f57600080fd5b505af1158015612833573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b15801561287d57600080fd5b505afa158015612891573d6000803e3d6000fd5b505050506040513d60208110156128a757600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b15801561291f57600080fd5b505afa158015612933573d6000803e3d6000fd5b505050506040513d604081101561294957600080fd5b508051602090910151909250905061296182826136bd565b94505050509250929050565b60008160016129a0815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690613714565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004613894565b949350505050565b6000612a33600380868686604051602001808560068111156129f657fe5b60f81b8152600101848152602001838152602001828152602001945050505050604051602081830303815290604052612b1490919063ffffffff16565b90505b9392505050565b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b158015612ab457600080fd5b505afa158015612ac8573d6000803e3d6000fd5b505050506040513d6020811015612ade57600080fd5b505190505b919050565b63ffffffff821660009081526097602052604081205482148015612b0b57508115155b90505b92915050565b815160009060208401612b2f64ffffffffff851682846138b5565b95945050505050565b6000612b0e612b468361390b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613957565b6000816002612b7b81612977565b506129d06000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088169291906139d1565b6000816002612bbf81612977565b5060006024612bef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613a57565b6bffffffffffffffffffffffff160390506000612c0b86613a6b565b60ff169050612c3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716602484846139d1565b9695505050505050565b6000612b0e826003613a9c565b6000612c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613ae9565b9050612c928585858585613b25565b50612c9c81613dc8565b5050505050565b6000612b0e826005613a9c565b6000612cdd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613e38565b90506000612cee8686868686613b25565b905060007f048494fe0000000000000000000000000000000000000000000000000000000087612d3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613e46565b612d6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000891661296d565b612d957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a16613e84565b86612dc17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b16613ec2565b612e16612def7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d16613ef3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613f49565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612e9c578181015183820152602001612e84565b50505050905090810190601f168015612ec95780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b60208310612f9a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f5d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612ffc576040519150601f19603f3d011682016040523d82523d6000602084013e613001565b606091505b5050905080611cc5573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561308057600080fd5b505afa158015613094573d6000803e3d6000fd5b505050506040513d60208110156130aa57600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000612c3f6005808888888888604051602001808760068111156130ea57fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b6020831061315357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613116565b6001836020036101000a0380198251168184511680821785525050505050509050019650505050505050604051602081830303815290604052612b1490919063ffffffff16565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526108e3908490613f8d565b3b151590565b600054610100900460ff1680613246575061324661206a565b80613254575060005460ff16155b6132a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561330f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b613317614065565b61331f614177565b801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b63ffffffff811660009081526097602052604090205480612ae357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60608260016133e181612977565b506133eb84614307565b61345657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516002808252606082018352600092602083019080368337019050509050858160008151811061348557fe5b602002602001019062ffffff1916908162ffffff19168152505084816001815181106134ad57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090921660209283029190910190910152612c3f81614321565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261357c908590613f8d565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b602083106135e157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016135a4565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b6020831061366957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161362c565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b6000612b0b6001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b166020820152602480820187905282518083039091018152604490910190915290612b14565b60006137208383614371565b61388d57600061373e61373285614393565b64ffffffffff16614399565b91505060006137538464ffffffffff16614399565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b8381101561385257818101518382015260200161383a565b50505050905090810190601f16801561387f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff166138ab85858561446d565b901c949350505050565b6000806138c284846145db565b90506040518111156138d2575060005b80613900577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050612a36565b612b2f85858561464d565b600061391682614660565b1561394f576139487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660026146b2565b9050612ae3565b612b0e6146d8565b6000613962826146fc565b6139cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b6000806139dd86614739565b6bffffffffffffffffffffffff1690506139f68661474d565b613a0a85613a0484896145db565b906145db565b1115613a39577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506129d0565b613a4381866145db565b9050612c3f8364ffffffffff1682866138b5565b60181c6bffffffffffffffffffffffff1690565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001613894565b6000816006811115613aaa57fe5b60ff16613ab684614777565b60ff16148015612b0b5750816006811115613acd57fe5b613ad6846147a7565b6006811115613ae157fe5b149392505050565b6000816003613af781612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d6147e2565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a613b717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000871661296d565b613b9c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613e84565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b158015613bdf57600080fd5b505af1158015613bf3573d6000803e3d6000fd5b505050506040513d6020811015613c0957600080fd5b505190506000613c3a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516613ec2565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b158015613caf57600080fd5b505afa158015613cc3573d6000803e3d6000fd5b505050506040513d6020811015613cd957600080fd5b505115613cf057613ceb828285611ec1565b613d26565b613d26828285613d217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166147f0565b614821565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16613d5e89896148fd565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff1631108015613dfc575066d529ae9e8600004710155b1561334e5760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b6000816005613af781612977565b6000816005613e5481612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166061602061446d565b6000816001613e9281612977565b506129d07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166004602061446d565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020613894565b6000816005613f0181612977565b506129d0608180613f337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613a57565b6bffffffffffffffffffffffff16036006612b86565b6060600080613f5784613a57565b6bffffffffffffffffffffffff1690506040519150819250613f7c8483602001614917565b508181016020016040529052919050565b6000613fef826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614a439092919063ffffffff16565b8051909150156108e35780806020019051602081101561400e57600080fd5b50516108e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061519c602a913960400191505060405180910390fd5b600054610100900460ff168061407e575061407e61206a565b8061408c575060005460ff16155b6140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561331f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680614190575061419061206a565b8061419e575060005460ff16155b6141f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615134602e913960400191505060405180910390fd5b600054610100900460ff1615801561425957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000614263612066565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561334e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600061431282612c49565b80612b0e5750612b0e82612ca3565b60405160609060006143368460208401614a52565b9050600061434382613a57565b6bffffffffffffffffffffffff169050600061435e83614aca565b9184525082016020016040525092915050565b60008164ffffffffff1661438484614393565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff1611156144015760ff600882021684901c6143be81614ade565b61ffff16841793508160ff166010146143d957601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161439f565b50600f5b60ff8160ff1610156144675760ff600882021684901c61442481614ade565b61ffff16831792508160ff1660001461443f57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614405565b50915091565b600060ff821661447f57506000612a36565b61448884613a57565b6bffffffffffffffffffffffff166144a38460ff85166145db565b1115614545576144e46144b585614739565b6bffffffffffffffffffffffff166144cc86613a57565b6bffffffffffffffffffffffff16858560ff16614b0e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561385257818101518382015260200161383a565b60208260ff1611156145a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615162603a913960400191505060405180910390fd5b6008820260006145b186614739565b6bffffffffffffffffffffffff16905060006145cc83614c69565b91909501511695945050505050565b81810182811015612b0e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b60008061468e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416613a57565b6bffffffffffffffffffffffff1690506085811480612a36575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b600061470782614393565b64ffffffffff1664ffffffffff141561472257506000612ae3565b600061472d8361474d565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b600061475882613a57565b61476183614739565b016bffffffffffffffffffffffff169050919050565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001613894565b60006147d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316614393565b60ff166006811115612b0e57fe5b6000612b0b83836014613894565b6000612b0e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166041602061446d565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561489257600080fd5b505af11580156148a6573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cb157600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b600061492283614cb2565b614977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151c66028913960400191505060405180910390fd5b614980836146fc565b6149d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806151ee602b913960400191505060405180910390fd5b60006149e084613a57565b6bffffffffffffffffffffffff16905060006149fb85614739565b6bffffffffffffffffffffffff1690506000604051905084811115614a205760206060fd5b8285848460045afa50612c3f614a3587614393565b64ffffffffff16868561464d565b6060612a338484600085614cc4565b600060405182811115614a655760206060fd5b506000805b8451811015614abd576000858281518110614a8157fe5b60200260200101519050614a9781848701614917565b50614aa181613a57565b6bffffffffffffffffffffffff16929092019150600101614a6a565b506129d06000848361464d565b6000614ad582614e7e565b60200292915050565b6000614af060048360ff16901c614eb2565b60ff161760081b62ffff0016614b0582614eb2565b60ff1617919050565b60606000614b1b86614399565b9150506000614b2986614399565b9150506000614b3786614399565b9150506000614b4586614399565b915050838383836040516020018080615219603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a820152605001602161511382397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b6000614cbd8261501e565b1592915050565b606082471015614d1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806150ed6026913960400191505060405180910390fd5b614d2885613227565b614d9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310614dfc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614dbf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614e5e576040519150601f19603f3d011682016040523d82523d6000602084013e614e63565b606091505b5091509150614e73828286615046565b979650505050505050565b60006020614ea46020614e9085613a57565b6bffffffffffffffffffffffff16906145db565b81614eab57fe5b0492915050565b600060f08083179060ff82161415614ece576030915050612ae3565b8060ff1660f11415614ee4576031915050612ae3565b8060ff1660f21415614efa576032915050612ae3565b8060ff1660f31415614f10576033915050612ae3565b8060ff1660f41415614f26576034915050612ae3565b8060ff1660f51415614f3c576035915050612ae3565b8060ff1660f61415614f52576036915050612ae3565b8060ff1660f71415614f68576037915050612ae3565b8060ff1660f81415614f7e576038915050612ae3565b8060ff1660f91415614f94576039915050612ae3565b8060ff1660fa1415614faa576061915050612ae3565b8060ff1660fb1415614fc0576062915050612ae3565b8060ff1660fc1415614fd6576063915050612ae3565b8060ff1660fd1415614fec576064915050612ae3565b8060ff1660fe1415615002576065915050612ae3565b8060ff1660ff1415615018576066915050612ae3565b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b60608315615055575081612a36565b8251156150655782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561385257818101518382015260200161383a56fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a608060405234801561001057600080fd5b50612763806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001c05760003560e01c80638da5cb5b11620000f9578063ccf5a77c1162000099578063ec694a14116200006f578063ec694a1414620005d1578063f153768614620006e1578063f2fde38b146200071757620001c0565b8063ccf5a77c1462000559578063d82d05311462000563578063dc9685a714620005a557620001c0565b8063b9730eaf11620000cf578063b9730eaf1462000491578063c2561f6514620004c7578063c86415cb146200050f57620001c0565b80638da5cb5b146200042f5780639d2f254f1462000439578063b869d89a146200046557620001c0565b80633339df961162000165578063589b3c64116200013b578063589b3c6414620003b1578063715018a614620003dd57806380350c2214620003e757620001c0565b80633339df96146200033357806341bdc8b5146200033d578063485cc955146200037357620001c0565b80631ecf6f9f116200019b5780631ecf6f9f146200029d57806328b1aea014620002bd5780632c3da59c146200030757620001c0565b806303e418c214620001c55780630e71e251146200021b5780630fdeeba9146200027a575b600080fd5b620001fb60048036036020811015620001dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166200074d565b6040805163ffffffff909316835260208301919091528051918290030190f35b62000251600480360360208110156200023357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166200076f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b620002846200083f565b6040805163ffffffff9092168252519081900360200190f35b6200025160048036036020811015620002b557600080fd5b503562000850565b6200030560048036036060811015620002d557600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000878565b005b62000251600480360360408110156200031f57600080fd5b5063ffffffff813516906020013562000944565b62000251620009e1565b62000305600480360360208110156200035557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16620009fd565b62000305600480360360408110156200038b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351662000af1565b6200025160048036036040811015620003c957600080fd5b5063ffffffff813516906020013562000c59565b6200030562000c98565b6200030560048036036060811015620003ff57600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000932565b6200025162000d47565b62000251600480360360408110156200045157600080fd5b5063ffffffff813516906020013562000d63565b62000251600480360360408110156200047d57600080fd5b5063ffffffff813516906020013562000d71565b620001fb60048036036020811015620004a957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000e56565b6200030560048036036060811015620004df57600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1662000ea1565b62000545600480360360208110156200052757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000eae565b604080519115158252519081900360200190f35b6200025162000ef4565b62000251600480360360408110156200057b57600080fd5b50803563ffffffff16906020013573ffffffffffffffffffffffffffffffffffffffff1662000f10565b6200025160048036036040811015620005bd57600080fd5b5063ffffffff813516906020013562000f28565b620005fd60048036036040811015620005e957600080fd5b5063ffffffff813516906020013562000f96565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156200064057818101518382015260200162000626565b50505050905090810190601f1680156200066e5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015620006a357818101518382015260200162000689565b50505050905090810190601f168015620006d15780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b620001fb60048036036020811015620006f957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662000fb0565b62000305600480360360208110156200072f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1662001031565b6098602052600090815260409020805460019091015463ffffffff9091169082565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff1680835260019091015492820192909252906200082457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f2172657072000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b620008388160000151826020015162000f28565b9392505050565b60006200084b620011da565b905090565b60996020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b62000882620011e6565b73ffffffffffffffffffffffffffffffffffffffff16620008a262000d47565b73ffffffffffffffffffffffffffffffffffffffff16146200092557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000932838383620011ea565b6200093f838383620012bc565b505050565b60008062000953848462000c59565b905073ffffffffffffffffffffffffffffffffffffffff8116620009d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f21746f6b656e0000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b90505b92915050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b62000a07620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000a2762000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000aaa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff168062000b0d575062000b0d620013d6565b8062000b1c575060005460ff16155b62000b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562000bda57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b609780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905562000c2582620013e9565b80156200093f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b600062000c65620011da565b63ffffffff168363ffffffff16141562000c8c5762000c848262001550565b9050620009db565b620009d8838362000f28565b62000ca2620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000cc262000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000d4557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b6000620009d8838362001553565b600062000d7d620011e6565b73ffffffffffffffffffffffffffffffffffffffff1662000d9d62000d47565b73ffffffffffffffffffffffffffffffffffffffff161462000e2057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b62000e2c838362000c59565b905073ffffffffffffffffffffffffffffffffffffffff8116620009db57620009d8838362001553565b73ffffffffffffffffffffffffffffffffffffffff166000908152609860209081526040918290208251808401909352805463ffffffff168084526001909101549290910182905291565b6200093f838383620011ea565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602052604081205463ffffffff161562000ee95750600062000eef565b50803b15155b919050565b60975473ffffffffffffffffffffffffffffffffffffffff1681565b6000620009d88362000f22846200187e565b62000c59565b60008062000f37848462001897565b9050600062000f687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316620018f0565b60009081526099602052604090205473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b60608062000fa5848462001933565b915091509250929050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526098602090815260408083208151808301909252805463ffffffff168083526001909101549282019290925282916200101e5762001009620011da565b925062001016846200187e565b91506200102b565b8051602082015190935091505b50915091565b6200103b620011e6565b73ffffffffffffffffffffffffffffffffffffffff166200105b62000d47565b73ffffffffffffffffffffffffffffffffffffffff1614620010de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166200114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620027036026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006200084b62001a13565b3390565b63ffffffff83166200125d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f216e756c6c20646f6d61696e0000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260986020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff93909316929092178255600190910155565b73ffffffffffffffffffffffffffffffffffffffff81166200133f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f216e756c6c207265707200000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006200134d848462001897565b905060006200137e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316620018f0565b600090815260996020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925550505050565b6000620013e33062001ab2565b15905090565b600054610100900460ff168062001405575062001405620013d6565b8062001414575060005460ff16155b6200146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff16158015620014d257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556200151c62001ab8565b80156200154c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b90565b60975460405160009173ffffffffffffffffffffffffffffffffffffffff16906200157e9062002192565b73ffffffffffffffffffffffffffffffffffffffff909116815260406020820181905260008183018190529051918290036060019190f080158015620015c8573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200161457600080fd5b505af115801562001629573d6000803e3d6000fd5b505050506000806200163c858562001933565b915091508273ffffffffffffffffffffffffffffffffffffffff1663654935f4838360126040518463ffffffff1660e01b8152600401808060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015620016b85781810151838201526020016200169e565b50505050905090810190601f168015620016e65780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156200171b57818101518382015260200162001701565b50505050905090810190601f168015620017495780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156200176c57600080fd5b505af115801562001781573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663f2fde38b620017ab62000d47565b6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015620017f857600080fd5b505af11580156200180d573d6000803e3d6000fd5b505050506200181e858585620012bc565b6200182b858585620011ea565b8273ffffffffffffffffffffffffffffffffffffffff16848663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a4505092915050565b73ffffffffffffffffffffffffffffffffffffffff1690565b6000620009d86001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16602082015260248082018790528251808303909101815260449091019091529062001be8565b600080620018fe8362001c0e565b6bffffffffffffffffffffffff16905060006200191b8462001c22565b6bffffffffffffffffffffffff169091209392505050565b6060806000620019438462001c36565b915050620019518562001d0e565b6040805160b09290921b7fffffffffffffffffffff000000000000000000000000000000000000000000001660208301527f2e00000000000000000000000000000000000000000000000000000000000000602a83015260e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016602b8301528051808303600f9081018252602f8401818152606f85019093529095509091604f01818036833701905050915060208301516020830152509250929050565b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801562001a7f57600080fd5b505afa15801562001a94573d6000803e3d6000fd5b505050506040513d602081101562001aab57600080fd5b5051905090565b3b151590565b600054610100900460ff168062001ad4575062001ad4620013d6565b8062001ae3575060005460ff16155b62001b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001ba157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b62001bab62001d70565b62001bb562001e8a565b801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b81516000906020840162001c0564ffffffffff8516828462002024565b95945050505050565b60781c6bffffffffffffffffffffffff1690565b60181c6bffffffffffffffffffffffff1690565b600080601f5b600f8160ff16111562001ca35760ff600882021684901c62001c5e8162002081565b61ffff16841793508160ff1660101462001c7a57601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001c3c565b50600f5b60ff8160ff1610156200102b5760ff600882021684901c62001cc98162002081565b61ffff16831792508160ff1660001462001ce557601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0162001ca7565b60006030815b600a8160ff16101562001d695760ff600882021682600a63ffffffff87160663ffffffff160169ffffffffffffffffffff16901b83179250600a8463ffffffff168162001d5d57fe5b04935060010162001d14565b5050919050565b600054610100900460ff168062001d8c575062001d8c620013d6565b8062001d9b575060005460ff16155b62001df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001bb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911661010017166001179055801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168062001ea6575062001ea6620013d6565b8062001eb5575060005460ff16155b62001f0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062002729602e913960400191505060405180910390fd5b600054610100900460ff1615801562001f7357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600062001f7f620011e6565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801562001be557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600080620020338484620020b5565b905060405181111562002044575060005b8062002074577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000091505062000838565b62001c0585858562002128565b60006200209560048360ff16901c6200213b565b60ff161760081b62ffff0016620020ac826200213b565b60ff1617919050565b81810182811015620009db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b6040805180820190915260108082527f30313233343536373839616263646566000000000000000000000000000000006020830152600091600f841691829081106200218357fe5b016020015160f81c9392505050565b61056280620021a18339019056fe60a06040526040516105623803806105628339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b506040525050506100f0826101d060201b6100291760201c565b610134576040805162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015290519081900360640190fd5b6001600160601b0319606083901b166080526000610151836101d6565b9050610166816101d060201b6100291760201c565b6101b7576040805162461bcd60e51b815260206004820152601f60248201527f626561636f6e20696d706c656d656e746174696f6e2021636f6e747261637400604482015290519081900360640190fd5b8151156101c8576101c881836102d6565b50505061038f565b3b151590565b604051600090819081906001600160a01b0385169082818181855afa9150503d8060008114610221576040519150601f19603f3d011682016040523d82523d6000602084013e610226565b606091505b50915091508181906102b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561027b578181015183820152602001610263565b50505050905090810190601f1680156102a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156102cc57600080fd5b5051949350505050565b6000826001600160a01b0316826040518082805190602001908083835b602083106103125780518252601f1990920191602091820191016102f3565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610372576040519150601f19603f3d011682016040523d82523d6000602084013e610377565b606091505b505090508061038a573d6000803e3d6000fd5b505050565b60805160601c6101b76103ab60003980603652506101b76000f3fe60806040523661001357610011610017565b005b6100115b61002761002261002f565b61005f565b565b3b151590565b600061005a7f0000000000000000000000000000000000000000000000000000000000000000610083565b905090565b3660008037600080366000845af43d6000803e80801561007e573d6000f35b3d6000fd5b6040516000908190819073ffffffffffffffffffffffffffffffffffffffff85169082818181855afa9150503d80600081146100db576040519150601f19603f3d011682016040523d82523d6000602084013e6100e0565b606091505b509150915081819061018a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561014f578181015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508080602001905160208110156101a057600080fd5b505194935050505056fea164736f6c6343000706000a4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a164736f6c6343000706000a608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115048061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638f5d90e01161008c578063b9cff16211610066578063b9cff162146102b9578063e0e7a913146102dc578063f2fde38b14610394578063f31faefb146103c7576100ea565b80638f5d90e014610237578063916c34701461026a5780639fa92f9d146102b1576100ea565b80636ef0f37f116100c85780636ef0f37f146101c1578063715018a6146101f65780638d3638f4146101fe5780638da5cb5b14610206576100ea565b8063427ebef5146100ef5780635190bc53146101425780635f8b1dba14610175575b600080fd5b61012e6004803603604081101561010557600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610406565b604080519115158252519081900360200190f35b61012e6004803603602081101561015857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610446565b6101a86004803603602081101561018b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610476565b6040805163ffffffff9092168252519081900360200190f35b6101f4600480360360208110156101d757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661048e565b005b6101f461057d565b6101a8610627565b61020e6106c3565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f46004803603602081101561024d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106df565b6101f46004803603606081101561028057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169063ffffffff60208201351690604001351515610793565b61020e6108e1565b61020e600480360360208110156102cf57600080fd5b503563ffffffff166108fd565b6101f4600480360360608110156102f257600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561031f57600080fd5b82018360208201111561033157600080fd5b8035906020019184600183028401116401000000008311171561035357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610925945050505050565b6101f4600480360360208110156103aa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b9e565b6101f4600480360360408110156103dd57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16610d3f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020908152604080832063ffffffff8516845290915290205460ff1692915050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205463ffffffff16151590565b60026020526000908152604090205463ffffffff1681565b610496610ebc565b73ffffffffffffffffffffffffffffffffffffffff166104b46106c3565b73ffffffffffffffffffffffffffffffffffffffff161461053657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610585610ebc565b73ffffffffffffffffffffffffffffffffffffffff166105a36106c3565b73ffffffffffffffffffffffffffffffffffffffff161461062557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b600154604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d60208110156106bc57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6106e7610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107056106c3565b73ffffffffffffffffffffffffffffffffffffffff161461078757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61079081610ec0565b50565b61079b610ebc565b73ffffffffffffffffffffffffffffffffffffffff166107b96106c3565b73ffffffffffffffffffffffffffffffffffffffff161461083b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604080832063ffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016861515908117909155815194855291840191909152805191927f517de16b526853f481451c5151e87484e1b251ec7d0302efa1019c2ece179c2c929081900390910190a2505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b63ffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16806109bd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f217265706c696361206578697374730000000000000000000000000000000000604482015290519081900360640190fd5b6109c683610fad565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2257600080fd5b505afa158015610a36573d6000803e3d6000fd5b505050506040513d6020811015610a4c57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614610ad057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f2163757272656e74207570646174657200000000000000000000000000000000604482015290519081900360640190fd5b6000610ae685610adf84610fb0565b8686610fc9565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604080832063ffffffff8a16845290915290205490915060ff16610b8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2176616c69642077617463686572000000000000000000000000000000000000604482015290519081900360640190fd5b610b9782610ec0565b5050505050565b610ba6610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610bc46106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610c4657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610cb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061148e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d47610ebc565b73ffffffffffffffffffffffffffffffffffffffff16610d656106c3565b73ffffffffffffffffffffffffffffffffffffffff1614610de757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610df082610ec0565b610df9816110bf565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8716908117909155808452600383529281902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168517905580519384525191927f8440df9bf8a8542634a9eb196da1735b786ed9aa2fc12b080ac34c5fa81a9234929081900390910190a25050565b3390565b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205463ffffffff168015610fa95763ffffffff8116600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8616808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25b5050565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b600080610fd585610fad565b73ffffffffffffffffffffffffffffffffffffffff166345630b1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561101a57600080fd5b505afa15801561102e573d6000803e3d6000fd5b505050506040513d602081101561104457600080fd5b50516040805160208181018490527fffffffff0000000000000000000000000000000000000000000000000000000060e08b901b1682840152604480830189905283518084039091018152606490920190925280519101209091506110a8816111ab565b90506110b481856111fc565b979650505050505050565b63ffffffff811660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610fa95763ffffffff8216600081815260036020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff8516808452600283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001690558051928352517fce1533133fb359ace801d3176bbad25ace030d714aed35e38a6293c8a60b115b9281900390910190a25050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461126e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61128c86828585611296565b9695505050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114b46022913960400191505060405180910390fd5b8360ff16601b148061132657508360ff16601c145b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806114d66022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156113d7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661148457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756545434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6106908061007d6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063715018a6146100515780638da5cb5b1461005b57806399a88ec41461008c578063f2fde38b146100c7575b600080fd5b6100596100fa565b005b610063610211565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610059600480360360408110156100a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661022d565b610059600480360360208110156100dd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b2565b610102610653565b73ffffffffffffffffffffffffffffffffffffffff16610120610211565b73ffffffffffffffffffffffffffffffffffffffff16146101a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b610235610653565b73ffffffffffffffffffffffffffffffffffffffff16610253610211565b73ffffffffffffffffffffffffffffffffffffffff16146102d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6102de82610657565b61034957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f626561636f6e2021636f6e747261637400000000000000000000000000000000604482015290519081900360640190fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051602001808273ffffffffffffffffffffffffffffffffffffffff1681526020019150506040516020818303038152906040526040518082805190602001908083835b602083106103e557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016103a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610447576040519150601f19603f3d011682016040523d82523d6000602084013e61044c565b606091505b505090508061045f573d6000803e3d6000fd5b6040805173ffffffffffffffffffffffffffffffffffffffff84811682529151918516917fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09181900360200190a2505050565b6104ba610653565b73ffffffffffffffffffffffffffffffffffffffff166104d8610211565b73ffffffffffffffffffffffffffffffffffffffff161461055a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061065e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a164736f6c6343000706000a7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9608052610120604052600160e052603160f81b610100527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a05261190160f01b60c05234801561007057600080fd5b5060805160a05160c05160f01c6124de6100a5600039806110fa52508061142f525080610d84528061109652506124de6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638129fc1c116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461060b578063f2fde38b14610646578063f698da2514610679578063ffa1ad7414610681576101a3565b8063a9059cbb14610557578063cc2ab7c714610590578063d505accf146105ad576101a3565b8063982aaf6b116100c8578063982aaf6b146104dd5780639dc29fac146104e5578063a457c2d71461051e576101a3565b80638129fc1c1461049c5780638da5cb5b146104a457806395d89b41146104d5576101a3565b806340c10f191161015057806370a082311161012a57806370a082311461042e578063715018a6146104615780637ecebe0014610469576101a3565b806340c10f19146103265780634815fcb114610361578063654935f414610369576101a3565b806323b872dd1161018157806323b872dd1461028c578063313ce567146102cf57806339509351146102ed576101a3565b806306fdde03146101a8578063095ea7b31461022557806318160ddd14610272575b600080fd5b6101b0610689565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ea5781810151838201526020016101d2565b50505050905090810190601f1680156102175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025e6004803603604081101561023b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561073d565b604080519115158252519081900360200190f35b61027a610753565b60408051918252519081900360200190f35b61025e600480360360608110156102a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610759565b6102d76107cf565b6040805160ff9092168252519081900360200190f35b61025e6004803603604081101561030357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107d8565b61035f6004803603604081101561033c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561081b565b005b61027a6108d1565b61035f6004803603606081101561037f57600080fd5b81019060208101813564010000000081111561039a57600080fd5b8201836020820111156103ac57600080fd5b803590602001918460018302840111640100000000831117156103ce57600080fd5b9193909290916020810190356401000000008111156103ec57600080fd5b8201836020820111156103fe57600080fd5b8035906020019184600183028401116401000000008311171561042057600080fd5b91935091503560ff166108d7565b61027a6004803603602081101561044457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610afe565b61035f610b0f565b61027a6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bb9565b61035f610bcb565b6104ac610ce7565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b0610d03565b61027a610d82565b61035f600480360360408110156104fb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da6565b61025e6004803603604081101561053457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e58565b61025e6004803603604081101561056d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610eb4565b61035f600480360360208110156105a657600080fd5b5035610ec1565b61035f600480360360e08110156105c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610f77565b61027a6004803603604081101561062157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112a4565b61035f6004803603602081101561065c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112dc565b61027a61138d565b6102d7611483565b60688054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b600061074a338484611488565b50600192915050565b60675490565b60006107668484846115cf565b6107c584336107c08560405180606001604052806028815260200161241b6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260666020908152604080832033845290915290205491906117a1565b611488565b5060019392505050565b606a5460ff1690565b33600081815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161074a9185906107c09086611852565b6108236118cd565b73ffffffffffffffffffffffffffffffffffffffff16610841610ce7565b73ffffffffffffffffffffffffffffffffffffffff16146108c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd82826118d1565b5050565b606c5481565b60685460009060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415801561094c575060695460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604155b801561095b5750606a5460ff16155b905080806109de5750606c546109dc87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250611a04915050565b145b610a4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f21636f6d6d69747465642064657461696c730000000000000000000000000000604482015290519081900360640190fd5b610a556068878761227a565b50610a626069858561227a565b50606a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff841617905580610af6578160ff168484604051808383808284376040519201829003822094508b93508a92508190508383808284376040519201829003822094507f96848da8c41ae282b5ec5c04f45fc469a8186bb78de70419275c2c402fcc27b193506000925050a45b505050505050565b6000610b0982611b3f565b92915050565b610b176118cd565b73ffffffffffffffffffffffffffffffffffffffff16610b35610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610bb757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b606b6020526000908152604090205481565b600054610100900460ff1680610be45750610be4611b67565b80610bf2575060005460ff16155b610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cad57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610cb5611b78565b8015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b60698054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b7f000000000000000000000000000000000000000000000000000000000000000081565b610dae6118cd565b73ffffffffffffffffffffffffffffffffffffffff16610dcc610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610e4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd8282611c6a565b600061074a33846107c0856040518060600160405280602581526020016124ad6025913933600090815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906117a1565b600061074a3384846115cf565b610ec96118cd565b73ffffffffffffffffffffffffffffffffffffffff16610ee7610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610f6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b80606c5414610ce457606c55565b83421115610fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff871661106857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332305065726d69743a206f776e6572207a65726f206164647265737300604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8088166000818152606b602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948b166060850152608084018a905260a0840185905260c08085018a90528151808603909101815260e090940190528251920191909120907f000000000000000000000000000000000000000000000000000000000000000061112161138d565b83604051602001808461ffff1660f01b81526002018381526020018281526020019350505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156111bb573d6000803e3d6000fd5b5050506020604051035190508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461126157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8b166000908152606b602052604090206001850190556112978b8b8b611488565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260666020908152604080832093909416825291909152205490565b6112e46118cd565b73ffffffffffffffffffffffffffffffffffffffff16611302610ce7565b73ffffffffffffffffffffffffffffffffffffffff161461138457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ce481611db4565b6000804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f606860000160405180828054600181600116156101000203166002900480156114145780601f106113f2576101008083540402835291820191611414565b820191906000526020600020905b815481529060010190602001808311611400575b505060408051918290038220602080840196909652828201527f0000000000000000000000000000000000000000000000000000000000000000606083015260808201959095523060a0808301919091528551808303909101815260c090910190945250508151910120905090565b600081565b73ffffffffffffffffffffffffffffffffffffffff83166114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806124896024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123a56022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806124646025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061233a6023913960400191505060405180910390fd5b6116b2838383611f56565b6116fc816040518060600160405280602681526020016123c76026913973ffffffffffffffffffffffffffffffffffffffff861660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526065602052604080822093909355908416815220546117389082611852565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561180f5781810151838201526020016117f7565b50505050905090810190601f16801561183c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156118c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff821661195357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61195f60008383611f56565b60675461196c9082611852565b60675573ffffffffffffffffffffffffffffffffffffffff821660009081526065602052604090205461199f9082611852565b73ffffffffffffffffffffffffffffffffffffffff831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310611a6357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a26565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310611aeb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611aae565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526065602052604090205490565b6000611b7230611f5b565b15905090565b600054610100900460ff1680611b915750611b91611b67565b80611b9f575060005460ff16155b611bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015611c5a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c62611f61565b610cb5612073565b73ffffffffffffffffffffffffffffffffffffffff8216611cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806124436021913960400191505060405180910390fd5b611ce282600083611f56565b611d2c8160405180606001604052806022815260200161235d6022913973ffffffffffffffffffffffffffffffffffffffff851660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260656020526040902055606754611d5f9082612203565b60675560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611dbc6118cd565b73ffffffffffffffffffffffffffffffffffffffff16611dda610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061237f6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b505050565b3b151590565b600054610100900460ff1680611f7a5750611f7a611b67565b80611f88575060005460ff16155b611fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168061208c575061208c611b67565b8061209a575060005460ff16155b6120ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff1615801561215557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600061215f6118cd565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008282111561227457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826122b05760008555612314565b82601f106122e7578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612314565b82800160010185558215612314579182015b828111156123145782358255916020019190600101906122f9565b50612320929150612324565b5090565b5b80821115612320576000815560010161232556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a60a060405234801561001057600080fd5b506040516103513803806103518339818101604052604081101561003357600080fd5b5080516020909101516100458261005b565b60601b6001600160601b0319166080525061015b565b6000546001600160a01b03828116911614156100a9576040805162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b604482015290519081900360640190fd5b6100bc8161015560201b6101c71760201c565b61010d576040805162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b151590565b60805160601c6101da61017760003980601c52506101da6000f3fe60806040523373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461004d5760005460005260206000f35b6000356100598161005c565b50005b60005473ffffffffffffffffffffffffffffffffffffffff828116911614156100e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2175706772616465000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6100ef816101c7565b61015a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b15159056fea164736f6c6343000706000a4572726f723a2061203d3d2062206e6f7420736174697366696564205b616464726573735da164736f6c6343000706000a",
    "sourceMap": "1012:3664:57:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4037:637;;;;;;;;;;;;;;;;-1:-1:-1;4037:637:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1808:1433;;;:::i;:::-;;321:38:1;;;:::i;3247:554:57:-;;;:::i;1819:584:0:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;170:28:1;;;:::i;1572:26:0:-;;;:::i;4037:637:57:-;4180:13;;:90;;;;;;;;;;;;;;;;;;;;;4134:7;;;;4180:13;;;;;:33;;:90;;;;;;;;;;;;;;;4134:7;4180:13;:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4180:90:57;4466:19;;;;;;;;4180:90;;-1:-1:-1;4180:90:57;;4457:52;;4466:17;;;;;;:19;;;;;4180:90;;4466:19;;;;;;;;:17;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4466:19:57;4495:12;;;;4457:8;:52::i;:::-;282:28:1;274:37;;258:55;;250:64;;4519:13:57;;;4533:11;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4533:19:57;4519:34;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4519:34:57;;;;;;;-1:-1:-1;4519:34:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4580:10:57;;4592:21;;4563:51;;;;;;:16;4580:10;;;4563:51;;;;;;;;;;;;:16;;;;-1:-1:-1;4563:16:57;;-1:-1:-1;4563:51:57;;;;;4580:10;;4563:51;;;;;;;;4580:10;4563:16;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4624:14:57;;;;;;;;250:64:1;;-1:-1:-1;4624:12:57;;-1:-1:-1;4624:14:57;;;;;274:37:1;;4624:14:57;;;;;;;274:37:1;250:64;4624:14:57;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4655:12:57;;4037:637;-1:-1:-1;;;;;;;4037:637:57:o;1808:1433::-;2039:3;2023:13;:19;;;2066:22;;;;;;;;;;;;;;250:64:1;;2066:7:57;;:22;;;;;;;;;;;;;;274:37:1;250:64;2066:22:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2066:22:57;2052:11;:36;;;;;;;;;;;;;;2111:13;;;;;;2119:4;2111:13;;;;;;250:64:1;;2111:7:57;;:13;;;;;2066:22;;2111:13;;;;;;;-1:-1:-1;250:64:1;2111:13:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2111:13:57;2098:10;:26;;;;;;;;;;;;;;2182:14;;;;;;2190:5;2182:14;;;;;;2155:42;;250:64:1;;2182:7:57;;:14;;;;;2111:13;;2182:14;;;;;;;;-1:-1:-1;250:64:1;2182:14:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2182:14:57;2155:26;:42::i;:::-;2134:18;:63;2231:5;2207:21;:29;2263:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2246:14:57;:37;;;;;;;;;;;;;2372:10;;2396:21;;2307:120;;2372:10;;;;;2396:21;2307:120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2307:120:57;;;;;;;;;;;;;;;-1:-1:-1;2294:10:57;:133;;;;;;;;;;;;;;;2437:11;:18;;;;;;;;2465:12;:19;;2480:4;2465:19;;;;;;;2521:43;2556:6;2521:26;:43::i;:::-;2494:24;:70;2598:11;;2585:25;;2598:11;;;;;;;2585:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2574:8:57;:36;;;;;;;;;;;2710:14;;2670:56;;2710:14;;;;;;;;2670:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2655:12:57;:71;;;;;;;;;;;;;;;2752:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2736:13:57;:42;;;;;;;;;;;;;;;2812:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2788:21:57;:51;;;;;;;;;;;;;;;2875:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2849:23:57;:55;;;;;;;;;;;;;;;2928:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2914:11:57;:31;;;;;;;;;;;;;3042:23;;2969:107;;3008:11;;;;3042:23;;2969:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2969:107:57;;;;;;;;;;;;;;;-1:-1:-1;2955:11:57;:121;;;;;;;;;;;;;;;3086:21;:19;:21::i;:::-;3174:12;;3200:24;;3143:91;;3174:12;;;3143:17;:91::i;:::-;3117:23;:117;;;;;;;;;;;;;;;1808:1433::o;321:38:1:-;250:64;321:38;:::o;3247:554:57:-;3295:13;;3341:11;;3375:21;;3295:112;;;;;;:13;3341:11;;;3295:112;;;;3375:21;;;3295:112;;;;;:13;;;;;:24;;:112;;;;;:13;;:112;;;;;;;:13;;:112;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3417:12:57;;3462:13;;3498:21;;3417:113;;;;;;:12;3462:13;;;3417:113;;;;3498:21;;;3417:113;;;;;:12;;;;;-1:-1:-1;3417:23:57;;-1:-1:-1;3417:113:57;;;;;:12;;:113;;;;;;;:12;;:113;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3607:13:57;;3647:12;;3607:54;;;;;;:13;3647:12;;;3607:54;;;;;;:13;;;;;-1:-1:-1;3607:31:57;;-1:-1:-1;3607:54:57;;;;;:13;;:54;;;;;;;:13;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3671:21:57;;3709:8;;3671:48;;;;;;:21;3709:8;;;3671:48;;;;;;:21;;;;;-1:-1:-1;3671:29:57;;-1:-1:-1;3671:48:57;;;;;:21;;:48;;;;;;;:21;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3729:12:57;;3761;;3775:18;;3729:65;;;;;;3761:12;;;;3729:65;;;;;;;;;;;;:12;;;;;-1:-1:-1;3729:31:57;;-1:-1:-1;3729:65:57;;;;;:12;;:65;;;;;;;;:12;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3247:554::o;1819:584:0:-;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:0;;;;;;;1896:14;;1869:528;1941:17;1984:16;:14;:16::i;:::-;1980:374;;;2196:43;;;1671:64;2196:43;;;;;;;2221:17;2196:43;;;;;;;;;;;;;1679:55;2196:43;;;;;2086:175;;;;;;;;;2023:20;;1671:64;;2135:34;;2196:43;2086:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2047:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;;;;-1:-1:-1;2312:27:0;;-1:-1:-1;;1980:374:0;2374:12;-1:-1:-1;1869:528:0;1819:584;:::o;170:28:1:-;;;;;;;;;:::o;1572:26:0:-;;;;;;:::o;3615:277::-;3683:1;3678:6;;:1;:6;;;3674:212;;3705:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3768:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3869:6;:4;:6::i;:::-;3615:277;;:::o;999:129:75:-;1097:23;;;999:129::o;2840:242:0:-;2990:42;2978:55;3059:16;;2840:242;:::o;2410:424::-;2449:16;:14;:16::i;:::-;2445:359;;;2645:67;;;1671:64;2645:67;;;;;;;2670:17;2645:67;;;;2705:4;1679:55;2645:67;;;;;;;;;;;;;;;;;;;;;;;2534:196;;;;;;;;;2482:11;;1671:64;;2579:43;;2645:67;2534:196;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2499:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2445:359:0;2813:7;:14;;;;;;;;2410:424::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "IS_SCRIPT()": "f8ccbf47",
    "IS_TEST()": "fa7626d4",
    "createRemoteToken(uint32,bytes32)": "055c21e9",
    "failed()": "ba414fa6",
    "initializeContracts()": "b45036f7",
    "setUp()": "0a9254e4",
    "vm()": "3a768463"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/test/utils/BridgeTest.sol",
    "id": 42468,
    "exportedSymbols": {
      "BridgeTest": [
        42467
      ],
      "BridgeToken": [
        31661
      ],
      "DSTest": [
        1786
      ],
      "ERC20Mock": [
        26936
      ],
      "EthereumBridgeRouterHarness": [
        42033
      ],
      "MockAccountant": [
        42565
      ],
      "MockHome": [
        42717
      ],
      "Script": [
        2021
      ],
      "StdStorage": [
        5000
      ],
      "Test": [
        4902
      ],
      "TokenRegistry": [
        32603
      ],
      "TokenRegistryHarness": [
        42156
      ],
      "TypeCasts": [
        46345
      ],
      "UpgradeBeacon": [
        46427
      ],
      "UpgradeBeaconController": [
        46484
      ],
      "Vm": [
        6909
      ],
      "XAppConnectionManager": [
        45020
      ],
      "console": [
        14973
      ],
      "console2": [
        23037
      ],
      "stdError": [
        4972
      ],
      "stdJson": [
        2380
      ],
      "stdMath": [
        6215
      ],
      "stdStorage": [
        6076
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:4631:57",
    "nodes": [
      {
        "id": 42158,
        "nodeType": "PragmaDirective",
        "src": "46:22:57",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 42160,
        "nodeType": "ImportDirective",
        "src": "89:40:57",
        "absolutePath": "packages/contracts-bridge/contracts/test/utils/MockHome.sol",
        "file": "./MockHome.sol",
        "scope": 42468,
        "sourceUnit": 42718,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42159,
              "name": "MockHome",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "97:8:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42162,
        "nodeType": "ImportDirective",
        "src": "130:52:57",
        "absolutePath": "packages/contracts-bridge/contracts/test/utils/MockAccountant.sol",
        "file": "./MockAccountant.sol",
        "scope": 42468,
        "sourceUnit": 42566,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42161,
              "name": "MockAccountant",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "138:14:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42164,
        "nodeType": "ImportDirective",
        "src": "204:79:57",
        "absolutePath": "packages/contracts-bridge/contracts/test/harness/BridgeRouterHarness.sol",
        "file": "../harness/BridgeRouterHarness.sol",
        "scope": 42468,
        "sourceUnit": 42034,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42163,
              "name": "EthereumBridgeRouterHarness",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "212:27:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42166,
        "nodeType": "ImportDirective",
        "src": "284:73:57",
        "absolutePath": "packages/contracts-bridge/contracts/test/harness/TokenRegistryHarness.sol",
        "file": "../harness/TokenRegistryHarness.sol",
        "scope": 42468,
        "sourceUnit": 42157,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42165,
              "name": "TokenRegistryHarness",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "292:20:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42168,
        "nodeType": "ImportDirective",
        "src": "358:54:57",
        "absolutePath": "packages/contracts-bridge/contracts/TokenRegistry.sol",
        "file": "../../TokenRegistry.sol",
        "scope": 42468,
        "sourceUnit": 32604,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42167,
              "name": "TokenRegistry",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "366:13:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42170,
        "nodeType": "ImportDirective",
        "src": "413:50:57",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeToken.sol",
        "file": "../../BridgeToken.sol",
        "scope": 42468,
        "sourceUnit": 31662,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42169,
              "name": "BridgeToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "421:11:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42172,
        "nodeType": "ImportDirective",
        "src": "464:70:57",
        "absolutePath": "node_modules/@openzeppelin/contracts/mocks/ERC20Mock.sol",
        "file": "@openzeppelin/contracts/mocks/ERC20Mock.sol",
        "scope": 42468,
        "sourceUnit": 26937,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42171,
              "name": "ERC20Mock",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "472:9:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42174,
        "nodeType": "ImportDirective",
        "src": "557:92:57",
        "absolutePath": "packages/contracts-core/contracts/upgrade/UpgradeBeacon.sol",
        "file": "@nomad-xyz/contracts-core/contracts/upgrade/UpgradeBeacon.sol",
        "scope": 42468,
        "sourceUnit": 46428,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42173,
              "name": "UpgradeBeacon",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "565:13:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42176,
        "nodeType": "ImportDirective",
        "src": "650:112:57",
        "absolutePath": "packages/contracts-core/contracts/upgrade/UpgradeBeaconController.sol",
        "file": "@nomad-xyz/contracts-core/contracts/upgrade/UpgradeBeaconController.sol",
        "scope": 42468,
        "sourceUnit": 46485,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42175,
              "name": "UpgradeBeaconController",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "658:23:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42178,
        "nodeType": "ImportDirective",
        "src": "791:100:57",
        "absolutePath": "packages/contracts-core/contracts/XAppConnectionManager.sol",
        "file": "@nomad-xyz/contracts-core/contracts/XAppConnectionManager.sol",
        "scope": 42468,
        "sourceUnit": 45021,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42177,
              "name": "XAppConnectionManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "799:21:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42180,
        "nodeType": "ImportDirective",
        "src": "892:88:57",
        "absolutePath": "packages/contracts-core/contracts/XAppConnectionManager.sol",
        "file": "@nomad-xyz/contracts-core/contracts/XAppConnectionManager.sol",
        "scope": 42468,
        "sourceUnit": 45021,
        "symbolAliases": [
          {
            "foreign": {
              "id": 42179,
              "name": "TypeCasts",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "900:9:57",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 42181,
        "nodeType": "ImportDirective",
        "src": "982:28:57",
        "absolutePath": "lib/forge-std/src/Test.sol",
        "file": "forge-std/Test.sol",
        "scope": 42468,
        "sourceUnit": 6216,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 42467,
        "nodeType": "ContractDefinition",
        "src": "1012:3664:57",
        "nodes": [
          {
            "id": 42185,
            "nodeType": "VariableDeclaration",
            "src": "1069:21:57",
            "constant": false,
            "mutability": "mutable",
            "name": "mockUpdaterPK",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 42184,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1069:7:57",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42187,
            "nodeType": "VariableDeclaration",
            "src": "1096:19:57",
            "constant": false,
            "mutability": "mutable",
            "name": "mockUpdater",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 42186,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1096:7:57",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42189,
            "nodeType": "VariableDeclaration",
            "src": "1121:18:57",
            "constant": false,
            "mutability": "mutable",
            "name": "bridgeUser",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 42188,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1121:7:57",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42191,
            "nodeType": "VariableDeclaration",
            "src": "1145:18:57",
            "constant": false,
            "mutability": "mutable",
            "name": "localDomain",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 42190,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1145:6:57",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42193,
            "nodeType": "VariableDeclaration",
            "src": "1169:29:57",
            "constant": false,
            "mutability": "mutable",
            "name": "bridgeUserTokenAmount",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 42192,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1169:7:57",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42195,
            "nodeType": "VariableDeclaration",
            "src": "1229:26:57",
            "constant": false,
            "mutability": "mutable",
            "name": "remoteBridgeRouter",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 42194,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1229:7:57",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42197,
            "nodeType": "VariableDeclaration",
            "src": "1261:19:57",
            "constant": false,
            "mutability": "mutable",
            "name": "remoteDomain",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 42196,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1261:6:57",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42199,
            "nodeType": "VariableDeclaration",
            "src": "1287:29:57",
            "constant": false,
            "mutability": "mutable",
            "name": "mockAccountant",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MockAccountant_$42565",
              "typeString": "contract MockAccountant"
            },
            "typeName": {
              "id": 42198,
              "name": "MockAccountant",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 42565,
              "src": "1287:14:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MockAccountant_$42565",
                "typeString": "contract MockAccountant"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42201,
            "nodeType": "VariableDeclaration",
            "src": "1322:17:57",
            "constant": false,
            "mutability": "mutable",
            "name": "mockHome",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_MockHome_$42717",
              "typeString": "contract MockHome"
            },
            "typeName": {
              "id": 42200,
              "name": "MockHome",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 42717,
              "src": "1322:8:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MockHome_$42717",
                "typeString": "contract MockHome"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42203,
            "nodeType": "VariableDeclaration",
            "src": "1345:40:57",
            "constant": false,
            "mutability": "mutable",
            "name": "bridgeRouter",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
              "typeString": "contract EthereumBridgeRouterHarness"
            },
            "typeName": {
              "id": 42202,
              "name": "EthereumBridgeRouterHarness",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 42033,
              "src": "1345:27:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                "typeString": "contract EthereumBridgeRouterHarness"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42205,
            "nodeType": "VariableDeclaration",
            "src": "1391:43:57",
            "constant": false,
            "mutability": "mutable",
            "name": "xAppConnectionManager",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
              "typeString": "contract XAppConnectionManager"
            },
            "typeName": {
              "id": 42204,
              "name": "XAppConnectionManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 45020,
              "src": "1391:21:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                "typeString": "contract XAppConnectionManager"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42207,
            "nodeType": "VariableDeclaration",
            "src": "1440:47:57",
            "constant": false,
            "mutability": "mutable",
            "name": "upgradeBeaconController",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_UpgradeBeaconController_$46484",
              "typeString": "contract UpgradeBeaconController"
            },
            "typeName": {
              "id": 42206,
              "name": "UpgradeBeaconController",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 46484,
              "src": "1440:23:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UpgradeBeaconController_$46484",
                "typeString": "contract UpgradeBeaconController"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42209,
            "nodeType": "VariableDeclaration",
            "src": "1493:25:57",
            "constant": false,
            "mutability": "mutable",
            "name": "tokenBeacon",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_UpgradeBeacon_$46427",
              "typeString": "contract UpgradeBeacon"
            },
            "typeName": {
              "id": 42208,
              "name": "UpgradeBeacon",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 46427,
              "src": "1493:13:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UpgradeBeacon_$46427",
                "typeString": "contract UpgradeBeacon"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42211,
            "nodeType": "VariableDeclaration",
            "src": "1576:34:57",
            "constant": false,
            "mutability": "mutable",
            "name": "tokenRegistry",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
              "typeString": "contract TokenRegistryHarness"
            },
            "typeName": {
              "id": 42210,
              "name": "TokenRegistryHarness",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 42156,
              "src": "1576:20:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                "typeString": "contract TokenRegistryHarness"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42213,
            "nodeType": "VariableDeclaration",
            "src": "1616:23:57",
            "constant": false,
            "mutability": "mutable",
            "name": "bridgeToken",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_BridgeToken_$31661",
              "typeString": "contract BridgeToken"
            },
            "typeName": {
              "id": 42212,
              "name": "BridgeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31661,
              "src": "1616:11:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BridgeToken_$31661",
                "typeString": "contract BridgeToken"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42215,
            "nodeType": "VariableDeclaration",
            "src": "1706:20:57",
            "constant": false,
            "mutability": "mutable",
            "name": "localToken",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20Mock_$26936",
              "typeString": "contract ERC20Mock"
            },
            "typeName": {
              "id": 42214,
              "name": "ERC20Mock",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 26936,
              "src": "1706:9:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                "typeString": "contract ERC20Mock"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42217,
            "nodeType": "VariableDeclaration",
            "src": "1732:31:57",
            "constant": false,
            "mutability": "mutable",
            "name": "remoteTokenLocalAddress",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 42216,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1732:7:57",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42219,
            "nodeType": "VariableDeclaration",
            "src": "1769:32:57",
            "constant": false,
            "mutability": "mutable",
            "name": "remoteTokenRemoteAddress",
            "scope": 42467,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 42218,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1769:7:57",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 42354,
            "nodeType": "FunctionDefinition",
            "src": "1808:1433:57",
            "body": {
              "id": 42353,
              "nodeType": "Block",
              "src": "1840:1401:57",
              "statements": [
                {
                  "expression": {
                    "id": 42224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42222,
                      "name": "mockUpdaterPK",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42185,
                      "src": "2023:13:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "343230",
                      "id": 42223,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2039:3:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_420_by_1",
                        "typeString": "int_const 420"
                      },
                      "value": "420"
                    },
                    "src": "2023:19:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 42225,
                  "nodeType": "ExpressionStatement",
                  "src": "2023:19:57"
                },
                {
                  "expression": {
                    "id": 42231,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42226,
                      "name": "mockUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42187,
                      "src": "2052:11:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 42229,
                          "name": "mockUpdaterPK",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42185,
                          "src": "2074:13:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 42227,
                          "name": "vm",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1816,
                          "src": "2066:2:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Vm_$6909",
                            "typeString": "contract Vm"
                          }
                        },
                        "id": 42228,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6287,
                        "src": "2066:7:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) external returns (address)"
                        }
                      },
                      "id": 42230,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2066:22:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2052:36:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 42232,
                  "nodeType": "ExpressionStatement",
                  "src": "2052:36:57"
                },
                {
                  "expression": {
                    "id": 42238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42233,
                      "name": "bridgeUser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42189,
                      "src": "2098:10:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "39333035",
                          "id": 42236,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2119:4:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_9305_by_1",
                            "typeString": "int_const 9305"
                          },
                          "value": "9305"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_9305_by_1",
                            "typeString": "int_const 9305"
                          }
                        ],
                        "expression": {
                          "id": 42234,
                          "name": "vm",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1816,
                          "src": "2111:2:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Vm_$6909",
                            "typeString": "contract Vm"
                          }
                        },
                        "id": 42235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6287,
                        "src": "2111:7:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                          "typeString": "function (uint256) external returns (address)"
                        }
                      },
                      "id": 42237,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2111:13:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2098:26:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 42239,
                  "nodeType": "ExpressionStatement",
                  "src": "2098:26:57"
                },
                {
                  "expression": {
                    "id": 42248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42240,
                      "name": "remoteBridgeRouter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42195,
                      "src": "2134:18:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "3939313233",
                              "id": 42245,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2190:5:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_99123_by_1",
                                "typeString": "int_const 99123"
                              },
                              "value": "99123"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_99123_by_1",
                                "typeString": "int_const 99123"
                              }
                            ],
                            "expression": {
                              "id": 42243,
                              "name": "vm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1816,
                              "src": "2182:2:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Vm_$6909",
                                "typeString": "contract Vm"
                              }
                            },
                            "id": 42244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "addr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6287,
                            "src": "2182:7:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) external returns (address)"
                            }
                          },
                          "id": 42246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2182:14:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 42241,
                          "name": "TypeCasts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 46345,
                          "src": "2155:9:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                            "typeString": "type(library TypeCasts)"
                          }
                        },
                        "id": 42242,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addressToBytes32",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46325,
                        "src": "2155:26:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                          "typeString": "function (address) pure returns (bytes32)"
                        }
                      },
                      "id": 42247,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2155:42:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2134:63:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 42249,
                  "nodeType": "ExpressionStatement",
                  "src": "2134:63:57"
                },
                {
                  "expression": {
                    "id": 42252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42250,
                      "name": "bridgeUserTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42193,
                      "src": "2207:21:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "3130303030",
                      "id": 42251,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2231:5:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10000_by_1",
                        "typeString": "int_const 10000"
                      },
                      "value": "10000"
                    },
                    "src": "2207:29:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 42253,
                  "nodeType": "ExpressionStatement",
                  "src": "2207:29:57"
                },
                {
                  "expression": {
                    "id": 42258,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42254,
                      "name": "mockAccountant",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42199,
                      "src": "2246:14:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockAccountant_$42565",
                        "typeString": "contract MockAccountant"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 42256,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2263:18:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_MockAccountant_$42565_$",
                          "typeString": "function () returns (contract MockAccountant)"
                        },
                        "typeName": {
                          "id": 42255,
                          "name": "MockAccountant",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 42565,
                          "src": "2267:14:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MockAccountant_$42565",
                            "typeString": "contract MockAccountant"
                          }
                        }
                      },
                      "id": 42257,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2263:20:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockAccountant_$42565",
                        "typeString": "contract MockAccountant"
                      }
                    },
                    "src": "2246:37:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockAccountant_$42565",
                      "typeString": "contract MockAccountant"
                    }
                  },
                  "id": 42259,
                  "nodeType": "ExpressionStatement",
                  "src": "2246:37:57"
                },
                {
                  "expression": {
                    "id": 42268,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42260,
                      "name": "localToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42215,
                      "src": "2294:10:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                        "typeString": "contract ERC20Mock"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "hexValue": "46616b65",
                          "id": 42263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2334:6:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_127fa09a2fcbb8d7f72a288d93f869376ca86af36d8899041c5023a8051486d1",
                            "typeString": "literal_string \"Fake\""
                          },
                          "value": "Fake"
                        },
                        {
                          "hexValue": "464b",
                          "id": 42264,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2354:4:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_874e60ef5cb9d7b73c2ccb638038238066f82463431fbff66296a004fa0187c0",
                            "typeString": "literal_string \"FK\""
                          },
                          "value": "FK"
                        },
                        {
                          "id": 42265,
                          "name": "bridgeUser",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42189,
                          "src": "2372:10:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 42266,
                          "name": "bridgeUserTokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42193,
                          "src": "2396:21:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_stringliteral_127fa09a2fcbb8d7f72a288d93f869376ca86af36d8899041c5023a8051486d1",
                            "typeString": "literal_string \"Fake\""
                          },
                          {
                            "typeIdentifier": "t_stringliteral_874e60ef5cb9d7b73c2ccb638038238066f82463431fbff66296a004fa0187c0",
                            "typeString": "literal_string \"FK\""
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 42262,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2307:13:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_payable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_address_$_t_uint256_$returns$_t_contract$_ERC20Mock_$26936_$",
                          "typeString": "function (string memory,string memory,address,uint256) payable returns (contract ERC20Mock)"
                        },
                        "typeName": {
                          "id": 42261,
                          "name": "ERC20Mock",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 26936,
                          "src": "2311:9:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                            "typeString": "contract ERC20Mock"
                          }
                        }
                      },
                      "id": 42267,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2307:120:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                        "typeString": "contract ERC20Mock"
                      }
                    },
                    "src": "2294:133:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Mock_$26936",
                      "typeString": "contract ERC20Mock"
                    }
                  },
                  "id": 42269,
                  "nodeType": "ExpressionStatement",
                  "src": "2294:133:57"
                },
                {
                  "expression": {
                    "id": 42272,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42270,
                      "name": "localDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42191,
                      "src": "2437:11:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "31353030",
                      "id": 42271,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2451:4:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1500_by_1",
                        "typeString": "int_const 1500"
                      },
                      "value": "1500"
                    },
                    "src": "2437:18:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 42273,
                  "nodeType": "ExpressionStatement",
                  "src": "2437:18:57"
                },
                {
                  "expression": {
                    "id": 42276,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42274,
                      "name": "remoteDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42197,
                      "src": "2465:12:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "33303030",
                      "id": 42275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2480:4:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_3000_by_1",
                        "typeString": "int_const 3000"
                      },
                      "value": "3000"
                    },
                    "src": "2465:19:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 42277,
                  "nodeType": "ExpressionStatement",
                  "src": "2465:19:57"
                },
                {
                  "expression": {
                    "id": 42286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42278,
                      "name": "remoteTokenRemoteAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42219,
                      "src": "2494:24:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "hexValue": "307842454546",
                              "id": 42283,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2556:6:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_48879_by_1",
                                "typeString": "int_const 48879"
                              },
                              "value": "0xBEEF"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_48879_by_1",
                                "typeString": "int_const 48879"
                              }
                            ],
                            "id": 42282,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2548:7:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 42281,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2548:7:57",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 42284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2548:15:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        ],
                        "expression": {
                          "id": 42279,
                          "name": "TypeCasts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 46345,
                          "src": "2521:9:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_TypeCasts_$46345_$",
                            "typeString": "type(library TypeCasts)"
                          }
                        },
                        "id": 42280,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "addressToBytes32",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46325,
                        "src": "2521:26:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$",
                          "typeString": "function (address) pure returns (bytes32)"
                        }
                      },
                      "id": 42285,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2521:43:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2494:70:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 42287,
                  "nodeType": "ExpressionStatement",
                  "src": "2494:70:57"
                },
                {
                  "expression": {
                    "id": 42293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42288,
                      "name": "mockHome",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42201,
                      "src": "2574:8:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockHome_$42717",
                        "typeString": "contract MockHome"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 42291,
                          "name": "localDomain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42191,
                          "src": "2598:11:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        ],
                        "id": 42290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2585:12:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$_t_uint32_$returns$_t_contract$_MockHome_$42717_$",
                          "typeString": "function (uint32) returns (contract MockHome)"
                        },
                        "typeName": {
                          "id": 42289,
                          "name": "MockHome",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 42717,
                          "src": "2589:8:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_MockHome_$42717",
                            "typeString": "contract MockHome"
                          }
                        }
                      },
                      "id": 42292,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2585:25:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_MockHome_$42717",
                        "typeString": "contract MockHome"
                      }
                    },
                    "src": "2574:36:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MockHome_$42717",
                      "typeString": "contract MockHome"
                    }
                  },
                  "id": 42294,
                  "nodeType": "ExpressionStatement",
                  "src": "2574:36:57"
                },
                {
                  "expression": {
                    "id": 42303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42295,
                      "name": "bridgeRouter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42203,
                      "src": "2655:12:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                        "typeString": "contract EthereumBridgeRouterHarness"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 42300,
                              "name": "mockAccountant",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 42199,
                              "src": "2710:14:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_MockAccountant_$42565",
                                "typeString": "contract MockAccountant"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_MockAccountant_$42565",
                                "typeString": "contract MockAccountant"
                              }
                            ],
                            "id": 42299,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2702:7:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 42298,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2702:7:57",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 42301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2702:23:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 42297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2670:31:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$_t_address_$returns$_t_contract$_EthereumBridgeRouterHarness_$42033_$",
                          "typeString": "function (address) returns (contract EthereumBridgeRouterHarness)"
                        },
                        "typeName": {
                          "id": 42296,
                          "name": "EthereumBridgeRouterHarness",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 42033,
                          "src": "2674:27:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                            "typeString": "contract EthereumBridgeRouterHarness"
                          }
                        }
                      },
                      "id": 42302,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2670:56:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                        "typeString": "contract EthereumBridgeRouterHarness"
                      }
                    },
                    "src": "2655:71:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                      "typeString": "contract EthereumBridgeRouterHarness"
                    }
                  },
                  "id": 42304,
                  "nodeType": "ExpressionStatement",
                  "src": "2655:71:57"
                },
                {
                  "expression": {
                    "id": 42309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42305,
                      "name": "tokenRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42211,
                      "src": "2736:13:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                        "typeString": "contract TokenRegistryHarness"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 42307,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2752:24:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_TokenRegistryHarness_$42156_$",
                          "typeString": "function () returns (contract TokenRegistryHarness)"
                        },
                        "typeName": {
                          "id": 42306,
                          "name": "TokenRegistryHarness",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 42156,
                          "src": "2756:20:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                            "typeString": "contract TokenRegistryHarness"
                          }
                        }
                      },
                      "id": 42308,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2752:26:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                        "typeString": "contract TokenRegistryHarness"
                      }
                    },
                    "src": "2736:42:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                      "typeString": "contract TokenRegistryHarness"
                    }
                  },
                  "id": 42310,
                  "nodeType": "ExpressionStatement",
                  "src": "2736:42:57"
                },
                {
                  "expression": {
                    "id": 42315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42311,
                      "name": "xAppConnectionManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42205,
                      "src": "2788:21:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                        "typeString": "contract XAppConnectionManager"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 42313,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2812:25:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_XAppConnectionManager_$45020_$",
                          "typeString": "function () returns (contract XAppConnectionManager)"
                        },
                        "typeName": {
                          "id": 42312,
                          "name": "XAppConnectionManager",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 45020,
                          "src": "2816:21:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                            "typeString": "contract XAppConnectionManager"
                          }
                        }
                      },
                      "id": 42314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2812:27:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                        "typeString": "contract XAppConnectionManager"
                      }
                    },
                    "src": "2788:51:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                      "typeString": "contract XAppConnectionManager"
                    }
                  },
                  "id": 42316,
                  "nodeType": "ExpressionStatement",
                  "src": "2788:51:57"
                },
                {
                  "expression": {
                    "id": 42321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42317,
                      "name": "upgradeBeaconController",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42207,
                      "src": "2849:23:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_UpgradeBeaconController_$46484",
                        "typeString": "contract UpgradeBeaconController"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 42319,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2875:27:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_UpgradeBeaconController_$46484_$",
                          "typeString": "function () returns (contract UpgradeBeaconController)"
                        },
                        "typeName": {
                          "id": 42318,
                          "name": "UpgradeBeaconController",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 46484,
                          "src": "2879:23:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UpgradeBeaconController_$46484",
                            "typeString": "contract UpgradeBeaconController"
                          }
                        }
                      },
                      "id": 42320,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2875:29:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_UpgradeBeaconController_$46484",
                        "typeString": "contract UpgradeBeaconController"
                      }
                    },
                    "src": "2849:55:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_UpgradeBeaconController_$46484",
                      "typeString": "contract UpgradeBeaconController"
                    }
                  },
                  "id": 42322,
                  "nodeType": "ExpressionStatement",
                  "src": "2849:55:57"
                },
                {
                  "expression": {
                    "id": 42327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42323,
                      "name": "bridgeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42213,
                      "src": "2914:11:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_BridgeToken_$31661",
                        "typeString": "contract BridgeToken"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 42325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2928:15:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$__$returns$_t_contract$_BridgeToken_$31661_$",
                          "typeString": "function () returns (contract BridgeToken)"
                        },
                        "typeName": {
                          "id": 42324,
                          "name": "BridgeToken",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 31661,
                          "src": "2932:11:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_BridgeToken_$31661",
                            "typeString": "contract BridgeToken"
                          }
                        }
                      },
                      "id": 42326,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2928:17:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_BridgeToken_$31661",
                        "typeString": "contract BridgeToken"
                      }
                    },
                    "src": "2914:31:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BridgeToken_$31661",
                      "typeString": "contract BridgeToken"
                    }
                  },
                  "id": 42328,
                  "nodeType": "ExpressionStatement",
                  "src": "2914:31:57"
                },
                {
                  "expression": {
                    "id": 42341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42329,
                      "name": "tokenBeacon",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42209,
                      "src": "2955:11:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_UpgradeBeacon_$46427",
                        "typeString": "contract UpgradeBeacon"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 42334,
                              "name": "bridgeToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 42213,
                              "src": "3008:11:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_BridgeToken_$31661",
                                "typeString": "contract BridgeToken"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_BridgeToken_$31661",
                                "typeString": "contract BridgeToken"
                              }
                            ],
                            "id": 42333,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3000:7:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 42332,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3000:7:57",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 42335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3000:20:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "arguments": [
                            {
                              "id": 42338,
                              "name": "upgradeBeaconController",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 42207,
                              "src": "3042:23:57",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_UpgradeBeaconController_$46484",
                                "typeString": "contract UpgradeBeaconController"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_UpgradeBeaconController_$46484",
                                "typeString": "contract UpgradeBeaconController"
                              }
                            ],
                            "id": 42337,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3034:7:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 42336,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3034:7:57",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 42339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3034:32:57",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 42331,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "2969:17:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_UpgradeBeacon_$46427_$",
                          "typeString": "function (address,address) returns (contract UpgradeBeacon)"
                        },
                        "typeName": {
                          "id": 42330,
                          "name": "UpgradeBeacon",
                          "nodeType": "UserDefinedTypeName",
                          "referencedDeclaration": 46427,
                          "src": "2973:13:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_UpgradeBeacon_$46427",
                            "typeString": "contract UpgradeBeacon"
                          }
                        }
                      },
                      "id": 42340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2969:107:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_UpgradeBeacon_$46427",
                        "typeString": "contract UpgradeBeacon"
                      }
                    },
                    "src": "2955:121:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_UpgradeBeacon_$46427",
                      "typeString": "contract UpgradeBeacon"
                    }
                  },
                  "id": 42342,
                  "nodeType": "ExpressionStatement",
                  "src": "2955:121:57"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 42343,
                      "name": "initializeContracts",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42409,
                      "src": "3086:19:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 42344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3086:21:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42345,
                  "nodeType": "ExpressionStatement",
                  "src": "3086:21:57"
                },
                {
                  "expression": {
                    "id": 42351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 42346,
                      "name": "remoteTokenLocalAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42217,
                      "src": "3117:23:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 42348,
                          "name": "remoteDomain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42197,
                          "src": "3174:12:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "id": 42349,
                          "name": "remoteTokenRemoteAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42219,
                          "src": "3200:24:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 42347,
                        "name": "createRemoteToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42466,
                        "src": "3143:17:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (uint32,bytes32) returns (address)"
                        }
                      },
                      "id": 42350,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3143:91:57",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3117:117:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 42352,
                  "nodeType": "ExpressionStatement",
                  "src": "3117:117:57"
                }
              ]
            },
            "functionSelector": "0a9254e4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setUp",
            "parameters": {
              "id": 42220,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1822:2:57"
            },
            "returnParameters": {
              "id": 42221,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1840:0:57"
            },
            "scope": 42467,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "id": 42409,
            "nodeType": "FunctionDefinition",
            "src": "3247:554:57",
            "body": {
              "id": 42408,
              "nodeType": "Block",
              "src": "3285:516:57",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 42362,
                            "name": "tokenBeacon",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42209,
                            "src": "3341:11:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_UpgradeBeacon_$46427",
                              "typeString": "contract UpgradeBeacon"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_UpgradeBeacon_$46427",
                              "typeString": "contract UpgradeBeacon"
                            }
                          ],
                          "id": 42361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3333:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 42360,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3333:7:57",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42363,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3333:20:57",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 42366,
                            "name": "xAppConnectionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42205,
                            "src": "3375:21:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                              "typeString": "contract XAppConnectionManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                              "typeString": "contract XAppConnectionManager"
                            }
                          ],
                          "id": 42365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3367:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 42364,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3367:7:57",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42367,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3367:30:57",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 42357,
                        "name": "tokenRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42211,
                        "src": "3295:13:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                          "typeString": "contract TokenRegistryHarness"
                        }
                      },
                      "id": 42359,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 32062,
                      "src": "3295:24:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address) external"
                      }
                    },
                    "id": 42368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3295:112:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42369,
                  "nodeType": "ExpressionStatement",
                  "src": "3295:112:57"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 42375,
                            "name": "tokenRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42211,
                            "src": "3462:13:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                              "typeString": "contract TokenRegistryHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                              "typeString": "contract TokenRegistryHarness"
                            }
                          ],
                          "id": 42374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3454:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 42373,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3454:7:57",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42376,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3454:22:57",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 42379,
                            "name": "xAppConnectionManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42205,
                            "src": "3498:21:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                              "typeString": "contract XAppConnectionManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                              "typeString": "contract XAppConnectionManager"
                            }
                          ],
                          "id": 42378,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3490:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 42377,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3490:7:57",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42380,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3490:30:57",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 42370,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "3417:12:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 42372,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 30411,
                      "src": "3417:23:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address) external"
                      }
                    },
                    "id": 42381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3417:113:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42382,
                  "nodeType": "ExpressionStatement",
                  "src": "3417:113:57"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 42388,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "3647:12:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 42387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3639:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 42386,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3639:7:57",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42389,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3639:21:57",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "id": 42383,
                        "name": "tokenRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42211,
                        "src": "3607:13:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                          "typeString": "contract TokenRegistryHarness"
                        }
                      },
                      "id": 42385,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23163,
                      "src": "3607:31:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 42390,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3607:54:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42391,
                  "nodeType": "ExpressionStatement",
                  "src": "3607:54:57"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 42397,
                            "name": "mockHome",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42201,
                            "src": "3709:8:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_MockHome_$42717",
                              "typeString": "contract MockHome"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_MockHome_$42717",
                              "typeString": "contract MockHome"
                            }
                          ],
                          "id": 42396,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3701:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 42395,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3701:7:57",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42398,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3701:17:57",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 42392,
                        "name": "xAppConnectionManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42205,
                        "src": "3671:21:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_XAppConnectionManager_$45020",
                          "typeString": "contract XAppConnectionManager"
                        }
                      },
                      "id": 42394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setHome",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 44763,
                      "src": "3671:29:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 42399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3671:48:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42400,
                  "nodeType": "ExpressionStatement",
                  "src": "3671:48:57"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 42404,
                        "name": "remoteDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42197,
                        "src": "3761:12:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 42405,
                        "name": "remoteBridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42195,
                        "src": "3775:18:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 42401,
                        "name": "bridgeRouter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42203,
                        "src": "3729:12:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                          "typeString": "contract EthereumBridgeRouterHarness"
                        }
                      },
                      "id": 42403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enrollRemoteRouter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 46706,
                      "src": "3729:31:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$__$",
                        "typeString": "function (uint32,bytes32) external"
                      }
                    },
                    "id": 42406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3729:65:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42407,
                  "nodeType": "ExpressionStatement",
                  "src": "3729:65:57"
                }
              ]
            },
            "functionSelector": "b45036f7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initializeContracts",
            "parameters": {
              "id": 42355,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3275:2:57"
            },
            "returnParameters": {
              "id": 42356,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3285:0:57"
            },
            "scope": 42467,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 42466,
            "nodeType": "FunctionDefinition",
            "src": "4037:637:57",
            "body": {
              "id": 42465,
              "nodeType": "Block",
              "src": "4147:527:57",
              "statements": [
                {
                  "assignments": [
                    42420
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 42420,
                      "mutability": "mutable",
                      "name": "localAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 42465,
                      "src": "4157:20:57",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 42419,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4157:7:57",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 42426,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 42423,
                        "name": "domain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42412,
                        "src": "4227:6:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 42424,
                        "name": "remoteAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42414,
                        "src": "4247:13:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 42421,
                        "name": "tokenRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42211,
                        "src": "4180:13:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_TokenRegistryHarness_$42156",
                          "typeString": "contract TokenRegistryHarness"
                        }
                      },
                      "id": 42422,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "exposed_deployToken",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42129,
                      "src": "4180:33:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (uint32,bytes32) external returns (address)"
                      }
                    },
                    "id": 42425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4180:90:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4157:113:57"
                },
                {
                  "assignments": [
                    42428
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 42428,
                      "mutability": "mutable",
                      "name": "remoteToken",
                      "nodeType": "VariableDeclaration",
                      "scope": 42465,
                      "src": "4396:23:57",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_BridgeToken_$31661",
                        "typeString": "contract BridgeToken"
                      },
                      "typeName": {
                        "id": 42427,
                        "name": "BridgeToken",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 31661,
                        "src": "4396:11:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_BridgeToken_$31661",
                          "typeString": "contract BridgeToken"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 42432,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 42430,
                        "name": "localAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42420,
                        "src": "4434:12:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 42429,
                      "name": "BridgeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31661,
                      "src": "4422:11:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_BridgeToken_$31661_$",
                        "typeString": "type(contract BridgeToken)"
                      }
                    },
                    "id": 42431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4422:25:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_BridgeToken_$31661",
                      "typeString": "contract BridgeToken"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4396:51:57"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 42434,
                            "name": "remoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42428,
                            "src": "4466:11:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          },
                          "id": 42435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 23099,
                          "src": "4466:17:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 42436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4466:19:57",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 42439,
                            "name": "bridgeRouter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42203,
                            "src": "4495:12:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EthereumBridgeRouterHarness_$42033",
                              "typeString": "contract EthereumBridgeRouterHarness"
                            }
                          ],
                          "id": 42438,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4487:7:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 42437,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "4487:7:57",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4487:21:57",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 42433,
                      "name": "assertEq",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3136,
                        3161,
                        3174,
                        3190,
                        3232,
                        3274,
                        3316,
                        3353,
                        3390,
                        3427,
                        320,
                        345,
                        375,
                        400,
                        459,
                        484,
                        514,
                        539,
                        1639,
                        1674
                      ],
                      "referencedDeclaration": 320,
                      "src": "4457:8:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 42441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4457:52:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42442,
                  "nodeType": "ExpressionStatement",
                  "src": "4457:52:57"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 42446,
                            "name": "remoteToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42428,
                            "src": "4533:11:57",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_BridgeToken_$31661",
                              "typeString": "contract BridgeToken"
                            }
                          },
                          "id": 42447,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 23099,
                          "src": "4533:17:57",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 42448,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4533:19:57",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 42443,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4519:2:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 42445,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "startPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6445,
                      "src": "4519:13:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 42449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4519:34:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42450,
                  "nodeType": "ExpressionStatement",
                  "src": "4519:34:57"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 42454,
                        "name": "bridgeUser",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42189,
                        "src": "4580:10:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 42455,
                        "name": "bridgeUserTokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42193,
                        "src": "4592:21:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 42451,
                        "name": "remoteToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42428,
                        "src": "4563:11:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_BridgeToken_$31661",
                          "typeString": "contract BridgeToken"
                        }
                      },
                      "id": 42453,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 31355,
                      "src": "4563:16:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 42456,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4563:51:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42457,
                  "nodeType": "ExpressionStatement",
                  "src": "4563:51:57"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 42458,
                        "name": "vm",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1816,
                        "src": "4624:2:57",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Vm_$6909",
                          "typeString": "contract Vm"
                        }
                      },
                      "id": 42460,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "stopPrank",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6462,
                      "src": "4624:12:57",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 42461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4624:14:57",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42462,
                  "nodeType": "ExpressionStatement",
                  "src": "4624:14:57"
                },
                {
                  "expression": {
                    "id": 42463,
                    "name": "localAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 42420,
                    "src": "4655:12:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 42418,
                  "id": 42464,
                  "nodeType": "Return",
                  "src": "4648:19:57"
                }
              ]
            },
            "documentation": {
              "id": 42410,
              "nodeType": "StructuredDocumentation",
              "src": "3807:225:57",
              "text": "@notice Create the representation of a remote token\n @param domain The remote domain\n @param remoteAddress The id of the remote token, which also happens\n to be the address of the token on that domain"
            },
            "functionSelector": "055c21e9",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createRemoteToken",
            "parameters": {
              "id": 42415,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42412,
                  "mutability": "mutable",
                  "name": "domain",
                  "nodeType": "VariableDeclaration",
                  "scope": 42466,
                  "src": "4064:13:57",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 42411,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4064:6:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 42414,
                  "mutability": "mutable",
                  "name": "remoteAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 42466,
                  "src": "4079:21:57",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 42413,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4079:7:57",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4063:38:57"
            },
            "returnParameters": {
              "id": 42418,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42417,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 42466,
                  "src": "4134:7:57",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 42416,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4134:7:57",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4133:9:57"
            },
            "scope": 42467,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 42182,
              "name": "Test",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4902,
              "src": "1035:4:57",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Test_$4902",
                "typeString": "contract Test"
              }
            },
            "id": 42183,
            "nodeType": "InheritanceSpecifier",
            "src": "1035:4:57"
          }
        ],
        "contractDependencies": [
          1786,
          2021,
          4902,
          26936,
          31661,
          42033,
          42156,
          42565,
          42717,
          45020,
          46427,
          46484
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          42467,
          4902,
          2021,
          1786
        ],
        "name": "BridgeTest",
        "scope": 42468
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 57
}