UNPKG

@materia-dex/materia-contracts-core

Version:

Core contracts for the Materia protocol

847 lines 250 kB
{ "abi": [ { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" } ], "name": "Sync", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "constant": true, "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" }, { "internalType": "uint256", "name": "_materiaFee", "type": "uint256" }, { "internalType": "uint256", "name": "_swapFee", "type": "uint256" } ], "name": "initialize", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "kLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "materiaFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "price0CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "price1CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "renounceOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "_materiaFee", "type": "uint256" } ], "name": "setMateriaFee", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "_swapFee", "type": "uint256" } ], "name": "setSwapFee", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swap", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "swapFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "sync", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ], "evm": { "bytecode": { "linkReferences": {}, "object": "60806040526001600f5534801561001557600080fd5b5060405146908060526132108239604080519182900360520182208282018252600c83526b13585d195c9a5848141bdbdb60a21b6020938401528151808301835260018152603160f81b908401528151808401919091527f5bf44ff08b678ba2e1d520a1281c0c19551e8fe580343db7089f20aed9d6db64818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c0909401908190528351939091019290922060035550600580546001600160a01b031916339081179091559081906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600680546001600160a01b031916331790556130c48061014c6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063715018a61161012a578063ba9a7a56116100bd578063d505accf1161008c578063eb990c5911610071578063eb990c5914610707578063f2fde38b14610750578063fff6cae91461078357610226565b8063d505accf1461066e578063dd62ed3e146106cc57610226565b8063ba9a7a5614610623578063bc25cf771461062b578063c45a01551461065e578063d21220a71461066657610226565b80638da5cb5b116100f95780638da5cb5b146105d257806395d89b41146105da578063a9059cbb146105e2578063ba1b310c1461061b57610226565b8063715018a6146105435780637464fc3d1461054b5780637ecebe001461055357806389afcb441461058657610226565b8063313ce567116101bd57806354cf2aeb1161018c5780635a3d5493116101715780635a3d5493146104d55780636a627842146104dd57806370a082311461051057610226565b806354cf2aeb146104c55780635909c0d5146104cd57610226565b8063313ce5671461046557806334e19907146104835780633644e515146104a057806352114eed146104a857610226565b80630dfe1681116101f95780630dfe1681146103cf57806318160ddd1461040057806323b872dd1461041a57806330adf81f1461045d57610226565b8063022c0d9f1461022b57806306fdde03146102c65780630902f1ac14610343578063095ea7b314610382575b600080fd5b6102c46004803603608081101561024157600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561028557600080fd5b82018360208201111561029757600080fd5b803590602001918460018302840111640100000000831117156102b957600080fd5b50909250905061078b565b005b6102ce610e7d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103085781810151838201526020016102f0565b50505050905090810190601f1680156103355780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61034b610eb6565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103bb6004803603604081101561039857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f0b565b604080519115158252519081900360200190f35b6103d7610f22565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610408610f3e565b60408051918252519081900360200190f35b6103bb6004803603606081101561043057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610f44565b610408611023565b61046d611047565b6040805160ff9092168252519081900360200190f35b6102c46004803603602081101561049957600080fd5b503561104c565b6104086110c1565b6102c4600480360360208110156104be57600080fd5b50356110c7565b61040861113c565b610408611142565b610408611148565b610408600480360360208110156104f357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661114e565b6104086004803603602081101561052657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611508565b6102c461151a565b6104086115f9565b6104086004803603602081101561056957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115ff565b6105b96004803603602081101561059c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611611565b6040805192835260208301919091528051918290030190f35b6103d7611aae565b6102ce611aca565b6103bb600480360360408110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611b03565b610408611b10565b610408611b16565b6102c46004803603602081101561064157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b1c565b6103d7611d12565b6103d7611d2e565b6102c4600480360360e081101561068457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611d4a565b610408600480360360408110156106e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516612016565b6102c46004803603608081101561071d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060600135612033565b6102c46004803603602081101561076657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612103565b6102c461226d565b600f546001146107fc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f558415158061080f5750600084115b610864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061301e6023913960400191505060405180910390fd5b60008061086f610eb6565b5091509150816dffffffffffffffffffffffffffff16871080156108a25750806dffffffffffffffffffffffffffff1686105b61090d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d6174657269613a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b600754600854600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061097257508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b6109dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d6174657269613a20494e56414c49445f544f00000000000000000000000000604482015290519081900360640190fd5b8a156109ee576109ee828a8d612453565b89156109ff576109ff818a8c612453565b8615610ae1578873ffffffffffffffffffffffffffffffffffffffff16638b504dfa338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610ac857600080fd5b505af1158015610adc573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d6020811015610b7757600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191955073ffffffffffffffffffffffffffffffffffffffff8316916370a0823191602480820192602092909190829003018186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d6020811015610c1357600080fd5b5051925060009150506dffffffffffffffffffffffffffff85168a90038311610c3d576000610c53565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610c77576000610c8d565b89856dffffffffffffffffffffffffffff160383035b90506000821180610c9e5750600081115b610cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061306e6022913960400191505060405180910390fd5b6000610d2b610d0d600e548561266090919063ffffffff16565b610d1f876103e863ffffffff61266016565b9063ffffffff6126e616565b90506000610d47610d0d600e548561266090919063ffffffff16565b9050610d7f620f4240610d736dffffffffffffffffffffffffffff8b8116908b1663ffffffff61266016565b9063ffffffff61266016565b610d8f838363ffffffff61266016565b1015610dfc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4d6174657269613a204b00000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610e0a84848888612758565b60408051838152602081018390528082018d9052606081018c9052905173ffffffffffffffffffffffffffffffffffffffff8b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600f55505050505050505050565b6040518060400160405280600c81526020017f4d61746572696120506f6f6c000000000000000000000000000000000000000081525081565b6009546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610f18338484612a14565b5060015b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461100e5773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610fdc908363ffffffff6126e616565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b611019848484612a83565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60055473ffffffffffffffffffffffffffffffffffffffff1633146110bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b600e55565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff163314611137576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b600d55565b600e5481565b600a5481565b600b5481565b6000600f546001146111c157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f819055806111d1610eb6565b50600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561124b57600080fd5b505afa15801561125f573d6000803e3d6000fd5b505050506040513d602081101561127557600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156112ee57600080fd5b505afa158015611302573d6000803e3d6000fd5b505050506040513d602081101561131857600080fd5b50519050600061133e836dffffffffffffffffffffffffffff871663ffffffff6126e616565b90506000611362836dffffffffffffffffffffffffffff871663ffffffff6126e616565b905060006113708787612b64565b600054909150806113ad576113996103e8610d1f611394878763ffffffff61266016565b612cf4565b98506113a860006103e8612d46565b61140a565b6114076dffffffffffffffffffffffffffff89166113d1868463ffffffff61266016565b816113d857fe5b046dffffffffffffffffffffffffffff89166113fa868563ffffffff61266016565b8161140157fe5b04612df6565b98505b60008911611463576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612fd16026913960400191505060405180910390fd5b61146d8a8a612d46565b61147986868a8a612758565b81156114bb576009546114b7906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff61266016565b600c555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600f5550949695505050505050565b60016020526000908152604090205481565b60055473ffffffffffffffffffffffffffffffffffffffff16331461158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b60055460405160009173ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600c5481565b60046020526000908152604090205481565b600080600f5460011461168557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f81905580611695610eb6565b50600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b15801561171757600080fd5b505afa15801561172b573d6000803e3d6000fd5b505050506040513d602081101561174157600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b1580156117b557600080fd5b505afa1580156117c9573d6000803e3d6000fd5b505050506040513d60208110156117df57600080fd5b5051306000908152600160205260408120549192506117fe8888612b64565b60005490915080611815848763ffffffff61266016565b8161181c57fe5b049a5080611830848663ffffffff61266016565b8161183757fe5b04995060008b11801561184a575060008a115b61189f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612fab6026913960400191505060405180910390fd5b6118a93084612e0e565b6118b4878d8d612453565b6118bf868d8c612453565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b15801561192b57600080fd5b505afa15801561193f573d6000803e3d6000fd5b505050506040513d602081101561195557600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b1580156119c757600080fd5b505afa1580156119db573d6000803e3d6000fd5b505050506040513d60208110156119f157600080fd5b50519350611a0185858b8b612758565b8115611a4357600954611a3f906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff61266016565b600c555b604080518c8152602081018c9052815173ffffffffffffffffffffffffffffffffffffffff8f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600f81905550915091565b60055473ffffffffffffffffffffffffffffffffffffffff1690565b6040518060400160405280600281526020017f4d5000000000000000000000000000000000000000000000000000000000000081525081565b6000610f18338484612a83565b600d5481565b6103e881565b600f54600114611b8d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f55600754600854600954604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611c699285928792611c64926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d6020811015611c5657600080fd5b50519063ffffffff6126e616565b612453565b600954604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051611d089284928792611c64926e01000000000000000000000000000090046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff8616916370a0823191602480820192602092909190829003018186803b158015611c2c57600080fd5b50506001600f5550565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611db957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d6174657269613a204558504952454400000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611f1a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611f9557508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61200057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d6174657269613a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b61200b898989612a14565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b60055473ffffffffffffffffffffffffffffffffffffffff1633146120a3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b6007805473ffffffffffffffffffffffffffffffffffffffff9586167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556008805494909516931692909217909255600d91909155600e55565b60055473ffffffffffffffffffffffffffffffffffffffff163314612173576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612ff76027913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166121df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613041602d913960400191505060405180910390fd5b60055460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600f546001146122de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d6174657269613a204c4f434b45440000000000000000000000000000000000604482015290519081900360640190fd5b6000600f55600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905161244c9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561235557600080fd5b505afa158015612369573d6000803e3d6000fd5b505050506040513d602081101561237f57600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156123f257600080fd5b505afa158015612406573d6000803e3d6000fd5b505050506040513d602081101561241c57600080fd5b50516009546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612758565b6001600f55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b6020831061255957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161251c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146125bb576040519150601f19603f3d011682016040523d82523d6000602084013e6125c0565b606091505b50915091508180156125ee5750805115806125ee57508080602001905160208110156125eb57600080fd5b50515b61265957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d6174657269613a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b600081158061267b5750508082028282828161267857fe5b04145b610f1c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610f1c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061278457506dffffffffffffffffffffffffffff8311155b6127ef57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d6174657269613a204f564552464c4f57000000000000000000000000000000604482015290519081900360640190fd5b60095463ffffffff428116917c01000000000000000000000000000000000000000000000000000000009004811682039081161580159061283f57506dffffffffffffffffffffffffffff841615155b801561285a57506dffffffffffffffffffffffffffff831615155b1561290a578063ffffffff1661289d8561287386612ed3565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff612ef716565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff81166128dd8461287387612ed3565b600b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600980547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612ab9908263ffffffff6126e616565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612afb908263ffffffff612f3816565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015612bcf57600080fd5b505afa158015612be3573d6000803e3d6000fd5b505050506040513d6020811015612bf957600080fd5b5051600c5473ffffffffffffffffffffffffffffffffffffffff8216158015945091925090612ce0578015612cdb576000612c506113946dffffffffffffffffffffffffffff88811690881663ffffffff61266016565b90506000612c5d83612cf4565b905080821115612cd8576000612c8b612c7c848463ffffffff6126e616565b6000549063ffffffff61266016565b90506000612cb483612ca8600d548761266090919063ffffffff16565b9063ffffffff612f3816565b90506000818381612cc157fe5b0490508015612cd457612cd48782612d46565b5050505b50505b612cec565b8015612cec576000600c555b505092915050565b60006003821115612d37575080600160028204015b81811015612d3157809150600281828581612d2057fe5b040181612d2957fe5b049050612d09565b50612d41565b8115612d41575060015b919050565b600054612d59908263ffffffff612f3816565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054612d91908263ffffffff612f3816565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612e055781612e07565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054612e44908263ffffffff6126e616565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612e7e908263ffffffff6126e616565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612f3057fe5b049392505050565b80820182811015610f1c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe4d6174657269613a20494e53554646494349454e545f4c49515549444954595f4255524e45444d6174657269613a20494e53554646494349454e545f4c49515549444954595f4d494e5445444d6174657269614f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724d6174657269613a20494e53554646494349454e545f4f55545055545f414d4f554e544d6174657269614f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d6174657269613a20494e53554646494349454e545f494e5055545f414d4f554e54a265627a7a72315820d89178dcfbd84048b6c0365ba6214f159e51a42621662b2fac9d84774b499f1e64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0xF SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 DUP1 PUSH1 0x52 PUSH2 0x3210 DUP3 CODECOPY PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB PUSH1 0x52 ADD DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0xC DUP4 MSTORE PUSH12 0x13585D195C9A5848141BDBDB PUSH1 0xA2 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x5BF44FF08B678BA2E1D520A1281C0C19551E8FE580343DB7089F20AED9D6DB64 DUP2 DUP4 ADD MSTORE PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP2 ADD SWAP5 SWAP1 SWAP5 MSTORE ADDRESS PUSH1 0xA0 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP2 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0xC0 SWAP1 SWAP5 ADD SWAP1 DUP2 SWAP1 MSTORE DUP4 MLOAD SWAP4 SWAP1 SWAP2 ADD SWAP3 SWAP1 SWAP3 KECCAK256 PUSH1 0x3 SSTORE POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE SWAP1 DUP2 SWAP1 PUSH1 0x0 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 POP PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH2 0x30C4 DUP1 PUSH2 0x14C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x226 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xBA9A7A56 GT PUSH2 0xBD JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xEB990C59 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xEB990C59 EQ PUSH2 0x707 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x750 JUMPI DUP1 PUSH4 0xFFF6CAE9 EQ PUSH2 0x783 JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6CC JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xBA9A7A56 EQ PUSH2 0x623 JUMPI DUP1 PUSH4 0xBC25CF77 EQ PUSH2 0x62B JUMPI DUP1 PUSH4 0xC45A0155 EQ PUSH2 0x65E JUMPI DUP1 PUSH4 0xD21220A7 EQ PUSH2 0x666 JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xF9 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x5D2 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x5DA JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x5E2 JUMPI DUP1 PUSH4 0xBA1B310C EQ PUSH2 0x61B JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x543 JUMPI DUP1 PUSH4 0x7464FC3D EQ PUSH2 0x54B JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x553 JUMPI DUP1 PUSH4 0x89AFCB44 EQ PUSH2 0x586 JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x1BD JUMPI DUP1 PUSH4 0x54CF2AEB GT PUSH2 0x18C JUMPI DUP1 PUSH4 0x5A3D5493 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x5A3D5493 EQ PUSH2 0x4D5 JUMPI DUP1 PUSH4 0x6A627842 EQ PUSH2 0x4DD JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x510 JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x54CF2AEB EQ PUSH2 0x4C5 JUMPI DUP1 PUSH4 0x5909C0D5 EQ PUSH2 0x4CD JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x313CE567 EQ PUSH2 0x465 JUMPI DUP1 PUSH4 0x34E19907 EQ PUSH2 0x483 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x4A0 JUMPI DUP1 PUSH4 0x52114EED EQ PUSH2 0x4A8 JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0xDFE1681 GT PUSH2 0x1F9 JUMPI DUP1 PUSH4 0xDFE1681 EQ PUSH2 0x3CF JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x400 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x41A JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x45D JUMPI PUSH2 0x226 JUMP JUMPDEST DUP1 PUSH4 0x22C0D9F EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x2C6 JUMPI DUP1 PUSH4 0x902F1AC EQ PUSH2 0x343 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x382 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x241 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP4 ADD CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x78B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2CE PUSH2 0xE7D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x308 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2F0 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x335 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x34B PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH14 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND DUP2 MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND DUP2 DUP4 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x398 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0xF0B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x3D7 PUSH2 0xF22 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x408 PUSH2 0xF3E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x3BB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x430 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0xF44 JUMP JUMPDEST PUSH2 0x408 PUSH2 0x1023 JUMP JUMPDEST PUSH2 0x46D PUSH2 0x1047 JUMP JUMPDEST