diff --git a/.gitleaksignore b/.gitleaksignore index 2c35471c..ecaf64d8 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -111,4 +111,28 @@ c1ebdf6ee1d58b2a7aa8ece47be8aaf70e4768ec:audits/internal4/analysis/contracts/dif 613f448aa91f0679f82affe37db9d9431f3e6071:scripts/deployment/globals_mainnet.json:generic-api-key:1 613f448aa91f0679f82affe37db9d9431f3e6071:scripts/deployment/globals_mainnet.json:generic-api-key:2 f78d4539c80abb33ea04dce4d561af5302033235:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 -f78d4539c80abb33ea04dce4d561af5302033235:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 \ No newline at end of file +f78d4539c80abb33ea04dce4d561af5302033235:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 +07a847c26178454e2be164f308de5fd55f6dd1f2:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 +07a847c26178454e2be164f308de5fd55f6dd1f2:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 +1c515d38908353c831504dca8cf674f62b904b7f:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:1 +1c515d38908353c831504dca8cf674f62b904b7f:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:2 +1c515d38908353c831504dca8cf674f62b904b7f:scripts/deployment/staking/wormhole/globals_polygon_mainnet.json:generic-api-key:1 +1c515d38908353c831504dca8cf674f62b904b7f:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 +09d62b39acd12adee10297a06c3b700e98c7f419:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 +0d19a66b3e2100d57dfac89d1b791a6d8467ba84:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 +1c515d38908353c831504dca8cf674f62b904b7f:scripts/deployment/staking/wormhole/globals_polygon_mainnet.json:generic-api-key:2 +1c515d38908353c831504dca8cf674f62b904b7f:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 +09d62b39acd12adee10297a06c3b700e98c7f419:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 +0d19a66b3e2100d57dfac89d1b791a6d8467ba84:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 +7a3e976da8f9d2322911b3008422bd875abaec7f:scripts/deployment/staking/wormhole/globals_polygon_mainnet.json:generic-api-key:2 +7a3e976da8f9d2322911b3008422bd875abaec7f:scripts/deployment/staking/wormhole/globals_polygon_mainnet.json:generic-api-key:1 +7a3e976da8f9d2322911b3008422bd875abaec7f:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:2 +7a3e976da8f9d2322911b3008422bd875abaec7f:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:1 +602cfa1ef3933707828398ee42b0d923abfe39ff:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:2 +602cfa1ef3933707828398ee42b0d923abfe39ff:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:1 +602cfa1ef3933707828398ee42b0d923abfe39ff:scripts/deployment/staking/wormhole/globals_polygon_mainnet.json:generic-api-key:2 +602cfa1ef3933707828398ee42b0d923abfe39ff:scripts/deployment/staking/wormhole/globals_polygon_mainnet.json:generic-api-key:1 +9fa4b1fb81ba553ed48ef4a9b22c53ecdf4d2242:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 +9fa4b1fb81ba553ed48ef4a9b22c53ecdf4d2242:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 +001d71fc7c216c593faebdd3d6f353efaf80605f:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 +001d71fc7c216c593faebdd3d6f353efaf80605f:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 \ No newline at end of file diff --git a/abis/0.8.25/ArbitrumDepositProcessorL1.json b/abis/0.8.25/ArbitrumDepositProcessorL1.json index acb25030..b4a49b14 100644 --- a/abis/0.8.25/ArbitrumDepositProcessorL1.json +++ b/abis/0.8.25/ArbitrumDepositProcessorL1.json @@ -179,9 +179,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -332,6 +332,25 @@ "name": "L2TargetDispenserUpdated", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "leftovers", + "type": "uint256" + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -358,6 +377,12 @@ "internalType": "uint256", "name": "transferAmount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -596,6 +621,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -690,10 +734,23 @@ ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + } + ], + "name": "updateHashMaintenance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ], - "bytecode": "0x610180604052348015610010575f80fd5b50604051611cec380380611cec83398101604081905261002f916101d8565b87878787876001600160a01b038416158061005157506001600160a01b038316155b8061006357506001600160a01b038216155b156100815760405163d92e233d60e01b815260040160405180910390fd5b805f036100a157604051637c946ed760e01b815260040160405180910390fd5b60246100b560026001600160401b03610263565b6100bf9190610294565b6001600160401b031681111561011d578060246100e460026001600160401b03610263565b6100ee9190610294565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e05261010052600180546001600160a01b031916331790558316158061016757506001600160a01b038216155b8061017957506001600160a01b038116155b156101975760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0392831661012052908216610140521661016052506102c79350505050565b80516001600160a01b03811681146101d3575f80fd5b919050565b5f805f805f805f80610100898b0312156101f0575f80fd5b6101f9896101bd565b975061020760208a016101bd565b965061021560408a016101bd565b955061022360608a016101bd565b94506080890151935061023860a08a016101bd565b925061024660c08a016101bd565b915061025460e08a016101bd565b90509295985092959890939650565b5f6001600160401b038381168061028857634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b038281168282160390808211156102c057634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161012051610140516101605161194c6103a05f395f8181610441015281816107ab015261080601525f81816103f0015261083601525f81816101c60152610c8301525f81816103bd015281816110e2015261117e01525f81816101f9015281816108bb01528181610f0c01528181610fe5015261105201525f81816103320152610d5201525f81816104740152818161052301528181610578015281816106b20152818161070701526111ae01525f818161017601528181610cb20152610d9b015261194c5ff3fe608060405260043610610161575f3560e01c8063a8b2ae02116100c6578063e309fb771161007c578063f4427c2c11610057578063f4427c2c14610496578063f953cec7146104ab578063f9fc3c21146104ca575f80fd5b8063e309fb7714610412578063e78cea9214610430578063f2541c3514610463575f80fd5b8063bde52661116100ac578063bde5266114610399578063c23cc3ff146103ac578063ce11e6ab146103df575f80fd5b8063a8b2ae0214610373578063b2267a7b14610386575f80fd5b806354d20cc21161011b5780635bc105c0116101015780635bc105c01461030d5780636143fe93146103215780638da5cb5b14610354575f80fd5b806354d20cc21461025357806354e4bbf4146102ec575f80fd5b80633d1f86791161014b5780633d1f8679146101e85780634c1c6cbf1461021b5780634ece6b171461023f575f80fd5b806231d115146101655780630e283a6a146101b5575b5f80fd5b348015610170575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c0575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b3480156101f3575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b348015610226575f80fd5b50610231620493e081565b6040519081526020016101ac565b34801561024a575f80fd5b5061023160a081565b34801561025e575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102bb7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101ac565b3480156102f7575f80fd5b5061030b610306366004611227565b6104e0565b005b348015610318575f80fd5b506102316104ec565b34801561032c575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b34801561035f575f80fd5b50600154610198906001600160a01b031681565b34801561037e575f80fd5b506012610231565b61030b610394366004611320565b610518565b61030b6103a7366004611407565b6106a7565b3480156103b7575f80fd5b506102317f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ea575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b34801561041d575f80fd5b505f54610198906001600160a01b031681565b34801561043b575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b34801561046e575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a1575f80fd5b5061023160025481565b3480156104b6575f80fd5b5061030b6104c53660046114dc565b6107a0565b3480156104d5575f80fd5b50610231621e848081565b6104e9816108e5565b50565b6024610501600267ffffffffffffffff611543565b61050b919061158e565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105b0576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f815181106105e4576105e46115b6565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f81518110610633576106336115b6565b6020026020010181815250505f61064c838387876109e8565b600280549192505f61065d836115e3565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328484876040516106969392919061168c565b60405180910390a250505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461073a576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044016105a7565b5f610747858585856109e8565b600280549192505f610758836115e3565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328686856040516107919392919061168c565b60405180910390a25050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610833576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016105a7565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610890573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b491906116c1565b90506108e17f00000000000000000000000000000000000000000000000000000000000000008284610fe3565b5050565b6001546001600160a01b0316331461093e576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201523360248201526044016105a7565b6001600160a01b03811661097e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f60a0835114610a315782516040517f34c9027a00000000000000000000000000000000000000000000000000000000815260a0600482015260248101919091526044016105a7565b5f805f805f87806020019051810190610a4a91906116dc565b9398509196509450925090506001600160a01b038516610a68573394505b6002841080610a775750600282105b80610a80575080155b15610ab7576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b621e8480821115610b00576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101839052621e848060248201526044016105a7565b6040805160028082526060820183525f926020830190803683370190505090508715610b9557835f03610b5f576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b6c85620493e0611721565b610b76908561173e565b815f81518110610b8857610b886115b6565b6020026020010181815250505b610b9f8584611721565b610ba9908361173e565b81600181518110610bbc57610bbc6115b6565b6020026020010181815250505f81600181518110610bdc57610bdc6115b6565b6020026020010151825f81518110610bf657610bf66115b6565b6020026020010151610c08919061173e565b905034811115610c4d576040517f491a2bb1000000000000000000000000000000000000000000000000000000008152346004820152602481018290526044016105a7565b8815610e3d576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018b90527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610cf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1c9190611751565b505f85604051602001610d3f9181526040602082018190525f9082015260600190565b60405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fb1a07b845f81518110610d9157610d916115b6565b60200260200101517f00000000000000000000000000000000000000000000000000000000000000008b5f8054906101000a90046001600160a01b03168f620493e08e896040518963ffffffff1660e01b8152600401610df7979695949392919061179e565b5f6040518083038185885af1158015610e12573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610e3a91908101906117f0565b50505b5f6040518060400160405280601581526020017f726563656976654d657373616765286279746573290000000000000000000000815250805190602001208d8d604051602001610e8e929190611865565b60408051601f1981840301815290829052610eab91602401611892565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663679b6ded84600181518110610f4c57610f4c6115b6565b60200260200101515f8054906101000a90046001600160a01b03165f888d8e8c8f8a6040518a63ffffffff1660e01b8152600401610f919897969594939291906118a4565b60206040518083038185885af1158015610fad573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fd291906118ff565b9d9c50505050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161461107f576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016105a7565b5f546001600160a01b038381169116146110db575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015290911660248201526044016105a7565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390611139908590611892565b60405180910390a35f8180602001905181019061115691906118ff565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b1580156111f7575f80fd5b505af1158015611209573d5f803e3d5ffd5b5050505050505050565b6001600160a01b03811681146104e9575f80fd5b5f60208284031215611237575f80fd5b813561124281611213565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561129f5761129f611249565b604052919050565b5f67ffffffffffffffff8211156112c0576112c0611249565b50601f01601f191660200190565b5f82601f8301126112dd575f80fd5b81356112f06112eb826112a7565b611276565b818152846020838601011115611304575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611333575f80fd5b843561133e81611213565b935060208501359250604085013567ffffffffffffffff811115611360575f80fd5b61136c878288016112ce565b949793965093946060013593505050565b5f67ffffffffffffffff82111561139657611396611249565b5060051b60200190565b5f82601f8301126113af575f80fd5b813560206113bf6112eb8361137d565b8083825260208201915060208460051b8701019350868411156113e0575f80fd5b602086015b848110156113fc57803583529183019183016113e5565b509695505050505050565b5f805f806080858703121561141a575f80fd5b843567ffffffffffffffff80821115611431575f80fd5b818701915087601f830112611444575f80fd5b813560206114546112eb8361137d565b82815260059290921b8401810191818101908b841115611472575f80fd5b948201945b8386101561149957853561148a81611213565b82529482019490820190611477565b985050880135925050808211156114ae575f80fd5b6114ba888389016113a0565b945060408701359150808211156114cf575f80fd5b5061136c878288016112ce565b5f602082840312156114ec575f80fd5b813567ffffffffffffffff811115611502575f80fd5b61150e848285016112ce565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680611582577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156115af576115af611516565b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361161357611613611516565b5060010190565b5f815180845260208085019450602084015f5b838110156116525781516001600160a01b03168752958201959082019060010161162d565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561165257815187529582019590820190600101611670565b606081525f61169e606083018661161a565b82810360208401526116b0818661165d565b915050826040830152949350505050565b5f602082840312156116d1575f80fd5b815161124281611213565b5f805f805f60a086880312156116f0575f80fd5b85516116fb81611213565b602087015160408801516060890151608090990151929a91995097965090945092505050565b808202811582820484141761173857611738611516565b92915050565b8082018082111561173857611738611516565b5f60208284031215611761575f80fd5b81518015158114611242575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b03808a16835280891660208401528088166040840152508560608301528460808301528360a083015260e060c08301526117e360e0830184611770565b9998505050505050505050565b5f60208284031215611800575f80fd5b815167ffffffffffffffff811115611816575f80fd5b8201601f81018413611826575f80fd5b80516118346112eb826112a7565b818152856020838501011115611848575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b604081525f611877604083018561161a565b8281036020840152611889818561165d565b95945050505050565b602081525f6112426020830184611770565b5f6101006001600160a01b03808c1684528a602085015289604085015280891660608501528088166080850152508560a08401528460c08401528060e08401526118f081840185611770565b9b9a5050505050505050505050565b5f6020828403121561190f575f80fd5b505191905056fea2646970667358221220d5bb998843662d564261e4ece910247da2e5287093353c0c35f7be9f54fd75ff64736f6c63430008190033", - "deployedBytecode": "0x608060405260043610610161575f3560e01c8063a8b2ae02116100c6578063e309fb771161007c578063f4427c2c11610057578063f4427c2c14610496578063f953cec7146104ab578063f9fc3c21146104ca575f80fd5b8063e309fb7714610412578063e78cea9214610430578063f2541c3514610463575f80fd5b8063bde52661116100ac578063bde5266114610399578063c23cc3ff146103ac578063ce11e6ab146103df575f80fd5b8063a8b2ae0214610373578063b2267a7b14610386575f80fd5b806354d20cc21161011b5780635bc105c0116101015780635bc105c01461030d5780636143fe93146103215780638da5cb5b14610354575f80fd5b806354d20cc21461025357806354e4bbf4146102ec575f80fd5b80633d1f86791161014b5780633d1f8679146101e85780634c1c6cbf1461021b5780634ece6b171461023f575f80fd5b806231d115146101655780630e283a6a146101b5575b5f80fd5b348015610170575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c0575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b3480156101f3575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b348015610226575f80fd5b50610231620493e081565b6040519081526020016101ac565b34801561024a575f80fd5b5061023160a081565b34801561025e575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102bb7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101ac565b3480156102f7575f80fd5b5061030b610306366004611227565b6104e0565b005b348015610318575f80fd5b506102316104ec565b34801561032c575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b34801561035f575f80fd5b50600154610198906001600160a01b031681565b34801561037e575f80fd5b506012610231565b61030b610394366004611320565b610518565b61030b6103a7366004611407565b6106a7565b3480156103b7575f80fd5b506102317f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ea575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b34801561041d575f80fd5b505f54610198906001600160a01b031681565b34801561043b575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b34801561046e575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a1575f80fd5b5061023160025481565b3480156104b6575f80fd5b5061030b6104c53660046114dc565b6107a0565b3480156104d5575f80fd5b50610231621e848081565b6104e9816108e5565b50565b6024610501600267ffffffffffffffff611543565b61050b919061158e565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105b0576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f815181106105e4576105e46115b6565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f81518110610633576106336115b6565b6020026020010181815250505f61064c838387876109e8565b600280549192505f61065d836115e3565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328484876040516106969392919061168c565b60405180910390a250505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461073a576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044016105a7565b5f610747858585856109e8565b600280549192505f610758836115e3565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328686856040516107919392919061168c565b60405180910390a25050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610833576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016105a7565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610890573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b491906116c1565b90506108e17f00000000000000000000000000000000000000000000000000000000000000008284610fe3565b5050565b6001546001600160a01b0316331461093e576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201523360248201526044016105a7565b6001600160a01b03811661097e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f60a0835114610a315782516040517f34c9027a00000000000000000000000000000000000000000000000000000000815260a0600482015260248101919091526044016105a7565b5f805f805f87806020019051810190610a4a91906116dc565b9398509196509450925090506001600160a01b038516610a68573394505b6002841080610a775750600282105b80610a80575080155b15610ab7576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b621e8480821115610b00576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101839052621e848060248201526044016105a7565b6040805160028082526060820183525f926020830190803683370190505090508715610b9557835f03610b5f576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b6c85620493e0611721565b610b76908561173e565b815f81518110610b8857610b886115b6565b6020026020010181815250505b610b9f8584611721565b610ba9908361173e565b81600181518110610bbc57610bbc6115b6565b6020026020010181815250505f81600181518110610bdc57610bdc6115b6565b6020026020010151825f81518110610bf657610bf66115b6565b6020026020010151610c08919061173e565b905034811115610c4d576040517f491a2bb1000000000000000000000000000000000000000000000000000000008152346004820152602481018290526044016105a7565b8815610e3d576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018b90527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610cf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1c9190611751565b505f85604051602001610d3f9181526040602082018190525f9082015260600190565b60405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fb1a07b845f81518110610d9157610d916115b6565b60200260200101517f00000000000000000000000000000000000000000000000000000000000000008b5f8054906101000a90046001600160a01b03168f620493e08e896040518963ffffffff1660e01b8152600401610df7979695949392919061179e565b5f6040518083038185885af1158015610e12573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610e3a91908101906117f0565b50505b5f6040518060400160405280601581526020017f726563656976654d657373616765286279746573290000000000000000000000815250805190602001208d8d604051602001610e8e929190611865565b60408051601f1981840301815290829052610eab91602401611892565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663679b6ded84600181518110610f4c57610f4c6115b6565b60200260200101515f8054906101000a90046001600160a01b03165f888d8e8c8f8a6040518a63ffffffff1660e01b8152600401610f919897969594939291906118a4565b60206040518083038185885af1158015610fad573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fd291906118ff565b9d9c50505050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161461107f576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016105a7565b5f546001600160a01b038381169116146110db575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015290911660248201526044016105a7565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390611139908590611892565b60405180910390a35f8180602001905181019061115691906118ff565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b1580156111f7575f80fd5b505af1158015611209573d5f803e3d5ffd5b5050505050505050565b6001600160a01b03811681146104e9575f80fd5b5f60208284031215611237575f80fd5b813561124281611213565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561129f5761129f611249565b604052919050565b5f67ffffffffffffffff8211156112c0576112c0611249565b50601f01601f191660200190565b5f82601f8301126112dd575f80fd5b81356112f06112eb826112a7565b611276565b818152846020838601011115611304575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611333575f80fd5b843561133e81611213565b935060208501359250604085013567ffffffffffffffff811115611360575f80fd5b61136c878288016112ce565b949793965093946060013593505050565b5f67ffffffffffffffff82111561139657611396611249565b5060051b60200190565b5f82601f8301126113af575f80fd5b813560206113bf6112eb8361137d565b8083825260208201915060208460051b8701019350868411156113e0575f80fd5b602086015b848110156113fc57803583529183019183016113e5565b509695505050505050565b5f805f806080858703121561141a575f80fd5b843567ffffffffffffffff80821115611431575f80fd5b818701915087601f830112611444575f80fd5b813560206114546112eb8361137d565b82815260059290921b8401810191818101908b841115611472575f80fd5b948201945b8386101561149957853561148a81611213565b82529482019490820190611477565b985050880135925050808211156114ae575f80fd5b6114ba888389016113a0565b945060408701359150808211156114cf575f80fd5b5061136c878288016112ce565b5f602082840312156114ec575f80fd5b813567ffffffffffffffff811115611502575f80fd5b61150e848285016112ce565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680611582577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156115af576115af611516565b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361161357611613611516565b5060010190565b5f815180845260208085019450602084015f5b838110156116525781516001600160a01b03168752958201959082019060010161162d565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561165257815187529582019590820190600101611670565b606081525f61169e606083018661161a565b82810360208401526116b0818661165d565b915050826040830152949350505050565b5f602082840312156116d1575f80fd5b815161124281611213565b5f805f805f60a086880312156116f0575f80fd5b85516116fb81611213565b602087015160408801516060890151608090990151929a91995097965090945092505050565b808202811582820484141761173857611738611516565b92915050565b8082018082111561173857611738611516565b5f60208284031215611761575f80fd5b81518015158114611242575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b03808a16835280891660208401528088166040840152508560608301528460808301528360a083015260e060c08301526117e360e0830184611770565b9998505050505050505050565b5f60208284031215611800575f80fd5b815167ffffffffffffffff811115611816575f80fd5b8201601f81018413611826575f80fd5b80516118346112eb826112a7565b818152856020838501011115611848575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b604081525f611877604083018561161a565b8281036020840152611889818561165d565b95945050505050565b602081525f6112426020830184611770565b5f6101006001600160a01b03808c1684528a602085015289604085015280891660608501528088166080850152508560a08401528460c08401528060e08401526118f081840185611770565b9b9a5050505050505050505050565b5f6020828403121561190f575f80fd5b505191905056fea2646970667358221220d5bb998843662d564261e4ece910247da2e5287093353c0c35f7be9f54fd75ff64736f6c63430008190033", + "bytecode": "0x610180604052348015610010575f80fd5b50604051611f40380380611f4083398101604081905261002f916101d8565b87878787876001600160a01b038416158061005157506001600160a01b038316155b8061006357506001600160a01b038216155b156100815760405163d92e233d60e01b815260040160405180910390fd5b805f036100a157604051637c946ed760e01b815260040160405180910390fd5b60246100b560026001600160401b03610263565b6100bf9190610294565b6001600160401b031681111561011d578060246100e460026001600160401b03610263565b6100ee9190610294565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e05261010052600180546001600160a01b031916331790558316158061016757506001600160a01b038216155b8061017957506001600160a01b038116155b156101975760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0392831661012052908216610140521661016052506102c79350505050565b80516001600160a01b03811681146101d3575f80fd5b919050565b5f805f805f805f80610100898b0312156101f0575f80fd5b6101f9896101bd565b975061020760208a016101bd565b965061021560408a016101bd565b955061022360608a016101bd565b94506080890151935061023860a08a016101bd565b925061024660c08a016101bd565b915061025460e08a016101bd565b90509295985092959890939650565b5f6001600160401b038381168061028857634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b038281168282160390808211156102c057634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e05161010051610120516101405161016051611b926103ae5f395f81816104b4015281816109fd0152610a3f01525f81816104630152610a6f01525f818161021a0152610eb401525f81816104300152818161134f015261143b01525f818161024d01528181610af4015281816111610152818161126b01526112bf01525f81816103860152610f8701525f81816104e701528181610596015281816105d2015281816106610152818161069d01528181610892015281816108ce015261147701525f818161018c01528181610ee30152610fd00152611b925ff3fe608060405260043610610177575f3560e01c8063a8b2ae02116100d1578063e309fb771161007c578063f4427c2c11610057578063f4427c2c14610509578063f953cec71461051e578063f9fc3c211461053d575f80fd5b8063e309fb7714610485578063e78cea92146104a3578063f2541c35146104d6575f80fd5b8063bde52661116100ac578063bde526611461040c578063c23cc3ff1461041f578063ce11e6ab14610452575f80fd5b8063a8b2ae02146103c7578063ac65ded2146103da578063b2267a7b146103f9575f80fd5b80634ece6b17116101315780635bc105c01161010c5780635bc105c0146103615780636143fe93146103755780638da5cb5b146103a8575f80fd5b80634ece6b171461029357806354d20cc2146102a757806354e4bbf414610340575f80fd5b80630e283a6a116101615780630e283a6a146102095780633d1f86791461023c5780634c1c6cbf1461026f575f80fd5b806231d1151461017b57806307d9c534146101cb575b5f80fd5b348015610186575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d6575f80fd5b506101f96101e53660046114d5565b60036020525f908152604090205460ff1681565b60405190151581526020016101c2565b348015610214575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b348015610247575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b34801561027a575f80fd5b50610285620493e081565b6040519081526020016101c2565b34801561029e575f80fd5b5061028560a081565b3480156102b2575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261030f7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101c2565b34801561034b575f80fd5b5061035f61035a366004611500565b610553565b005b34801561036c575f80fd5b5061028561055f565b348015610380575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b3575f80fd5b506001546101ae906001600160a01b031681565b3480156103d2575f80fd5b506012610285565b3480156103e5575f80fd5b5061035f6103f43660046114d5565b61058b565b61035f6104073660046115e0565b610656565b61035f61041a3660046116c7565b610887565b34801561042a575f80fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561045d575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b348015610490575f80fd5b505f546101ae906001600160a01b031681565b3480156104ae575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e1575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b348015610514575f80fd5b5061028560025481565b348015610529575f80fd5b5061035f61053836600461179c565b6109f2565b348015610548575f80fd5b50610285621e848081565b61055c81610b1e565b50565b6024610574600267ffffffffffffffff6117ea565b61057e919061181c565b67ffffffffffffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461060a5760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b5f8181526003602052604090205460ff161561063c576040516356bc34a160e01b815260048101829052602401610601565b5f908152600360205260409020805460ff19166001179055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106d05760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610601565b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061070457610704611844565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061075357610753611844565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f806107a786868a8a87610c08565b9092509050801561082d57604051329082905f81818185875af1925050503d805f81146107ef576040519150601f19603f3d011682016040523d82523d5f602084013e6107f4565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610838846001611858565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b604051610873939291906118e3565b60405180910390a350505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109015760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610601565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f806109498888888887610c08565b9092509050801561099a57604051329082905f81818185875af1925050503d805f8114610991576040519150601f19603f3d011682016040523d82523d5f602084013e610996565b606091505b5050505b6109a5846001611858565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a896040516109e0939291906118e3565b60405180910390a35050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6c5760405163179888fd60e11b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610601565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aed9190611918565b9050610b1a7f00000000000000000000000000000000000000000000000000000000000000008284611269565b5050565b6001546001600160a01b03163314610b77576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610601565b6001600160a01b038116610b9e5760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f8060a0855114610c525784516040517f34c9027a00000000000000000000000000000000000000000000000000000000815260a060048201526024810191909152604401610601565b610c886040518060a001604052805f6001600160a01b031681526020015f81526020015f81526020015f81526020015f81525090565b85806020019051810190610c9c9190611933565b60808601526060850152604084015260208301526001600160a01b0316808252610cd95760405163d92e233d60e01b815260040160405180910390fd5b600281602001511080610cee57506080810151155b15610d0c57604051637c946ed760e01b815260040160405180910390fd5b621e848081606001511015610d4657606081015160405163491a2bb160e01b81526004810191909152621e84806024820152604401610601565b6040805160028082526060820183525f926020830190803683370190505090508515610dd05781604001515f03610d9057604051637c946ed760e01b815260040160405180910390fd5b6020820151610da290620493e0611978565b8260400151610db19190611858565b815f81518110610dc357610dc3611844565b6020026020010181815250505b81602001518260600151610de49190611978565b8260800151610df39190611858565b81600181518110610e0657610e06611844565b6020026020010181815250505f81600181518110610e2657610e26611844565b6020026020010151825f81518110610e4057610e40611844565b6020026020010151610e529190611858565b905034811115610e7e5760405163491a2bb160e01b815234600482015260248101829052604401610601565b8615611079576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610f29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4d919061198f565b505f8360400151604051602001610f749181526040602082018190525f9082015260600190565b60405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fb1a07b845f81518110610fc657610fc6611844565b60200260200101517f0000000000000000000000000000000000000000000000000000000000000000875f01515f8054906101000a90046001600160a01b03168d620493e08b60200151896040518963ffffffff1660e01b815260040161103397969594939291906119dc565b5f6040518083038185885af115801561104e573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526110769190810190611a2e565b50505b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d916110e3918e918e918c91016118e3565b60408051601f198184030181529082905261110091602401611aa3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663679b6ded846001815181106111a1576111a1611844565b6020908102919091018101515f805460808a01518a5160608c0151958c01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e08a901b168152959661120c966001600160a01b0390951695948592908c90600401611ab5565b60206040518083038185885af1158015611228573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061124d9190611b10565b95506112598234611b27565b9450505050509550959350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146112ec5760405163179888fd60e11b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610601565b5f546001600160a01b03838116911614611348575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610601565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e33906113a6908590611aa3565b60405180910390a35f80828060200190518101906113c49190611b3a565b5f81815260036020526040902054919350915060ff16156113fb576040516356bc34a160e01b815260048101829052602401610601565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b1580156114b8575f80fd5b505af11580156114ca573d5f803e3d5ffd5b505050505050505050565b5f602082840312156114e5575f80fd5b5035919050565b6001600160a01b038116811461055c575f80fd5b5f60208284031215611510575f80fd5b813561151b816114ec565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561155f5761155f611522565b604052919050565b5f67ffffffffffffffff82111561158057611580611522565b50601f01601f191660200190565b5f82601f83011261159d575f80fd5b81356115b06115ab82611567565b611536565b8181528460208386010111156115c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156115f3575f80fd5b84356115fe816114ec565b935060208501359250604085013567ffffffffffffffff811115611620575f80fd5b61162c8782880161158e565b949793965093946060013593505050565b5f67ffffffffffffffff82111561165657611656611522565b5060051b60200190565b5f82601f83011261166f575f80fd5b8135602061167f6115ab8361163d565b8083825260208201915060208460051b8701019350868411156116a0575f80fd5b602086015b848110156116bc57803583529183019183016116a5565b509695505050505050565b5f805f80608085870312156116da575f80fd5b843567ffffffffffffffff808211156116f1575f80fd5b818701915087601f830112611704575f80fd5b813560206117146115ab8361163d565b82815260059290921b8401810191818101908b841115611732575f80fd5b948201945b8386101561175957853561174a816114ec565b82529482019490820190611737565b9850508801359250508082111561176e575f80fd5b61177a88838901611660565b9450604087013591508082111561178f575f80fd5b5061162c8782880161158e565b5f602082840312156117ac575f80fd5b813567ffffffffffffffff8111156117c2575f80fd5b6117ce8482850161158e565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff8084168061181057634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff82811682821603908082111561183d5761183d6117d6565b5092915050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561186b5761186b6117d6565b92915050565b5f815180845260208085019450602084015f5b838110156118a95781516001600160a01b031687529582019590820190600101611884565b509495945050505050565b5f815180845260208085019450602084015f5b838110156118a9578151875295820195908201906001016118c7565b606081525f6118f56060830186611871565b828103602084015261190781866118b4565b915050826040830152949350505050565b5f60208284031215611928575f80fd5b815161151b816114ec565b5f805f805f60a08688031215611947575f80fd5b8551611952816114ec565b602087015160408801516060890151608090990151929a91995097965090945092505050565b808202811582820484141761186b5761186b6117d6565b5f6020828403121561199f575f80fd5b8151801515811461151b575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b03808a16835280891660208401528088166040840152508560608301528460808301528360a083015260e060c0830152611a2160e08301846119ae565b9998505050505050505050565b5f60208284031215611a3e575f80fd5b815167ffffffffffffffff811115611a54575f80fd5b8201601f81018413611a64575f80fd5b8051611a726115ab82611567565b818152856020838501011115611a86575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b602081525f61151b60208301846119ae565b5f6101006001600160a01b03808c1684528a602085015289604085015280891660608501528088166080850152508560a08401528460c08401528060e0840152611b01818401856119ae565b9b9a5050505050505050505050565b5f60208284031215611b20575f80fd5b5051919050565b8181038181111561186b5761186b6117d6565b5f8060408385031215611b4b575f80fd5b50508051602090910151909290915056fea26469706673582212202a42e718922552608c1b20dc30539af4dc80f214a8753918431cc3035c7fb80a64736f6c63430008190033", + "deployedBytecode": "0x608060405260043610610177575f3560e01c8063a8b2ae02116100d1578063e309fb771161007c578063f4427c2c11610057578063f4427c2c14610509578063f953cec71461051e578063f9fc3c211461053d575f80fd5b8063e309fb7714610485578063e78cea92146104a3578063f2541c35146104d6575f80fd5b8063bde52661116100ac578063bde526611461040c578063c23cc3ff1461041f578063ce11e6ab14610452575f80fd5b8063a8b2ae02146103c7578063ac65ded2146103da578063b2267a7b146103f9575f80fd5b80634ece6b17116101315780635bc105c01161010c5780635bc105c0146103615780636143fe93146103755780638da5cb5b146103a8575f80fd5b80634ece6b171461029357806354d20cc2146102a757806354e4bbf414610340575f80fd5b80630e283a6a116101615780630e283a6a146102095780633d1f86791461023c5780634c1c6cbf1461026f575f80fd5b806231d1151461017b57806307d9c534146101cb575b5f80fd5b348015610186575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d6575f80fd5b506101f96101e53660046114d5565b60036020525f908152604090205460ff1681565b60405190151581526020016101c2565b348015610214575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b348015610247575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b34801561027a575f80fd5b50610285620493e081565b6040519081526020016101c2565b34801561029e575f80fd5b5061028560a081565b3480156102b2575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261030f7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101c2565b34801561034b575f80fd5b5061035f61035a366004611500565b610553565b005b34801561036c575f80fd5b5061028561055f565b348015610380575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b3575f80fd5b506001546101ae906001600160a01b031681565b3480156103d2575f80fd5b506012610285565b3480156103e5575f80fd5b5061035f6103f43660046114d5565b61058b565b61035f6104073660046115e0565b610656565b61035f61041a3660046116c7565b610887565b34801561042a575f80fd5b506102857f000000000000000000000000000000000000000000000000000000000000000081565b34801561045d575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b348015610490575f80fd5b505f546101ae906001600160a01b031681565b3480156104ae575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e1575f80fd5b506101ae7f000000000000000000000000000000000000000000000000000000000000000081565b348015610514575f80fd5b5061028560025481565b348015610529575f80fd5b5061035f61053836600461179c565b6109f2565b348015610548575f80fd5b50610285621e848081565b61055c81610b1e565b50565b6024610574600267ffffffffffffffff6117ea565b61057e919061181c565b67ffffffffffffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461060a5760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b5f8181526003602052604090205460ff161561063c576040516356bc34a160e01b815260048101829052602401610601565b5f908152600360205260409020805460ff19166001179055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106d05760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610601565b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061070457610704611844565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061075357610753611844565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f806107a786868a8a87610c08565b9092509050801561082d57604051329082905f81818185875af1925050503d805f81146107ef576040519150601f19603f3d011682016040523d82523d5f602084013e6107f4565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610838846001611858565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b604051610873939291906118e3565b60405180910390a350505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109015760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610601565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f806109498888888887610c08565b9092509050801561099a57604051329082905f81818185875af1925050503d805f8114610991576040519150601f19603f3d011682016040523d82523d5f602084013e610996565b606091505b5050505b6109a5846001611858565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a896040516109e0939291906118e3565b60405180910390a35050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6c5760405163179888fd60e11b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610601565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aed9190611918565b9050610b1a7f00000000000000000000000000000000000000000000000000000000000000008284611269565b5050565b6001546001600160a01b03163314610b77576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610601565b6001600160a01b038116610b9e5760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f8060a0855114610c525784516040517f34c9027a00000000000000000000000000000000000000000000000000000000815260a060048201526024810191909152604401610601565b610c886040518060a001604052805f6001600160a01b031681526020015f81526020015f81526020015f81526020015f81525090565b85806020019051810190610c9c9190611933565b60808601526060850152604084015260208301526001600160a01b0316808252610cd95760405163d92e233d60e01b815260040160405180910390fd5b600281602001511080610cee57506080810151155b15610d0c57604051637c946ed760e01b815260040160405180910390fd5b621e848081606001511015610d4657606081015160405163491a2bb160e01b81526004810191909152621e84806024820152604401610601565b6040805160028082526060820183525f926020830190803683370190505090508515610dd05781604001515f03610d9057604051637c946ed760e01b815260040160405180910390fd5b6020820151610da290620493e0611978565b8260400151610db19190611858565b815f81518110610dc357610dc3611844565b6020026020010181815250505b81602001518260600151610de49190611978565b8260800151610df39190611858565b81600181518110610e0657610e06611844565b6020026020010181815250505f81600181518110610e2657610e26611844565b6020026020010151825f81518110610e4057610e40611844565b6020026020010151610e529190611858565b905034811115610e7e5760405163491a2bb160e01b815234600482015260248101829052604401610601565b8615611079576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018990527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610f29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4d919061198f565b505f8360400151604051602001610f749181526040602082018190525f9082015260600190565b60405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634fb1a07b845f81518110610fc657610fc6611844565b60200260200101517f0000000000000000000000000000000000000000000000000000000000000000875f01515f8054906101000a90046001600160a01b03168d620493e08b60200151896040518963ffffffff1660e01b815260040161103397969594939291906119dc565b5f6040518083038185885af115801561104e573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526110769190810190611a2e565b50505b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d916110e3918e918e918c91016118e3565b60408051601f198184030181529082905261110091602401611aa3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663679b6ded846001815181106111a1576111a1611844565b6020908102919091018101515f805460808a01518a5160608c0151958c01516040517fffffffff0000000000000000000000000000000000000000000000000000000060e08a901b168152959661120c966001600160a01b0390951695948592908c90600401611ab5565b60206040518083038185885af1158015611228573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061124d9190611b10565b95506112598234611b27565b9450505050509550959350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146112ec5760405163179888fd60e11b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610601565b5f546001600160a01b03838116911614611348575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610601565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e33906113a6908590611aa3565b60405180910390a35f80828060200190518101906113c49190611b3a565b5f81815260036020526040902054919350915060ff16156113fb576040516356bc34a160e01b815260048101829052602401610601565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b1580156114b8575f80fd5b505af11580156114ca573d5f803e3d5ffd5b505050505050505050565b5f602082840312156114e5575f80fd5b5035919050565b6001600160a01b038116811461055c575f80fd5b5f60208284031215611510575f80fd5b813561151b816114ec565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561155f5761155f611522565b604052919050565b5f67ffffffffffffffff82111561158057611580611522565b50601f01601f191660200190565b5f82601f83011261159d575f80fd5b81356115b06115ab82611567565b611536565b8181528460208386010111156115c4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156115f3575f80fd5b84356115fe816114ec565b935060208501359250604085013567ffffffffffffffff811115611620575f80fd5b61162c8782880161158e565b949793965093946060013593505050565b5f67ffffffffffffffff82111561165657611656611522565b5060051b60200190565b5f82601f83011261166f575f80fd5b8135602061167f6115ab8361163d565b8083825260208201915060208460051b8701019350868411156116a0575f80fd5b602086015b848110156116bc57803583529183019183016116a5565b509695505050505050565b5f805f80608085870312156116da575f80fd5b843567ffffffffffffffff808211156116f1575f80fd5b818701915087601f830112611704575f80fd5b813560206117146115ab8361163d565b82815260059290921b8401810191818101908b841115611732575f80fd5b948201945b8386101561175957853561174a816114ec565b82529482019490820190611737565b9850508801359250508082111561176e575f80fd5b61177a88838901611660565b9450604087013591508082111561178f575f80fd5b5061162c8782880161158e565b5f602082840312156117ac575f80fd5b813567ffffffffffffffff8111156117c2575f80fd5b6117ce8482850161158e565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff8084168061181057634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff82811682821603908082111561183d5761183d6117d6565b5092915050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561186b5761186b6117d6565b92915050565b5f815180845260208085019450602084015f5b838110156118a95781516001600160a01b031687529582019590820190600101611884565b509495945050505050565b5f815180845260208085019450602084015f5b838110156118a9578151875295820195908201906001016118c7565b606081525f6118f56060830186611871565b828103602084015261190781866118b4565b915050826040830152949350505050565b5f60208284031215611928575f80fd5b815161151b816114ec565b5f805f805f60a08688031215611947575f80fd5b8551611952816114ec565b602087015160408801516060890151608090990151929a91995097965090945092505050565b808202811582820484141761186b5761186b6117d6565b5f6020828403121561199f575f80fd5b8151801515811461151b575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b03808a16835280891660208401528088166040840152508560608301528460808301528360a083015260e060c0830152611a2160e08301846119ae565b9998505050505050505050565b5f60208284031215611a3e575f80fd5b815167ffffffffffffffff811115611a54575f80fd5b8201601f81018413611a64575f80fd5b8051611a726115ab82611567565b818152856020838501011115611a86575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b602081525f61151b60208301846119ae565b5f6101006001600160a01b03808c1684528a602085015289604085015280891660608501528088166080850152508560a08401528460c08401528060e0840152611b01818401856119ae565b9b9a5050505050505050505050565b5f60208284031215611b20575f80fd5b5051919050565b8181038181111561186b5761186b6117d6565b5f8060408385031215611b4b575f80fd5b50508051602090910151909290915056fea26469706673582212202a42e718922552608c1b20dc30539af4dc80f214a8753918431cc3035c7fb80a64736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/ArbitrumTargetDispenserL2.json b/abis/0.8.25/ArbitrumTargetDispenserL2.json index a4e1eb1e..c5a9a59c 100644 --- a/abis/0.8.25/ArbitrumTargetDispenserL2.json +++ b/abis/0.8.25/ArbitrumTargetDispenserL2.json @@ -164,9 +164,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -366,20 +366,33 @@ "inputs": [ { "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, "internalType": "uint256", - "name": "sequence", + "name": "leftovers", "type": "uint256" - }, + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": true, - "internalType": "address", - "name": "messageSender", - "type": "address" + "internalType": "uint256", + "name": "sequence", + "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "l1Processor", + "name": "messageSender", "type": "address" }, { @@ -387,6 +400,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -476,10 +495,16 @@ "name": "amount", "type": "uint256" }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, { "indexed": false, "internalType": "uint256", - "name": "batchNonce", + "name": "olasBalance", "type": "uint256" }, { @@ -506,6 +531,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "StakingTargetDeposited", @@ -523,28 +554,9 @@ "name": "TargetDispenserUnpaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithheldAmountSynced", - "type": "event" - }, { "inputs": [], - "name": "GAS_LIMIT", + "name": "MAX_CHAIN_ID", "outputs": [ { "internalType": "uint256", @@ -557,7 +569,7 @@ }, { "inputs": [], - "name": "MAX_CHAIN_ID", + "name": "MAX_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -570,7 +582,7 @@ }, { "inputs": [], - "name": "MAX_GAS_LIMIT", + "name": "MIN_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -620,6 +632,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "getBridgingDecimals", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, { "inputs": [], "name": "l1AliasedDepositProcessor", @@ -744,6 +769,44 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "queuedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -770,9 +833,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "redeem", @@ -806,25 +869,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "stakingQueueingNonces", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -833,7 +877,7 @@ "type": "bytes" } ], - "name": "syncWithheldTokens", + "name": "syncWithheldAmount", "outputs": [], "stateMutability": "payable", "type": "function" @@ -863,8 +907,8 @@ "type": "receive" } ], - "bytecode": "0x610140604052348015610010575f80fd5b506040516125ff3803806125ff83398101604081905261002f916101c8565b84848484846001600160a01b038516158061005157506001600160a01b038416155b8061006357506001600160a01b038316155b8061007557506001600160a01b038216155b156100935760405163d92e233d60e01b815260040160405180910390fd5b805f036100b357604051637c946ed760e01b815260040160405180910390fd5b60246100c760026001600160401b03610222565b6100d19190610253565b6001600160401b031681111561012f578060246100f660026001600160401b03610222565b6101009190610253565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e052610100526002805460ff60a81b1960ff60a01b1933166001600160a81b031990921691909117600160a01b1716600160a81b17905573111100000000000000000000000000000000111192909201909116610120525061028692505050565b80516001600160a01b03811681146101c3575f80fd5b919050565b5f805f805f60a086880312156101dc575f80fd5b6101e5866101ad565b94506101f3602087016101ad565b9350610201604087016101ad565b925061020f606087016101ad565b9150608086015190509295509295909350565b5f6001600160401b038381168061024757634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561027f57634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e051610100516101205161229f6103605f395f81816105b50152818161133a015261139501525f818161050f0152611da501525f81816102d8015281816113e80152818161154b015281816115b901528181611cbc01528181611d2b0152611d5a01525f81816102a5015281816113c70152818161151e01528181611c1e0152611c8d01525f818161030b015261179201525f8181610231015281816108b60152818161096f01528181611122015281816111dc0152818161127f0152818161192601526119e9015261229f5ff3fe608060405260043610610185575f3560e01c8063713d1a4e116100d1578063bddc966e1161007c578063eec8fddc11610057578063eec8fddc146105a4578063f4427c2c146105d7578063f953cec7146105ec575f80fd5b8063bddc966e14610550578063ce5494bb1461056f578063e3f5aa511461058e575f80fd5b80639890220b116100ac5780639890220b146104ea5780639b7bb847146104fe578063a6f9dae114610531575f80fd5b8063713d1a4e146104795780638456cb59146104b75780638da5cb5b146104cb575f80fd5b80632b83cccd116101315780635a7287cf1161010c5780635a7287cf1461040e5780635bc105c0146104225780635c975abb14610436575f80fd5b80632b83cccd146103425780633f4ba83a1461036157806354d20cc214610375575f80fd5b8063256359a811610161578063256359a8146102c757806329134768146102fa57806329f404cd1461032d575f80fd5b806231d11514610220578063091d2788146102705780631bad595714610294575f80fd5b3661021c576002546001600160a01b03166101e5576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b34801561022b575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561027b575f80fd5b50610286620493e081565b604051908152602001610267565b34801561029f575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b3480156102d2575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b348015610305575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b61034061033b366004611e47565b6105ff565b005b34801561034d575f80fd5b5061034061035c366004611eea565b61073e565b34801561036c575f80fd5b50610340610b1a565b348015610380575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526103dd7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610267565b348015610419575f80fd5b506102865f5481565b34801561042d575f80fd5b50610286610bc3565b348015610441575f80fd5b506002546104679074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610267565b348015610484575f80fd5b506104a7610493366004611f1c565b60036020525f908152604090205460ff1681565b6040519015158152602001610267565b3480156104c2575f80fd5b50610340610bef565b3480156104d6575f80fd5b50600254610253906001600160a01b031681565b3480156104f5575f80fd5b50610286610c98565b348015610509575f80fd5b506102867f000000000000000000000000000000000000000000000000000000000000000081565b34801561053c575f80fd5b5061034061054b366004611f33565b610e49565b34801561055b575f80fd5b5061034061056a366004611e47565b610f2a565b34801561057a575f80fd5b50610340610589366004611f33565b610f76565b348015610599575f80fd5b50610286621e848081565b3480156105af575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e2575f80fd5b5061028660015481565b6103406105fa366004611e47565b61132f565b6002546001600160a81b90910460ff16111561062e576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036106a8576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054908190036106e5576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80556106f2818361140d565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff16111561076d576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036107e7576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1680610886576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101dc565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610903573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109279190611f55565b9050848110610ac3576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156109b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d99190611f6c565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610a32575f80fd5b505af1158015610a44573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610a8391815260200190565b60405180910390a25f83815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610aff565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101dc565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610b5a5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610bd8600267ffffffffffffffff611fb8565b610be29190612003565b67ffffffffffffffff1681565b6002546001600160a01b03163314610c2f5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff161115610cc9576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610d2d5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b479050805f03610d69576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610da8576040519150601f19603f3d011682016040523d82523d5f602084013e610dad565b606091505b5050905080610dfd576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f6004820152306024820152336044820152606481018390526084016101dc565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a01b03163314610e895760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b6001600160a01b038116610ec9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f6a5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b610f738161162b565b50565b6002546001600160a81b90910460ff161115610fa5576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b031633146110095760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b60025474010000000000000000000000000000000000000000900460ff16600103611060576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f036110ae576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016101dc565b306001600160a01b038216036110f2576040517f38e04bf20000000000000000000000000000000000000000000000000000000081523060048201526024016101dc565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561116f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111939190611f55565b905080156112c3576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611224573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112489190611f6c565b9050806112c1576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101dc565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113c2576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b610f737f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083611c1c565b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018490525f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d910160408051601f198184030181529082905261148b91602401612059565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f928c169a0000000000000000000000000000000000000000000000000000000081529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063928c169a90611575907f000000000000000000000000000000000000000000000000000000000000000090869060040161206b565b6020604051808303815f875af1158015611591573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b59190611f55565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b0316827fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e4708760405161161d91815260200190565b60405180910390a450505050565b6002546001600160a81b90910460ff16111561165a576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f9081906116989060209085018101908501612123565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b8551811015611bd7575f8682815181106116e0576116e06121e2565b602002602001015190505f8683815181106116fd576116fd6121e2565b602002602001015190505f8260405160240161172891906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906117be90859061220f565b5f604051808303815f865af19150503d805f81146117f7576040519150601f19603f3d011682016040523d82523d5f602084013e6117fc565b606091505b50915091505f828015611810575081516020145b1561182c57818060200190518101906118299190611f55565b90505b805f0361188d5761183d858a612225565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161187a91815260200190565b60405180910390a2505050505050611bcf565b808511156118f6575f6118a0828761223e565b90506118ac818b612225565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516118ec91815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611973573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119979190611f55565b101580156119a55750876001145b15611b0a576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611a2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a539190611f6c565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015611aac575f80fd5b505af1158015611abe573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051611afd91815260200190565b60405180910390a2611bc8565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f8181526003835283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b6001016116c4565b50611be3836001612225565b6001558115610aff57815f80828254611bfc9190612225565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611cba576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d58576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611dd3929190612251565b60405180910390a2611de48161162b565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e3f57611e3f611de9565b604052919050565b5f6020808385031215611e58575f80fd5b823567ffffffffffffffff80821115611e6f575f80fd5b818501915085601f830112611e82575f80fd5b813581811115611e9457611e94611de9565b611ea684601f19601f84011601611e16565b91508082528684828501011115611ebb575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f73575f80fd5b5f805f60608486031215611efc575f80fd5b8335611f0781611ed6565b95602085013595506040909401359392505050565b5f60208284031215611f2c575f80fd5b5035919050565b5f60208284031215611f43575f80fd5b8135611f4e81611ed6565b9392505050565b5f60208284031215611f65575f80fd5b5051919050565b5f60208284031215611f7c575f80fd5b81518015158114611f4e575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680611ff7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff82811682821603908082111561202457612024611f8b565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611f4e602083018461202b565b6001600160a01b0383168152604060208201525f61208c604083018461202b565b949350505050565b5f67ffffffffffffffff8211156120ad576120ad611de9565b5060051b60200190565b5f82601f8301126120c6575f80fd5b815160206120db6120d683612094565b611e16565b8083825260208201915060208460051b8701019350868411156120fc575f80fd5b602086015b848110156121185780518352918301918301612101565b509695505050505050565b5f8060408385031215612134575f80fd5b825167ffffffffffffffff8082111561214b575f80fd5b818501915085601f83011261215e575f80fd5b8151602061216e6120d683612094565b82815260059290921b8401810191818101908984111561218c575f80fd5b948201945b838610156121b35785516121a481611ed6565b82529482019490820190612191565b918801519196509093505050808211156121cb575f80fd5b506121d8858286016120b7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b8082018082111561223857612238611f8b565b92915050565b8181038181111561223857612238611f8b565b828152604060208201525f61208c604083018461202b56fea2646970667358221220a52aec9120c3fccdc9b8034dbad24cbb0e259f95e8705dd2fbc2f839ec5becac64736f6c63430008190033", - "deployedBytecode": "0x608060405260043610610185575f3560e01c8063713d1a4e116100d1578063bddc966e1161007c578063eec8fddc11610057578063eec8fddc146105a4578063f4427c2c146105d7578063f953cec7146105ec575f80fd5b8063bddc966e14610550578063ce5494bb1461056f578063e3f5aa511461058e575f80fd5b80639890220b116100ac5780639890220b146104ea5780639b7bb847146104fe578063a6f9dae114610531575f80fd5b8063713d1a4e146104795780638456cb59146104b75780638da5cb5b146104cb575f80fd5b80632b83cccd116101315780635a7287cf1161010c5780635a7287cf1461040e5780635bc105c0146104225780635c975abb14610436575f80fd5b80632b83cccd146103425780633f4ba83a1461036157806354d20cc214610375575f80fd5b8063256359a811610161578063256359a8146102c757806329134768146102fa57806329f404cd1461032d575f80fd5b806231d11514610220578063091d2788146102705780631bad595714610294575f80fd5b3661021c576002546001600160a01b03166101e5576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b34801561022b575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561027b575f80fd5b50610286620493e081565b604051908152602001610267565b34801561029f575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b3480156102d2575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b348015610305575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b61034061033b366004611e47565b6105ff565b005b34801561034d575f80fd5b5061034061035c366004611eea565b61073e565b34801561036c575f80fd5b50610340610b1a565b348015610380575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526103dd7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610267565b348015610419575f80fd5b506102865f5481565b34801561042d575f80fd5b50610286610bc3565b348015610441575f80fd5b506002546104679074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610267565b348015610484575f80fd5b506104a7610493366004611f1c565b60036020525f908152604090205460ff1681565b6040519015158152602001610267565b3480156104c2575f80fd5b50610340610bef565b3480156104d6575f80fd5b50600254610253906001600160a01b031681565b3480156104f5575f80fd5b50610286610c98565b348015610509575f80fd5b506102867f000000000000000000000000000000000000000000000000000000000000000081565b34801561053c575f80fd5b5061034061054b366004611f33565b610e49565b34801561055b575f80fd5b5061034061056a366004611e47565b610f2a565b34801561057a575f80fd5b50610340610589366004611f33565b610f76565b348015610599575f80fd5b50610286621e848081565b3480156105af575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e2575f80fd5b5061028660015481565b6103406105fa366004611e47565b61132f565b6002546001600160a81b90910460ff16111561062e576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036106a8576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054908190036106e5576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80556106f2818361140d565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff16111561076d576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036107e7576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1680610886576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101dc565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610903573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109279190611f55565b9050848110610ac3576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156109b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d99190611f6c565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610a32575f80fd5b505af1158015610a44573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610a8391815260200190565b60405180910390a25f83815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610aff565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101dc565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610b5a5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610bd8600267ffffffffffffffff611fb8565b610be29190612003565b67ffffffffffffffff1681565b6002546001600160a01b03163314610c2f5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff161115610cc9576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610d2d5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b479050805f03610d69576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610da8576040519150601f19603f3d011682016040523d82523d5f602084013e610dad565b606091505b5050905080610dfd576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f6004820152306024820152336044820152606481018390526084016101dc565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a01b03163314610e895760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b6001600160a01b038116610ec9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f6a5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b610f738161162b565b50565b6002546001600160a81b90910460ff161115610fa5576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b031633146110095760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b60025474010000000000000000000000000000000000000000900460ff16600103611060576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f036110ae576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016101dc565b306001600160a01b038216036110f2576040517f38e04bf20000000000000000000000000000000000000000000000000000000081523060048201526024016101dc565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561116f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111939190611f55565b905080156112c3576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611224573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112489190611f6c565b9050806112c1576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101dc565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113c2576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b610f737f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083611c1c565b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018490525f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d910160408051601f198184030181529082905261148b91602401612059565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f928c169a0000000000000000000000000000000000000000000000000000000081529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063928c169a90611575907f000000000000000000000000000000000000000000000000000000000000000090869060040161206b565b6020604051808303815f875af1158015611591573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b59190611f55565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b0316827fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e4708760405161161d91815260200190565b60405180910390a450505050565b6002546001600160a81b90910460ff16111561165a576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f9081906116989060209085018101908501612123565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b8551811015611bd7575f8682815181106116e0576116e06121e2565b602002602001015190505f8683815181106116fd576116fd6121e2565b602002602001015190505f8260405160240161172891906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906117be90859061220f565b5f604051808303815f865af19150503d805f81146117f7576040519150601f19603f3d011682016040523d82523d5f602084013e6117fc565b606091505b50915091505f828015611810575081516020145b1561182c57818060200190518101906118299190611f55565b90505b805f0361188d5761183d858a612225565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161187a91815260200190565b60405180910390a2505050505050611bcf565b808511156118f6575f6118a0828761223e565b90506118ac818b612225565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516118ec91815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611973573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119979190611f55565b101580156119a55750876001145b15611b0a576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611a2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a539190611f6c565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015611aac575f80fd5b505af1158015611abe573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051611afd91815260200190565b60405180910390a2611bc8565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f8181526003835283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b6001016116c4565b50611be3836001612225565b6001558115610aff57815f80828254611bfc9190612225565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611cba576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d58576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611dd3929190612251565b60405180910390a2611de48161162b565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e3f57611e3f611de9565b604052919050565b5f6020808385031215611e58575f80fd5b823567ffffffffffffffff80821115611e6f575f80fd5b818501915085601f830112611e82575f80fd5b813581811115611e9457611e94611de9565b611ea684601f19601f84011601611e16565b91508082528684828501011115611ebb575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f73575f80fd5b5f805f60608486031215611efc575f80fd5b8335611f0781611ed6565b95602085013595506040909401359392505050565b5f60208284031215611f2c575f80fd5b5035919050565b5f60208284031215611f43575f80fd5b8135611f4e81611ed6565b9392505050565b5f60208284031215611f65575f80fd5b5051919050565b5f60208284031215611f7c575f80fd5b81518015158114611f4e575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680611ff7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff82811682821603908082111561202457612024611f8b565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611f4e602083018461202b565b6001600160a01b0383168152604060208201525f61208c604083018461202b565b949350505050565b5f67ffffffffffffffff8211156120ad576120ad611de9565b5060051b60200190565b5f82601f8301126120c6575f80fd5b815160206120db6120d683612094565b611e16565b8083825260208201915060208460051b8701019350868411156120fc575f80fd5b602086015b848110156121185780518352918301918301612101565b509695505050505050565b5f8060408385031215612134575f80fd5b825167ffffffffffffffff8082111561214b575f80fd5b818501915085601f83011261215e575f80fd5b8151602061216e6120d683612094565b82815260059290921b8401810191818101908984111561218c575f80fd5b948201945b838610156121b35785516121a481611ed6565b82529482019490820190612191565b918801519196509093505050808211156121cb575f80fd5b506121d8858286016120b7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b8082018082111561223857612238611f8b565b92915050565b8181038181111561223857612238611f8b565b828152604060208201525f61208c604083018461202b56fea2646970667358221220a52aec9120c3fccdc9b8034dbad24cbb0e259f95e8705dd2fbc2f839ec5becac64736f6c63430008190033", + "bytecode": "0x610140604052348015610010575f80fd5b5060405161247538038061247583398101604081905261002f916101c8565b84848484846001600160a01b038516158061005157506001600160a01b038416155b8061006357506001600160a01b038316155b8061007557506001600160a01b038216155b156100935760405163d92e233d60e01b815260040160405180910390fd5b805f036100b357604051637c946ed760e01b815260040160405180910390fd5b60246100c760026001600160401b03610222565b6100d19190610253565b6001600160401b031681111561012f578060246100f660026001600160401b03610222565b6101009190610253565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e052610100526002805460ff60a81b1960ff60a01b1933166001600160a81b031990921691909117600160a01b1716600160a81b17905573111100000000000000000000000000000000111192909201909116610120525061028692505050565b80516001600160a01b03811681146101c3575f80fd5b919050565b5f805f805f60a086880312156101dc575f80fd5b6101e5866101ad565b94506101f3602087016101ad565b9350610201604087016101ad565b925061020f606087016101ad565b9150608086015190509295509295909350565b5f6001600160401b038381168061024757634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561027f57634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e051610100516101205161211c6103595f395f81816105e20152818161128501526112c701525f81816105290152611c3901525f818161031d0152818161131a0152818161148701528181611b6901528181611bbf0152611bee01525f81816102ea015281816112f90152818161145a01528181611acb0152611b3a01525f818161035001526116a201525f818161022e01528181610c0601528181610ca60152818161108601528181611140015281816111ca0152818161181d01526118cb015261211c5ff3fe60806040526004361061019b575f3560e01c80638456cb59116100dc578063a8b2ae0211610087578063e3f5aa5111610062578063e3f5aa51146105bb578063eec8fddc146105d1578063f4427c2c14610604578063f953cec714610619575f80fd5b8063a8b2ae021461056a578063bddc966e1461057d578063ce5494bb1461059c575f80fd5b8063992c3e4b116100b7578063992c3e4b146104f95780639b7bb84714610518578063a6f9dae11461054b575f80fd5b80638456cb59146104b25780638da5cb5b146104c65780639890220b146104e5575f80fd5b80633f4ba83a116101475780635bc105c0116101225780635bc105c0146104435780635c975abb146104575780637424ddc8146104895780637ce1ffeb1461049c575f80fd5b80633f4ba83a1461037257806354d20cc2146103885780635a7287cf14610421575f80fd5b80631bad5957116101775780631bad5957146102d9578063256359a81461030c578063291347681461033f575f80fd5b806231d1151461021d57806307d9c5341461026d5780631b2e7f0a146102ab575f80fd5b36610219576002546001600160a01b03166101e25760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610228575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610278575f80fd5b5061029b610287366004611c7d565b60036020525f908152604090205460ff1681565b6040519015158152602001610264565b3480156102b6575f80fd5b5061029b6102c5366004611c7d565b60046020525f908152604090205460ff1681565b3480156102e4575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b348015610317575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561037d575f80fd5b5061038661062c565b005b348015610393575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526103f07ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610264565b34801561042c575f80fd5b506104355f5481565b604051908152602001610264565b34801561044e575f80fd5b506104356106c4565b348015610462575f80fd5b5060025461047790600160a01b900460ff1681565b60405160ff9091168152602001610264565b610386610497366004611cd9565b6106f0565b3480156104a7575f80fd5b50610435620493e081565b3480156104bd575f80fd5b506103866108c1565b3480156104d1575f80fd5b50600254610250906001600160a01b031681565b3480156104f0575f80fd5b5061043561096a565b348015610504575f80fd5b50610386610513366004611d7c565b610ad7565b348015610523575f80fd5b506104357f000000000000000000000000000000000000000000000000000000000000000081565b348015610556575f80fd5b50610386610565366004611dae565b610e1b565b348015610575575f80fd5b506012610435565b348015610588575f80fd5b50610386610597366004611cd9565b610efc565b3480156105a7575f80fd5b506103866105b6366004611dae565b610f48565b3480156105c6575f80fd5b50610435621e848081565b3480156105dc575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561060f575f80fd5b5061043560015481565b610386610627366004611cd9565b61127a565b6002546001600160a01b0316331461066c5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b60246106d9600267ffffffffffffffff611df8565b6106e39190611e1e565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff16111561071f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b90910416900361075d576040516313d0ff5960e31b815260040160405180910390fd5b5f54601281805f0361078257604051637c946ed760e01b815260040160405180910390fd5b61078c8184611e46565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f806107d785898561133f565b9092509050801561085d57604051339082905f81818185875af1925050503d805f811461081f576040519150601f19603f3d011682016040523d82523d5f602084013e610824565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610868846001611e9c565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b031633146109015760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff16111561099b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146109ed5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b479050805f03610a1057604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610a4f576040519150601f19603f3d011682016040523d82523d5f602084013e610a54565b606091505b5050905080610a8b5760405163cd3f165960e01b81525f6004820152306024820152336044820152606481018390526084016101d9565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff161115610b06576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610b44576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680610bef576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610c53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c779190611eaf565b9050848110610dc45760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610cec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d109190611ec6565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610d50575f80fd5b505af1158015610d62573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c32198087604051610da291815260200190565b60405180910390a35f838152600460205260409020805460ff19169055610e00565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101d9565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610e5b5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b6001600160a01b038116610e9b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f3c5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b610f45816114fd565b50565b6002546001600160a81b90910460ff161115610f77576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b03163314610fc95760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600254600160a01b900460ff1660010361100f576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361104457604051631c7025f960e11b81526001600160a01b03821660048201526024016101d9565b306001600160a01b0382160361106f57604051631c7025f960e11b81523060048201526024016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156110d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f79190611eaf565b9050801561120e576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611188573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ac9190611ec6565b90508061120c5760405163cd3f165960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101d9565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112f457604051630d16cbdd60e01b81523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b610f457f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083611ac9565b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018590529081018290525f90819081907ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d9060600160408051601f19818403018152908290526113c991602401611f13565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f928c169a0000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063928c169a906114b1907f0000000000000000000000000000000000000000000000000000000000000000908590600401611f25565b6020604051808303815f875af11580156114cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f19190611eaf565b96349650945050505050565b6002546001600160a81b90910460ff16111561152c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f908190819061155a9060209086018101908601611fdd565b5f81815260036020526040902054929550909350915060ff16156115ad576040517f56bc34a1000000000000000000000000000000000000000000000000000000008152600481018290526024016101d9565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015611a92575f8682815181106115f0576115f06120a4565b602002602001015190505f86838151811061160d5761160d6120a4565b602002602001015190505f8260405160240161163891906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906116ce9085906120b8565b5f604051808303815f865af19150503d805f8114611707576040519150601f19603f3d011682016040523d82523d5f602084013e61170c565b606091505b50915091505f828015611720575081516020145b1561173c57818060200190518101906117399190611eaf565b90505b805f0361179d5761174d858a611e9c565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161178a91815260200190565b60405180910390a2505050505050611a8a565b80851115611806575f6117b08287611e46565b90506117bc818b611e9c565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516117fc91815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561186a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188e9190611eaf565b90508581101580156118a05750886001145b156119d45760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611911573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119359190611ec6565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015611975575f80fd5b505af1158015611987573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c321980886040516119c791815260200190565b60405180910390a3611a82565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b6001016115d4565b508115610e0057815f80828254611aa99190611e9c565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611b67576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611bec57604051630d16cbdd60e01b81526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611c679291906120ce565b60405180910390a2611c78816114fd565b505050565b5f60208284031215611c8d575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cd157611cd1611c94565b604052919050565b5f6020808385031215611cea575f80fd5b823567ffffffffffffffff80821115611d01575f80fd5b818501915085601f830112611d14575f80fd5b813581811115611d2657611d26611c94565b611d38601f8201601f19168501611ca8565b91508082528684828501011115611d4d575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f45575f80fd5b5f805f60608486031215611d8e575f80fd5b8335611d9981611d68565b95602085013595506040909401359392505050565b5f60208284031215611dbe575f80fd5b8135611dc981611d68565b9392505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611e1257611e12611dd0565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611e3f57611e3f611de4565b5092915050565b81810381811115611e5957611e59611de4565b92915050565b80851115611e9457815f1904821115611e7a57611e7a611de4565b80851615611e8757918102915b93841c9390800290611e5f565b509250929050565b80820180821115611e5957611e59611de4565b5f60208284031215611ebf575f80fd5b5051919050565b5f60208284031215611ed6575f80fd5b81518015158114611dc9575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611dc96020830184611ee5565b6001600160a01b0383168152604060208201525f611f466040830184611ee5565b949350505050565b5f67ffffffffffffffff821115611f6757611f67611c94565b5060051b60200190565b5f82601f830112611f80575f80fd5b81516020611f95611f9083611f4e565b611ca8565b8083825260208201915060208460051b870101935086841115611fb6575f80fd5b602086015b84811015611fd25780518352918301918301611fbb565b509695505050505050565b5f805f60608486031215611fef575f80fd5b835167ffffffffffffffff80821115612006575f80fd5b818601915086601f830112612019575f80fd5b81516020612029611f9083611f4e565b82815260059290921b8401810191818101908a841115612047575f80fd5b948201945b8386101561206e57855161205f81611d68565b8252948201949082019061204c565b91890151919750909350505080821115612086575f80fd5b5061209386828701611f71565b925050604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b828152604060208201525f611f466040830184611ee556fea2646970667358221220eb969d2c32b3a2e175ba39d7ed8e92824742622b266b8ce2905d85d97642784f64736f6c63430008190033", + "deployedBytecode": "0x60806040526004361061019b575f3560e01c80638456cb59116100dc578063a8b2ae0211610087578063e3f5aa5111610062578063e3f5aa51146105bb578063eec8fddc146105d1578063f4427c2c14610604578063f953cec714610619575f80fd5b8063a8b2ae021461056a578063bddc966e1461057d578063ce5494bb1461059c575f80fd5b8063992c3e4b116100b7578063992c3e4b146104f95780639b7bb84714610518578063a6f9dae11461054b575f80fd5b80638456cb59146104b25780638da5cb5b146104c65780639890220b146104e5575f80fd5b80633f4ba83a116101475780635bc105c0116101225780635bc105c0146104435780635c975abb146104575780637424ddc8146104895780637ce1ffeb1461049c575f80fd5b80633f4ba83a1461037257806354d20cc2146103885780635a7287cf14610421575f80fd5b80631bad5957116101775780631bad5957146102d9578063256359a81461030c578063291347681461033f575f80fd5b806231d1151461021d57806307d9c5341461026d5780631b2e7f0a146102ab575f80fd5b36610219576002546001600160a01b03166101e25760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610228575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610278575f80fd5b5061029b610287366004611c7d565b60036020525f908152604090205460ff1681565b6040519015158152602001610264565b3480156102b6575f80fd5b5061029b6102c5366004611c7d565b60046020525f908152604090205460ff1681565b3480156102e4575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b348015610317575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561037d575f80fd5b5061038661062c565b005b348015610393575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526103f07ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610264565b34801561042c575f80fd5b506104355f5481565b604051908152602001610264565b34801561044e575f80fd5b506104356106c4565b348015610462575f80fd5b5060025461047790600160a01b900460ff1681565b60405160ff9091168152602001610264565b610386610497366004611cd9565b6106f0565b3480156104a7575f80fd5b50610435620493e081565b3480156104bd575f80fd5b506103866108c1565b3480156104d1575f80fd5b50600254610250906001600160a01b031681565b3480156104f0575f80fd5b5061043561096a565b348015610504575f80fd5b50610386610513366004611d7c565b610ad7565b348015610523575f80fd5b506104357f000000000000000000000000000000000000000000000000000000000000000081565b348015610556575f80fd5b50610386610565366004611dae565b610e1b565b348015610575575f80fd5b506012610435565b348015610588575f80fd5b50610386610597366004611cd9565b610efc565b3480156105a7575f80fd5b506103866105b6366004611dae565b610f48565b3480156105c6575f80fd5b50610435621e848081565b3480156105dc575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561060f575f80fd5b5061043560015481565b610386610627366004611cd9565b61127a565b6002546001600160a01b0316331461066c5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b60246106d9600267ffffffffffffffff611df8565b6106e39190611e1e565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff16111561071f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b90910416900361075d576040516313d0ff5960e31b815260040160405180910390fd5b5f54601281805f0361078257604051637c946ed760e01b815260040160405180910390fd5b61078c8184611e46565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f806107d785898561133f565b9092509050801561085d57604051339082905f81818185875af1925050503d805f811461081f576040519150601f19603f3d011682016040523d82523d5f602084013e610824565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610868846001611e9c565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b031633146109015760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff16111561099b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146109ed5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b479050805f03610a1057604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610a4f576040519150601f19603f3d011682016040523d82523d5f602084013e610a54565b606091505b5050905080610a8b5760405163cd3f165960e01b81525f6004820152306024820152336044820152606481018390526084016101d9565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff161115610b06576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610b44576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680610bef576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610c53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c779190611eaf565b9050848110610dc45760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610cec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d109190611ec6565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610d50575f80fd5b505af1158015610d62573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c32198087604051610da291815260200190565b60405180910390a35f838152600460205260409020805460ff19169055610e00565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101d9565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610e5b5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b6001600160a01b038116610e9b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f3c5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b610f45816114fd565b50565b6002546001600160a81b90910460ff161115610f77576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b03163314610fc95760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600254600160a01b900460ff1660010361100f576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361104457604051631c7025f960e11b81526001600160a01b03821660048201526024016101d9565b306001600160a01b0382160361106f57604051631c7025f960e11b81523060048201526024016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156110d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f79190611eaf565b9050801561120e576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611188573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ac9190611ec6565b90508061120c5760405163cd3f165960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101d9565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112f457604051630d16cbdd60e01b81523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b610f457f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083611ac9565b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018590529081018290525f90819081907ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d9060600160408051601f19818403018152908290526113c991602401611f13565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f928c169a0000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063928c169a906114b1907f0000000000000000000000000000000000000000000000000000000000000000908590600401611f25565b6020604051808303815f875af11580156114cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f19190611eaf565b96349650945050505050565b6002546001600160a81b90910460ff16111561152c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f908190819061155a9060209086018101908601611fdd565b5f81815260036020526040902054929550909350915060ff16156115ad576040517f56bc34a1000000000000000000000000000000000000000000000000000000008152600481018290526024016101d9565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015611a92575f8682815181106115f0576115f06120a4565b602002602001015190505f86838151811061160d5761160d6120a4565b602002602001015190505f8260405160240161163891906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906116ce9085906120b8565b5f604051808303815f865af19150503d805f8114611707576040519150601f19603f3d011682016040523d82523d5f602084013e61170c565b606091505b50915091505f828015611720575081516020145b1561173c57818060200190518101906117399190611eaf565b90505b805f0361179d5761174d858a611e9c565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161178a91815260200190565b60405180910390a2505050505050611a8a565b80851115611806575f6117b08287611e46565b90506117bc818b611e9c565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516117fc91815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561186a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188e9190611eaf565b90508581101580156118a05750886001145b156119d45760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611911573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119359190611ec6565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015611975575f80fd5b505af1158015611987573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c321980886040516119c791815260200190565b60405180910390a3611a82565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b6001016115d4565b508115610e0057815f80828254611aa99190611e9c565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611b67576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611bec57604051630d16cbdd60e01b81526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611c679291906120ce565b60405180910390a2611c78816114fd565b505050565b5f60208284031215611c8d575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cd157611cd1611c94565b604052919050565b5f6020808385031215611cea575f80fd5b823567ffffffffffffffff80821115611d01575f80fd5b818501915085601f830112611d14575f80fd5b813581811115611d2657611d26611c94565b611d38601f8201601f19168501611ca8565b91508082528684828501011115611d4d575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f45575f80fd5b5f805f60608486031215611d8e575f80fd5b8335611d9981611d68565b95602085013595506040909401359392505050565b5f60208284031215611dbe575f80fd5b8135611dc981611d68565b9392505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611e1257611e12611dd0565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611e3f57611e3f611de4565b5092915050565b81810381811115611e5957611e59611de4565b92915050565b80851115611e9457815f1904821115611e7a57611e7a611de4565b80851615611e8757918102915b93841c9390800290611e5f565b509250929050565b80820180821115611e5957611e59611de4565b5f60208284031215611ebf575f80fd5b5051919050565b5f60208284031215611ed6575f80fd5b81518015158114611dc9575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611dc96020830184611ee5565b6001600160a01b0383168152604060208201525f611f466040830184611ee5565b949350505050565b5f67ffffffffffffffff821115611f6757611f67611c94565b5060051b60200190565b5f82601f830112611f80575f80fd5b81516020611f95611f9083611f4e565b611ca8565b8083825260208201915060208460051b870101935086841115611fb6575f80fd5b602086015b84811015611fd25780518352918301918301611fbb565b509695505050505050565b5f805f60608486031215611fef575f80fd5b835167ffffffffffffffff80821115612006575f80fd5b818601915086601f830112612019575f80fd5b81516020612029611f9083611f4e565b82815260059290921b8401810191818101908a841115612047575f80fd5b948201945b8386101561206e57855161205f81611d68565b8252948201949082019061204c565b91890151919750909350505080821115612086575f80fd5b5061209386828701611f71565b925050604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b828152604060208201525f611f466040830184611ee556fea2646970667358221220eb969d2c32b3a2e175ba39d7ed8e92824742622b266b8ce2905d85d97642784f64736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/DefaultDepositProcessorL1.json b/abis/0.8.25/DefaultDepositProcessorL1.json index 43068717..2f15fa19 100644 --- a/abis/0.8.25/DefaultDepositProcessorL1.json +++ b/abis/0.8.25/DefaultDepositProcessorL1.json @@ -133,9 +133,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -286,6 +286,25 @@ "name": "L2TargetDispenserUpdated", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "leftovers", + "type": "uint256" + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -312,6 +331,12 @@ "internalType": "uint256", "name": "transferAmount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -498,6 +523,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -579,6 +623,19 @@ ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + } + ], + "name": "updateHashMaintenance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ], "bytecode": "0x", diff --git a/abis/0.8.25/DefaultTargetDispenserL2.json b/abis/0.8.25/DefaultTargetDispenserL2.json index e1cb576b..3d38e8a7 100644 --- a/abis/0.8.25/DefaultTargetDispenserL2.json +++ b/abis/0.8.25/DefaultTargetDispenserL2.json @@ -133,9 +133,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -335,20 +335,33 @@ "inputs": [ { "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, "internalType": "uint256", - "name": "sequence", + "name": "leftovers", "type": "uint256" - }, + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": true, - "internalType": "address", - "name": "messageSender", - "type": "address" + "internalType": "uint256", + "name": "sequence", + "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "l1Processor", + "name": "messageSender", "type": "address" }, { @@ -356,6 +369,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -445,10 +464,16 @@ "name": "amount", "type": "uint256" }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, { "indexed": false, "internalType": "uint256", - "name": "batchNonce", + "name": "olasBalance", "type": "uint256" }, { @@ -475,6 +500,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "StakingTargetDeposited", @@ -492,28 +523,9 @@ "name": "TargetDispenserUnpaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithheldAmountSynced", - "type": "event" - }, { "inputs": [], - "name": "GAS_LIMIT", + "name": "MAX_CHAIN_ID", "outputs": [ { "internalType": "uint256", @@ -526,7 +538,7 @@ }, { "inputs": [], - "name": "MAX_CHAIN_ID", + "name": "MAX_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -539,7 +551,7 @@ }, { "inputs": [], - "name": "MAX_GAS_LIMIT", + "name": "MIN_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -589,6 +601,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "getBridgingDecimals", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, { "inputs": [], "name": "l1DepositProcessor", @@ -700,6 +725,44 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "queuedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -713,9 +776,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "redeem", @@ -749,25 +812,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "stakingQueueingNonces", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -776,7 +820,7 @@ "type": "bytes" } ], - "name": "syncWithheldTokens", + "name": "syncWithheldAmount", "outputs": [], "stateMutability": "payable", "type": "function" diff --git a/abis/0.8.25/Dispenser.json b/abis/0.8.25/Dispenser.json index caa8490a..f64364ca 100644 --- a/abis/0.8.25/Dispenser.json +++ b/abis/0.8.25/Dispenser.json @@ -39,6 +39,16 @@ "internalType": "uint256", "name": "_maxNumStakingTargets", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_defaultMinStakingWeight", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_defaultMaxStakingIncentive", + "type": "uint256" } ], "stateMutability": "nonpayable", @@ -401,6 +411,12 @@ "internalType": "uint256", "name": "updatedWithheldAmount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "WithheldAmountSynced", @@ -625,6 +641,32 @@ "stateMutability": "payable", "type": "function" }, + { + "inputs": [], + "name": "defaultMaxStakingIncentive", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultMinStakingWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -701,6 +743,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "mapZeroWeightEpochRefunded", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "maxNumClaimingEpochs", @@ -854,6 +915,11 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "syncWithheldAmount", @@ -872,6 +938,11 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "syncWithheldAmountMaintenance", @@ -919,8 +990,8 @@ "type": "function" } ], - "bytecode": "0x60e060405234801561000f575f80fd5b5060405161471e38038061471e83398101604081905261002e9161019f565b6002805460ff60a01b1933166001600160a81b031990911617600160a01b1760ff60a81b1916600160a91b1790556001600160a01b038716158061007957506001600160a01b038616155b8061008b57506001600160a01b038516155b8061009d57506001600160a01b038416155b806100a6575082155b156100c45760405163d92e233d60e01b815260040160405180910390fd5b8115806100cf575080155b156100ed57604051637c946ed760e01b815260040160405180910390fd5b6001600160a01b03968716608052600380549688166001600160a01b031997881617905560048054958816958716959095179094556005805493909616929094169190911790935560a08390526040805180820182528481524660209182019081528251808301969096525185830152815180860383018152606095909501909152835193019290922060c0525f5560015561020b565b80516001600160a01b038116811461019a575f80fd5b919050565b5f805f805f805f60e0888a0312156101b5575f80fd5b6101be88610184565b96506101cc60208901610184565b95506101da60408901610184565b94506101e860608901610184565b93506080880151925060a0880151915060c0880151905092959891949750929550565b60805160a05160c05161448e6102905f395f81816102b30152818161128201528181611b1f0152611b4601525f81816105ac015281816112b50152611c7101525f81816101ce015281816108e4015281816109eb01528181610d6b01528181610eba0152818161244e0152818161255b0152818161288f0152613263015261448e5ff3fe6080604052600436106101b9575f3560e01c8063781f4ae3116100f2578063bb78678f11610092578063d8bf69bf11610062578063d8bf69bf14610548578063dcb5ccc414610567578063e6be59e71461059b578063f4da12ba146105ce575f80fd5b8063bb78678f146104ab578063bc7d5c5c146104d6578063d5297793146104f5578063d7accbcc14610514575f80fd5b80638da5cb5b116100cd5780638da5cb5b1461043a5780639649a35c14610459578063a5edd4fc1461046d578063a6f9dae11461048c575f80fd5b8063781f4ae3146103dc5780638513e77d146103fb5780638833c20514610426575f80fd5b80634ac7251d1161015d57806361d027b31161013857806361d027b314610340578063630965091461035f57806363c4d28e1461037e578063777e49c91461039d575f80fd5b80634ac7251d146102d557806359a8dfb9146102f45780635c975abb14610313575f80fd5b80632c0f3f29116101985780632c0f3f291461026557806334be5af41461027a5780633907196c1461028f5780633c18d1dd146102a2575f80fd5b806231d115146101bd5780630d3241ee1461020d5780632ad923dc1461022c575b5f80fd5b3480156101c8575f80fd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610218575f80fd5b506005546101f0906001600160a01b031681565b348015610237575f80fd5b5061025761024636600461395a565b60066020525f908152604090205481565b604051908152602001610204565b610278610273366004613a22565b6105e2565b005b348015610285575f80fd5b5061025760015481565b61027861029d366004613b82565b610b08565b3480156102ad575f80fd5b506102577f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e0575f80fd5b506003546101f0906001600160a01b031681565b3480156102ff575f80fd5b5061027861030e366004613d02565b61106a565b34801561031e575f80fd5b5060025461033390600160a81b900460ff1681565b6040516102049190613d36565b34801561034b575f80fd5b506004546101f0906001600160a01b031681565b34801561036a575f80fd5b50610278610379366004613d5c565b611180565b348015610389575f80fd5b5061027861039836600461395a565b61123f565b3480156103a8575f80fd5b506103bc6103b7366004613d81565b6114c2565b604080519485526020850193909352918301526060820152608001610204565b3480156103e7575f80fd5b506102786103f6366004613d02565b6118c8565b348015610406575f80fd5b5061025761041536600461395a565b60076020525f908152604090205481565b348015610431575f80fd5b506102575f5481565b348015610445575f80fd5b506002546101f0906001600160a01b031681565b348015610464575f80fd5b50610278611ad2565b348015610478575f80fd5b5061027861048736600461395a565b611df5565b348015610497575f80fd5b506102786104a6366004613dcb565b611f98565b3480156104b6575f80fd5b506102576104c536600461395a565b60096020525f908152604090205481565b3480156104e1575f80fd5b506102786104f0366004613d02565b612055565b348015610500575f80fd5b5061027861050f366004613de4565b612105565b34801561051f575f80fd5b5061053361052e366004613e24565b612273565b60408051928352602083019190915201610204565b348015610553575f80fd5b50610278610562366004613e84565b6126a4565b348015610572575f80fd5b506101f061058136600461395a565b60086020525f90815260409020546001600160a01b031681565b3480156105a6575f80fd5b506102577f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d9575f80fd5b50610257612807565b6002546001600160a01b90910460ff161115610611576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361064557604051637c946ed760e01b815260040160405180910390fd5b5f8290036106665760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561069857604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff16908160038111156106b9576106b9613d22565b14806106d6575060038160038111156106d4576106d4613d22565b145b8061074d57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610722573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107469190613f37565b60ff166002145b1561076b576040516313d0ff5960e31b815260040160405180910390fd5b5f858152600860209081526040808320548151635459570160e11b815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa1580156107bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e19190613f50565b90505f805f806107f38c8c8c886114c2565b5f81815260066020526040902082905592965090945092509050821561086d57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610856575f80fd5b505af1158015610868573d5f803e3d5ffd5b505050505b5f8415610aa357505f8b815260096020526040902054849080156108c7578181106108a65761089c8282613f7b565b90505f91506108b6565b6108b08183613f7b565b91505f90505b5f8d81526009602052604090208190555b8115610a94576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610931573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109559190613f50565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af11580156109af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d39190613f94565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5c9190613f50565b610a669190613f7b565b9050828114610a925760405163312b003360e01b8152600481018290526024810184905260440161068f565b505b610aa18d8d888e86612833565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610b37576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610b5684848484612a31565b5f5480861115610b8357604051637ae5968560e01b8152600481018790526024810182905260440161068f565b60028054600160a81b900460ff1690816003811115610ba457610ba4613d22565b1480610bc157506003816003811115610bbf57610bbf613d22565b145b80610c3857506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610c0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c319190613f37565b60ff166002145b15610c56576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610c668a8a8a612d2f565b825192955090935091505f9084906002908110610c8557610c85613fb3565b60200260200101511115610d115760035483516001600160a01b039091169063bc291e129085906002908110610cbd57610cbd613fb3565b60200260200101516040518263ffffffff1660e01b8152600401610ce391815260200190565b5f604051808303815f87803b158015610cfa575f80fd5b505af1158015610d0c573d5f803e3d5ffd5b505050505b5f835f81518110610d2457610d24613fb3565b60200260200101511115610fa8575f83600181518110610d4657610d46613fb3565b60200260200101511115610f9a576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ddc9190613f50565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610e0b57610e0b613fb3565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610e7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea29190613f94565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610f07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2b9190613f50565b610f359190613f7b565b905083600181518110610f4a57610f4a613fb3565b60200260200101518114610f98578084600181518110610f6c57610f6c613fb3565b602002602001015160405163312b003360e01b815260040161068f929190918252602082015260400190565b505b610fa88989848a858b6131f5565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f81518110610fe557610fe5613fb3565b60200260200101518560018151811061100057611000613fb3565b60200260200101518660028151811061101b5761101b613fb3565b6020026020010151604051611043939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b5f828152600860205260409020546001600160a01b03163381146110cb576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038216602482015260440161068f565b5f838152600960205260408120546110e4908490613fc7565b90506bffffffffffffffffffffffff81111561112857604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff602482015260440161068f565b5f8481526009602090815260409182902083905581518681529081018590529081018290527f129e6b09fa0e9f8e35543706348319342d70038db68e26dcdf4fde0f7bd484c79060600160405180910390a150505050565b6002546001600160a01b031633146111c05760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561120057611200613d22565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516112349190613d36565b60405180910390a150565b6005546001600160a01b0316331461127f5760055460405163312d21ff60e11b81523360048201526001600160a01b03909116602482015260440161068f565b807f0000000000000000000000000000000000000000000000000000000000000000036112e157604051636aba776560e11b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260240161068f565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa158015611341573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113659190613fda565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d61138e600185613f7b565b6040518263ffffffff1660e01b81526004016113ac91815260200190565b602060405180830381865afa1580156113c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113eb9190613f50565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561143e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114629190613fda565b63ffffffff1690505f62093a806114798385613fc7565b6114839190613f7b565b90508042106114ae57604051637ae5968560e01b81524260048201526024810182905260440161068f565b5050505f9182526007602052604090912055565b5f805f80865f036114e657604051637c946ed760e01b815260040160405180910390fd5b5f8690036115075760405163d92e233d60e01b815260040160405180910390fd5b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61154b828a6137fe565b6005546040517fbeaf44e8000000000000000000000000000000000000000000000000000000008152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b1580156115b4575f80fd5b505af11580156115c6573d5f803e3d5ffd5b5083925050505b838110156118bb57600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561161c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116409190614018565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa15801561168c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b09190613f50565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172d919061409b565b855191935091505f9081906bffffffffffffffffffffffff16818482111561175f576117598583613f7b565b90508491505b60408801516117789061ffff16655af3107a40006140bd565b8610156117ae57670de0b6b3a7640000866117938484613fc7565b61179d91906140bd565b6117a791906140e8565b925061189c565b670de0b6b3a76400006117c187846140bd565b6117cb91906140e8565b9350670de0b6b3a76400006117e087836140bd565b6117ea91906140e8565b925087602001516bffffffffffffffffffffffff16915081841115611823576118138285613f7b565b61181d9084613fc7565b92508193505b60128f101561188f575f8f601261183a9190613f7b565b61184590600a6141db565b61184f90866140e8565b90508f601261185e9190613f7b565b61186990600a6141db565b61187390826140bd565b905061187f8186613f7b565b6118899085613fc7565b90945092505b611899848f613fc7565b9d505b6118a6838e613fc7565b9c5050505050505050508060010190506115cd565b5050945094509450949050565b6002546001600160a01b031633146119085760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b811580611913575080155b1561193157604051637c946ed760e01b815260040160405180910390fd5b46820361195457604051633881b68960e01b81526004810183905260240161068f565b5f828152600860209081526040808320548151635459570160e11b815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa1580156119a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ca9190613f50565b90506012811015611a1c575f6119e1826012613f7b565b6119ec90600a6141db565b6119f690856140e8565b9050611a03826012613f7b565b611a0e90600a6141db565b611a1890826140bd565b9350505b5f84815260096020526040812054611a35908590613fc7565b90506bffffffffffffffffffffffff811115611a7957604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff602482015260440161068f565b5f8581526009602090815260409182902083905581518781529081018690529081018290527f129e6b09fa0e9f8e35543706348319342d70038db68e26dcdf4fde0f7bd484c79060600160405180910390a15050505050565b6002546001600160a01b90910460ff161115611b01576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611b44907f0000000000000000000000000000000000000000000000000000000000000000906137fe565b7f00000000000000000000000000000000000000000000000000000000000000005f9081526006602052604081208290559193509150825b82811015611d3357600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bef9190614018565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611c3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c5f9190613f50565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611cd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cfa919061409b565b508351909150611d199082906bffffffffffffffffffffffff166140bd565b611d239086613fc7565b9450505050806001019050611b7c565b50611d46670de0b6b3a7640000826140e8565b90508015611da857600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611d91575f80fd5b505af1158015611da3573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b03163314611e355760055460405163312d21ff60e11b81523360048201526001600160a01b03909116602482015260440161068f565b60028054600160a81b900460ff1690816003811115611e5657611e56613d22565b1480611e7357506003816003811115611e7157611e71613d22565b145b80611eea57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015611ebf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ee39190613f37565b60ff166002145b15611f08576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7c9190613fda565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b03163314611fd85760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b6001600160a01b038116611fff5760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146120955760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b8115806120a0575080155b156120be57604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b031633146121455760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b6001600160a01b038316156121a8576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b0382161561220b576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b0381161561226e576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156122a9576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b9091041660018160038111156122dd576122dd613d22565b14806122fa575060038160038111156122f8576122f8613d22565b145b8061237157506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612346573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236a9190613f37565b60ff166002145b1561238f576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f54906123dc90339089908990600401614220565b60408051808303815f875af11580156123f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241b919061409b565b90935091505f8061242c8486613fc7565b1115612604575f83156124c2576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561249b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124bf9190613f50565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af1158015612518573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061253c9190613f94565b91508315612602576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156125a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125cc9190613f50565b6125d69190613f7b565b90508381146126025760405163312b003360e01b8152600481018290526024810185905260440161068f565b505b8061264b576040517f942dc9da000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044810184905260640161068f565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146126e45760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b815115806126f457508051825114155b1561271f57815181516040516308151c1160e41b81526004810192909252602482015260440161068f565b5f5b81518110156127d55781818151811061273c5761273c613fb3565b60200260200101515f0361276357604051637c946ed760e01b815260040160405180910390fd5b82818151811061277557612775613fb3565b602002602001015160085f84848151811061279257612792613fb3565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612721565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa582826040516120f9929190614295565b602461281c600267ffffffffffffffff6142c2565b61282691906142e8565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b031681156128fb576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af11580156128d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f99190613f94565b505b6024612910600267ffffffffffffffff6142c2565b61291a91906142e8565b67ffffffffffffffff1686116129ad576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b9034906129799085908a908a908a9060040161433e565b5f604051808303818588803b158015612990575f80fd5b505af11580156129a2573d5f803e3d5ffd5b505050505050612a29565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc9034906129fa908990899089908990600401614376565b5f604051808303818588803b158015612a11575f80fd5b505af1158015612a23573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612a6057835183516040516308151c1160e41b81526004810192909252602482015260440161068f565b8151845114612a8f57835182516040516308151c1160e41b81526004810192909252602482015260440161068f565b8051845114612abe57835181516040516308151c1160e41b81526004810192909252602482015260440161068f565b5f805f5b8651811015612d0557868181518110612add57612add613fb3565b60200260200101518310612b2157868181518110612afd57612afd613fb3565b6020026020010151604051633881b68960e01b815260040161068f91815260200190565b868181518110612b3357612b33613fb3565b60200260200101519250858181518110612b4f57612b4f613fb3565b6020026020010151515f03612b7757604051637c946ed760e01b815260040160405180910390fd5b838181518110612b8957612b89613fb3565b602002602001015182612b9c9190613fc7565b91505f600154905080878381518110612bb757612bb7613fb3565b6020026020010151511115612c0657868281518110612bd857612bd8613fb3565b60200260200101515181604051637ae5968560e01b815260040161068f929190918252602082015260400190565b5f805b888481518110612c1b57612c1b613fb3565b602002602001015151811015612cf757888481518110612c3d57612c3d613fb3565b60200260200101518181518110612c5657612c56613fb3565b60200260200101515f1c825f1c10612cb757888481518110612c7a57612c7a613fb3565b60200260200101518181518110612c9357612c93613fb3565b6020026020010151604051636aba776560e11b815260040161068f91815260200190565b888481518110612cc957612cc9613fb3565b60200260200101518181518110612ce257612ce2613fb3565b60200260200101519150806001019050612c09565b505050806001019050612ac2565b50803414612a295760405163312b003360e01b81523460048201526024810182905260440161068f565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612d6f57612d6f613971565b604051908082528060200260200182016040528015612da257816020015b6060815260200190600190039081612d8d5790505b509150845167ffffffffffffffff811115612dbf57612dbf613971565b604051908082528060200260200182016040528015612de8578160200160208202803683370190505b5090505f5b85518110156131eb575f60085f888481518110612e0c57612e0c613fb3565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e979190613f50565b9050868381518110612eab57612eab613fb3565b60200260200101515167ffffffffffffffff811115612ecc57612ecc613971565b604051908082528060200260200182016040528015612ef5578160200160208202803683370190505b50858481518110612f0857612f08613fb3565b60200260200101819052505f5b878481518110612f2757612f27613fb3565b60200260200101515181101561307a575f805f80612f928e8e8a81518110612f5157612f51613fb3565b60200260200101518e8b81518110612f6b57612f6b613fb3565b60200260200101518881518110612f8457612f84613fb3565b6020026020010151896114c2565b5f8181526006602052604090208290558d519397509195509350915084908b908a908110612fc257612fc2613fb3565b60200260200101518681518110612fdb57612fdb613fb3565b60200260200101818152505083898981518110612ffa57612ffa613fb3565b6020026020010181815161300e9190613fc7565b9052508a5184908c905f9061302557613025613fb3565b602002602001018181516130399190613fc7565b9052508a5183908c90600290811061305357613053613fb3565b602002602001018181516130679190613fc7565b9052505060019093019250612f15915050565b505f84848151811061308e5761308e613fb3565b6020026020010151111561319d575f60095f8a86815181106130b2576130b2613fb3565b602002602001015181526020019081526020015f205490505f81111561319b578484815181106130e4576130e4613fb3565b6020026020010151811061313d5784848151811061310457613104613fb3565b6020026020010151816131179190613f7b565b90505f85858151811061312c5761312c613fb3565b60200260200101818152505061316b565b8085858151811061315057613150613fb3565b602002602001018181516131649190613f7b565b9052505f90505b8060095f8b878151811061318157613181613fb3565b602002602001015181526020019081526020015f20819055505b505b8383815181106131af576131af613fb3565b6020026020010151866001815181106131ca576131ca613fb3565b602002602001018181516131de9190613fc7565b9052505050600101612ded565b5093509350939050565b5f5b86518110156137f5575f60085f89848151811061321657613216613fb3565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061325357613253613fb3565b6020026020010151111561331e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb828685815181106132a3576132a3613fb3565b60200260200101516040518363ffffffff1660e01b81526004016132dc9291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156132f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061331c9190613f94565b505b5f8088848151811061333257613332613fb3565b60200260200101515167ffffffffffffffff81111561335357613353613971565b60405190808252806020026020018201604052801561337c578160200160208202803683370190505b5090505f5b89858151811061339357613393613fb3565b602002602001015151811015613415575f8986815181106133b6576133b6613fb3565b602002602001015182815181106133cf576133cf613fb3565b6020026020010151111561340d5760018282815181106133f1576133f1613fb3565b9115156020928302919091019091015261340a83614394565b92505b600101613381565b505f8267ffffffffffffffff81111561343057613430613971565b604051908082528060200260200182016040528015613459578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561347657613476613971565b60405190808252806020026020018201604052801561349f578160200160208202803683370190505b5090505f805b8c88815181106134b7576134b7613fb3565b60200260200101515181101561359b578481815181106134d9576134d9613fb3565b602002602001015115613593578c88815181106134f8576134f8613fb3565b6020026020010151818151811061351157613511613fb3565b602002602001015184838151811061352b5761352b613fb3565b6020026020010181815250508b888151811061354957613549613fb3565b6020026020010151818151811061356257613562613fb3565b602002602001015183838151811061357c5761357c613fb3565b602090810291909101015261359082614394565b91505b6001016134a5565b5060246135b1600267ffffffffffffffff6142c2565b6135bb91906142e8565b67ffffffffffffffff168d88815181106135d7576135d7613fb3565b602002602001015111613737575f835167ffffffffffffffff8111156135ff576135ff613971565b604051908082528060200260200182016040528015613628578160200160208202803683370190505b5090505f5b84518110156136845784818151811061364857613648613fb3565b60200260200101515f1c82828151811061366457613664613fb3565b6001600160a01b039092166020928302919091019091015260010161362d565b50866001600160a01b031663bde526618a8a815181106136a6576136a6613fb3565b602002602001015183868f8d815181106136c2576136c2613fb3565b60200260200101518f8e815181106136dc576136dc613fb3565b60200260200101516040518663ffffffff1660e01b815260040161370394939291906143ac565b5f604051808303818588803b15801561371a575f80fd5b505af115801561372c573d5f803e3d5ffd5b5050505050506137e4565b856001600160a01b03166355442b5989898151811061375857613758613fb3565b602002602001015185858e8c8151811061377457613774613fb3565b60200260200101518e8d8151811061378e5761378e613fb3565b60200260200101516040518663ffffffff1660e01b81526004016137b594939291906143f6565b5f604051808303818588803b1580156137cc575f80fd5b505af11580156137de573d5f803e3d5ffd5b50505050505b5050505050508060010190506131f7565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613851573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138759190613fda565b5f86815260066020526040812054945063ffffffff9190911691508390036138b057604051637c946ed760e01b815260040160405180910390fd5b8083036138e557826138c3600183613f7b565b604051637ae5968560e01b81526004810192909252602482015260440161068f565b5f858152600760205260408120546138fe906001613fc7565b90506001811180156139105750808410155b1561392157836138c3600183613f7b565b61392b8585613fc7565b925060018111801561393c57508083115b15613945578092505b81831115613951578192505b50509250929050565b5f6020828403121561396a575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139ae576139ae613971565b604052919050565b5f82601f8301126139c5575f80fd5b813567ffffffffffffffff8111156139df576139df613971565b6139f2601f8201601f1916602001613985565b818152846020838601011115613a06575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613a35575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613a60575f80fd5b613a6c878288016139b6565b91505092959194509250565b5f67ffffffffffffffff821115613a9157613a91613971565b5060051b60200190565b5f82601f830112613aaa575f80fd5b81356020613abf613aba83613a78565b613985565b8083825260208201915060208460051b870101935086841115613ae0575f80fd5b602086015b84811015613afc5780358352918301918301613ae5565b509695505050505050565b5f82601f830112613b16575f80fd5b81356020613b26613aba83613a78565b82815260059290921b84018101918181019086841115613b44575f80fd5b8286015b84811015613afc57803567ffffffffffffffff811115613b66575f80fd5b613b748986838b01016139b6565b845250918301918301613b48565b5f805f805f60a08688031215613b96575f80fd5b8535945067ffffffffffffffff8060208801351115613bb3575f80fd5b613bc38860208901358901613a9b565b94508060408801351115613bd5575f80fd5b6040870135870188601f820112613bea575f80fd5b613bf7613aba8235613a78565b81358082526020808301929160051b8401018b1015613c14575f80fd5b602083015b6020843560051b850101811015613cae578481351115613c37575f80fd5b803584018c603f820112613c49575f80fd5b613c59613aba6020830135613a78565b602082810135808352908201919060051b83016040018f811115613c7b575f80fd5b6040840193505b80841015613c9d578335835260209384019390920191613c82565b508552505060209283019201613c19565b50955050506060870135811015613cc3575f80fd5b613cd38860608901358901613b07565b92508060808801351115613ce5575f80fd5b50613cf68760808801358801613a9b565b90509295509295909350565b5f8060408385031215613d13575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310613d5657634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215613d6c575f80fd5b813560048110613d7a575f80fd5b9392505050565b5f805f8060808587031215613d94575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b0381168114613dc6575f80fd5b919050565b5f60208284031215613ddb575f80fd5b613d7a82613db0565b5f805f60608486031215613df6575f80fd5b613dff84613db0565b9250613e0d60208501613db0565b9150613e1b60408501613db0565b90509250925092565b5f8060408385031215613e35575f80fd5b823567ffffffffffffffff80821115613e4c575f80fd5b613e5886838701613a9b565b93506020850135915080821115613e6d575f80fd5b50613e7a85828601613a9b565b9150509250929050565b5f8060408385031215613e95575f80fd5b823567ffffffffffffffff80821115613eac575f80fd5b818501915085601f830112613ebf575f80fd5b81356020613ecf613aba83613a78565b82815260059290921b84018101918181019089841115613eed575f80fd5b948201945b83861015613f1257613f0386613db0565b82529482019490820190613ef2565b96505086013592505080821115613e6d575f80fd5b805160ff81168114613dc6575f80fd5b5f60208284031215613f47575f80fd5b613d7a82613f27565b5f60208284031215613f60575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115613f8e57613f8e613f67565b92915050565b5f60208284031215613fa4575f80fd5b81518015158114613d7a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b80820180821115613f8e57613f8e613f67565b5f60208284031215613fea575f80fd5b815163ffffffff81168114613d7a575f80fd5b80516bffffffffffffffffffffffff81168114613dc6575f80fd5b5f60808284031215614028575f80fd5b6040516080810181811067ffffffffffffffff8211171561404b5761404b613971565b60405261405783613ffd565b815261406560208401613ffd565b6020820152604083015161ffff8116811461407e575f80fd5b604082015261408f60608401613f27565b60608201529392505050565b5f80604083850312156140ac575f80fd5b505080516020909101519092909150565b8082028115828204841417613f8e57613f8e613f67565b634e487b7160e01b5f52601260045260245ffd5b5f826140f6576140f66140d4565b500490565b600181815b8085111561413557815f190482111561411b5761411b613f67565b8085161561412857918102915b93841c9390800290614100565b509250929050565b5f8261414b57506001613f8e565b8161415757505f613f8e565b816001811461416d576002811461417757614193565b6001915050613f8e565b60ff84111561418857614188613f67565b50506001821b613f8e565b5060208310610133831016604e8410600b84101617156141b6575081810a613f8e565b6141c083836140fb565b805f19048211156141d3576141d3613f67565b029392505050565b5f613d7a838361413d565b5f815180845260208085019450602084015f5b83811015614215578151875295820195908201906001016141f9565b509495945050505050565b6001600160a01b0384168152606060208201525f61424160608301856141e6565b828103604084015261425381856141e6565b9695505050505050565b5f815180845260208085019450602084015f5b838110156142155781516001600160a01b031687529582019590820190600101614270565b604081525f6142a7604083018561425d565b82810360208401526142b981856141e6565b95945050505050565b5f67ffffffffffffffff808416806142dc576142dc6140d4565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561430957614309613f67565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6143656080830185614310565b905082606083015295945050505050565b848152836020820152608060408201525f6143656080830185614310565b5f600182016143a5576143a5613f67565b5060010190565b608081525f6143be608083018761425d565b82810360208401526143d081876141e6565b905082810360408401526143e48186614310565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561442e57815184529284019290840190600101614412565b505050838103602085015261444381886141e6565b91505082810360408401526143e4818661431056fea2646970667358221220668a9db82be7522dd405cfe8fdb98fff035cbab2d81718ce7b6f251d87a01edf64736f6c63430008190033", - "deployedBytecode": "0x6080604052600436106101b9575f3560e01c8063781f4ae3116100f2578063bb78678f11610092578063d8bf69bf11610062578063d8bf69bf14610548578063dcb5ccc414610567578063e6be59e71461059b578063f4da12ba146105ce575f80fd5b8063bb78678f146104ab578063bc7d5c5c146104d6578063d5297793146104f5578063d7accbcc14610514575f80fd5b80638da5cb5b116100cd5780638da5cb5b1461043a5780639649a35c14610459578063a5edd4fc1461046d578063a6f9dae11461048c575f80fd5b8063781f4ae3146103dc5780638513e77d146103fb5780638833c20514610426575f80fd5b80634ac7251d1161015d57806361d027b31161013857806361d027b314610340578063630965091461035f57806363c4d28e1461037e578063777e49c91461039d575f80fd5b80634ac7251d146102d557806359a8dfb9146102f45780635c975abb14610313575f80fd5b80632c0f3f29116101985780632c0f3f291461026557806334be5af41461027a5780633907196c1461028f5780633c18d1dd146102a2575f80fd5b806231d115146101bd5780630d3241ee1461020d5780632ad923dc1461022c575b5f80fd5b3480156101c8575f80fd5b506101f07f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610218575f80fd5b506005546101f0906001600160a01b031681565b348015610237575f80fd5b5061025761024636600461395a565b60066020525f908152604090205481565b604051908152602001610204565b610278610273366004613a22565b6105e2565b005b348015610285575f80fd5b5061025760015481565b61027861029d366004613b82565b610b08565b3480156102ad575f80fd5b506102577f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e0575f80fd5b506003546101f0906001600160a01b031681565b3480156102ff575f80fd5b5061027861030e366004613d02565b61106a565b34801561031e575f80fd5b5060025461033390600160a81b900460ff1681565b6040516102049190613d36565b34801561034b575f80fd5b506004546101f0906001600160a01b031681565b34801561036a575f80fd5b50610278610379366004613d5c565b611180565b348015610389575f80fd5b5061027861039836600461395a565b61123f565b3480156103a8575f80fd5b506103bc6103b7366004613d81565b6114c2565b604080519485526020850193909352918301526060820152608001610204565b3480156103e7575f80fd5b506102786103f6366004613d02565b6118c8565b348015610406575f80fd5b5061025761041536600461395a565b60076020525f908152604090205481565b348015610431575f80fd5b506102575f5481565b348015610445575f80fd5b506002546101f0906001600160a01b031681565b348015610464575f80fd5b50610278611ad2565b348015610478575f80fd5b5061027861048736600461395a565b611df5565b348015610497575f80fd5b506102786104a6366004613dcb565b611f98565b3480156104b6575f80fd5b506102576104c536600461395a565b60096020525f908152604090205481565b3480156104e1575f80fd5b506102786104f0366004613d02565b612055565b348015610500575f80fd5b5061027861050f366004613de4565b612105565b34801561051f575f80fd5b5061053361052e366004613e24565b612273565b60408051928352602083019190915201610204565b348015610553575f80fd5b50610278610562366004613e84565b6126a4565b348015610572575f80fd5b506101f061058136600461395a565b60086020525f90815260409020546001600160a01b031681565b3480156105a6575f80fd5b506102577f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d9575f80fd5b50610257612807565b6002546001600160a01b90910460ff161115610611576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361064557604051637c946ed760e01b815260040160405180910390fd5b5f8290036106665760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561069857604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff16908160038111156106b9576106b9613d22565b14806106d6575060038160038111156106d4576106d4613d22565b145b8061074d57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610722573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107469190613f37565b60ff166002145b1561076b576040516313d0ff5960e31b815260040160405180910390fd5b5f858152600860209081526040808320548151635459570160e11b815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa1580156107bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e19190613f50565b90505f805f806107f38c8c8c886114c2565b5f81815260066020526040902082905592965090945092509050821561086d57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610856575f80fd5b505af1158015610868573d5f803e3d5ffd5b505050505b5f8415610aa357505f8b815260096020526040902054849080156108c7578181106108a65761089c8282613f7b565b90505f91506108b6565b6108b08183613f7b565b91505f90505b5f8d81526009602052604090208190555b8115610a94576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610931573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109559190613f50565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af11580156109af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d39190613f94565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5c9190613f50565b610a669190613f7b565b9050828114610a925760405163312b003360e01b8152600481018290526024810184905260440161068f565b505b610aa18d8d888e86612833565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610b37576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610b5684848484612a31565b5f5480861115610b8357604051637ae5968560e01b8152600481018790526024810182905260440161068f565b60028054600160a81b900460ff1690816003811115610ba457610ba4613d22565b1480610bc157506003816003811115610bbf57610bbf613d22565b145b80610c3857506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610c0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c319190613f37565b60ff166002145b15610c56576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610c668a8a8a612d2f565b825192955090935091505f9084906002908110610c8557610c85613fb3565b60200260200101511115610d115760035483516001600160a01b039091169063bc291e129085906002908110610cbd57610cbd613fb3565b60200260200101516040518263ffffffff1660e01b8152600401610ce391815260200190565b5f604051808303815f87803b158015610cfa575f80fd5b505af1158015610d0c573d5f803e3d5ffd5b505050505b5f835f81518110610d2457610d24613fb3565b60200260200101511115610fa8575f83600181518110610d4657610d46613fb3565b60200260200101511115610f9a576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ddc9190613f50565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610e0b57610e0b613fb3565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610e7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea29190613f94565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610f07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f2b9190613f50565b610f359190613f7b565b905083600181518110610f4a57610f4a613fb3565b60200260200101518114610f98578084600181518110610f6c57610f6c613fb3565b602002602001015160405163312b003360e01b815260040161068f929190918252602082015260400190565b505b610fa88989848a858b6131f5565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f81518110610fe557610fe5613fb3565b60200260200101518560018151811061100057611000613fb3565b60200260200101518660028151811061101b5761101b613fb3565b6020026020010151604051611043939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b5f828152600860205260409020546001600160a01b03163381146110cb576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038216602482015260440161068f565b5f838152600960205260408120546110e4908490613fc7565b90506bffffffffffffffffffffffff81111561112857604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff602482015260440161068f565b5f8481526009602090815260409182902083905581518681529081018590529081018290527f129e6b09fa0e9f8e35543706348319342d70038db68e26dcdf4fde0f7bd484c79060600160405180910390a150505050565b6002546001600160a01b031633146111c05760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561120057611200613d22565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516112349190613d36565b60405180910390a150565b6005546001600160a01b0316331461127f5760055460405163312d21ff60e11b81523360048201526001600160a01b03909116602482015260440161068f565b807f0000000000000000000000000000000000000000000000000000000000000000036112e157604051636aba776560e11b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260240161068f565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa158015611341573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113659190613fda565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d61138e600185613f7b565b6040518263ffffffff1660e01b81526004016113ac91815260200190565b602060405180830381865afa1580156113c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113eb9190613f50565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561143e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114629190613fda565b63ffffffff1690505f62093a806114798385613fc7565b6114839190613f7b565b90508042106114ae57604051637ae5968560e01b81524260048201526024810182905260440161068f565b5050505f9182526007602052604090912055565b5f805f80865f036114e657604051637c946ed760e01b815260040160405180910390fd5b5f8690036115075760405163d92e233d60e01b815260040160405180910390fd5b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61154b828a6137fe565b6005546040517fbeaf44e8000000000000000000000000000000000000000000000000000000008152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b1580156115b4575f80fd5b505af11580156115c6573d5f803e3d5ffd5b5083925050505b838110156118bb57600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561161c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116409190614018565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa15801561168c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b09190613f50565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172d919061409b565b855191935091505f9081906bffffffffffffffffffffffff16818482111561175f576117598583613f7b565b90508491505b60408801516117789061ffff16655af3107a40006140bd565b8610156117ae57670de0b6b3a7640000866117938484613fc7565b61179d91906140bd565b6117a791906140e8565b925061189c565b670de0b6b3a76400006117c187846140bd565b6117cb91906140e8565b9350670de0b6b3a76400006117e087836140bd565b6117ea91906140e8565b925087602001516bffffffffffffffffffffffff16915081841115611823576118138285613f7b565b61181d9084613fc7565b92508193505b60128f101561188f575f8f601261183a9190613f7b565b61184590600a6141db565b61184f90866140e8565b90508f601261185e9190613f7b565b61186990600a6141db565b61187390826140bd565b905061187f8186613f7b565b6118899085613fc7565b90945092505b611899848f613fc7565b9d505b6118a6838e613fc7565b9c5050505050505050508060010190506115cd565b5050945094509450949050565b6002546001600160a01b031633146119085760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b811580611913575080155b1561193157604051637c946ed760e01b815260040160405180910390fd5b46820361195457604051633881b68960e01b81526004810183905260240161068f565b5f828152600860209081526040808320548151635459570160e11b815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa1580156119a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ca9190613f50565b90506012811015611a1c575f6119e1826012613f7b565b6119ec90600a6141db565b6119f690856140e8565b9050611a03826012613f7b565b611a0e90600a6141db565b611a1890826140bd565b9350505b5f84815260096020526040812054611a35908590613fc7565b90506bffffffffffffffffffffffff811115611a7957604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff602482015260440161068f565b5f8581526009602090815260409182902083905581518781529081018690529081018290527f129e6b09fa0e9f8e35543706348319342d70038db68e26dcdf4fde0f7bd484c79060600160405180910390a15050505050565b6002546001600160a01b90910460ff161115611b01576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611b44907f0000000000000000000000000000000000000000000000000000000000000000906137fe565b7f00000000000000000000000000000000000000000000000000000000000000005f9081526006602052604081208290559193509150825b82811015611d3357600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bef9190614018565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611c3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c5f9190613f50565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611cd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cfa919061409b565b508351909150611d199082906bffffffffffffffffffffffff166140bd565b611d239086613fc7565b9450505050806001019050611b7c565b50611d46670de0b6b3a7640000826140e8565b90508015611da857600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611d91575f80fd5b505af1158015611da3573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b03163314611e355760055460405163312d21ff60e11b81523360048201526001600160a01b03909116602482015260440161068f565b60028054600160a81b900460ff1690816003811115611e5657611e56613d22565b1480611e7357506003816003811115611e7157611e71613d22565b145b80611eea57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015611ebf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ee39190613f37565b60ff166002145b15611f08576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7c9190613fda565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b03163314611fd85760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b6001600160a01b038116611fff5760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146120955760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b8115806120a0575080155b156120be57604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b031633146121455760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b6001600160a01b038316156121a8576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b0382161561220b576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b0381161561226e576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156122a9576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b9091041660018160038111156122dd576122dd613d22565b14806122fa575060038160038111156122f8576122f8613d22565b145b8061237157506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612346573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236a9190613f37565b60ff166002145b1561238f576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f54906123dc90339089908990600401614220565b60408051808303815f875af11580156123f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241b919061409b565b90935091505f8061242c8486613fc7565b1115612604575f83156124c2576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561249b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124bf9190613f50565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af1158015612518573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061253c9190613f94565b91508315612602576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156125a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125cc9190613f50565b6125d69190613f7b565b90508381146126025760405163312b003360e01b8152600481018290526024810185905260440161068f565b505b8061264b576040517f942dc9da000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044810184905260640161068f565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146126e45760025460405163521eb56d60e11b81523360048201526001600160a01b03909116602482015260440161068f565b815115806126f457508051825114155b1561271f57815181516040516308151c1160e41b81526004810192909252602482015260440161068f565b5f5b81518110156127d55781818151811061273c5761273c613fb3565b60200260200101515f0361276357604051637c946ed760e01b815260040160405180910390fd5b82818151811061277557612775613fb3565b602002602001015160085f84848151811061279257612792613fb3565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612721565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa582826040516120f9929190614295565b602461281c600267ffffffffffffffff6142c2565b61282691906142e8565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b031681156128fb576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af11580156128d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f99190613f94565b505b6024612910600267ffffffffffffffff6142c2565b61291a91906142e8565b67ffffffffffffffff1686116129ad576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b9034906129799085908a908a908a9060040161433e565b5f604051808303818588803b158015612990575f80fd5b505af11580156129a2573d5f803e3d5ffd5b505050505050612a29565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc9034906129fa908990899089908990600401614376565b5f604051808303818588803b158015612a11575f80fd5b505af1158015612a23573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612a6057835183516040516308151c1160e41b81526004810192909252602482015260440161068f565b8151845114612a8f57835182516040516308151c1160e41b81526004810192909252602482015260440161068f565b8051845114612abe57835181516040516308151c1160e41b81526004810192909252602482015260440161068f565b5f805f5b8651811015612d0557868181518110612add57612add613fb3565b60200260200101518310612b2157868181518110612afd57612afd613fb3565b6020026020010151604051633881b68960e01b815260040161068f91815260200190565b868181518110612b3357612b33613fb3565b60200260200101519250858181518110612b4f57612b4f613fb3565b6020026020010151515f03612b7757604051637c946ed760e01b815260040160405180910390fd5b838181518110612b8957612b89613fb3565b602002602001015182612b9c9190613fc7565b91505f600154905080878381518110612bb757612bb7613fb3565b6020026020010151511115612c0657868281518110612bd857612bd8613fb3565b60200260200101515181604051637ae5968560e01b815260040161068f929190918252602082015260400190565b5f805b888481518110612c1b57612c1b613fb3565b602002602001015151811015612cf757888481518110612c3d57612c3d613fb3565b60200260200101518181518110612c5657612c56613fb3565b60200260200101515f1c825f1c10612cb757888481518110612c7a57612c7a613fb3565b60200260200101518181518110612c9357612c93613fb3565b6020026020010151604051636aba776560e11b815260040161068f91815260200190565b888481518110612cc957612cc9613fb3565b60200260200101518181518110612ce257612ce2613fb3565b60200260200101519150806001019050612c09565b505050806001019050612ac2565b50803414612a295760405163312b003360e01b81523460048201526024810182905260440161068f565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612d6f57612d6f613971565b604051908082528060200260200182016040528015612da257816020015b6060815260200190600190039081612d8d5790505b509150845167ffffffffffffffff811115612dbf57612dbf613971565b604051908082528060200260200182016040528015612de8578160200160208202803683370190505b5090505f5b85518110156131eb575f60085f888481518110612e0c57612e0c613fb3565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e979190613f50565b9050868381518110612eab57612eab613fb3565b60200260200101515167ffffffffffffffff811115612ecc57612ecc613971565b604051908082528060200260200182016040528015612ef5578160200160208202803683370190505b50858481518110612f0857612f08613fb3565b60200260200101819052505f5b878481518110612f2757612f27613fb3565b60200260200101515181101561307a575f805f80612f928e8e8a81518110612f5157612f51613fb3565b60200260200101518e8b81518110612f6b57612f6b613fb3565b60200260200101518881518110612f8457612f84613fb3565b6020026020010151896114c2565b5f8181526006602052604090208290558d519397509195509350915084908b908a908110612fc257612fc2613fb3565b60200260200101518681518110612fdb57612fdb613fb3565b60200260200101818152505083898981518110612ffa57612ffa613fb3565b6020026020010181815161300e9190613fc7565b9052508a5184908c905f9061302557613025613fb3565b602002602001018181516130399190613fc7565b9052508a5183908c90600290811061305357613053613fb3565b602002602001018181516130679190613fc7565b9052505060019093019250612f15915050565b505f84848151811061308e5761308e613fb3565b6020026020010151111561319d575f60095f8a86815181106130b2576130b2613fb3565b602002602001015181526020019081526020015f205490505f81111561319b578484815181106130e4576130e4613fb3565b6020026020010151811061313d5784848151811061310457613104613fb3565b6020026020010151816131179190613f7b565b90505f85858151811061312c5761312c613fb3565b60200260200101818152505061316b565b8085858151811061315057613150613fb3565b602002602001018181516131649190613f7b565b9052505f90505b8060095f8b878151811061318157613181613fb3565b602002602001015181526020019081526020015f20819055505b505b8383815181106131af576131af613fb3565b6020026020010151866001815181106131ca576131ca613fb3565b602002602001018181516131de9190613fc7565b9052505050600101612ded565b5093509350939050565b5f5b86518110156137f5575f60085f89848151811061321657613216613fb3565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061325357613253613fb3565b6020026020010151111561331e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb828685815181106132a3576132a3613fb3565b60200260200101516040518363ffffffff1660e01b81526004016132dc9291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156132f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061331c9190613f94565b505b5f8088848151811061333257613332613fb3565b60200260200101515167ffffffffffffffff81111561335357613353613971565b60405190808252806020026020018201604052801561337c578160200160208202803683370190505b5090505f5b89858151811061339357613393613fb3565b602002602001015151811015613415575f8986815181106133b6576133b6613fb3565b602002602001015182815181106133cf576133cf613fb3565b6020026020010151111561340d5760018282815181106133f1576133f1613fb3565b9115156020928302919091019091015261340a83614394565b92505b600101613381565b505f8267ffffffffffffffff81111561343057613430613971565b604051908082528060200260200182016040528015613459578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561347657613476613971565b60405190808252806020026020018201604052801561349f578160200160208202803683370190505b5090505f805b8c88815181106134b7576134b7613fb3565b60200260200101515181101561359b578481815181106134d9576134d9613fb3565b602002602001015115613593578c88815181106134f8576134f8613fb3565b6020026020010151818151811061351157613511613fb3565b602002602001015184838151811061352b5761352b613fb3565b6020026020010181815250508b888151811061354957613549613fb3565b6020026020010151818151811061356257613562613fb3565b602002602001015183838151811061357c5761357c613fb3565b602090810291909101015261359082614394565b91505b6001016134a5565b5060246135b1600267ffffffffffffffff6142c2565b6135bb91906142e8565b67ffffffffffffffff168d88815181106135d7576135d7613fb3565b602002602001015111613737575f835167ffffffffffffffff8111156135ff576135ff613971565b604051908082528060200260200182016040528015613628578160200160208202803683370190505b5090505f5b84518110156136845784818151811061364857613648613fb3565b60200260200101515f1c82828151811061366457613664613fb3565b6001600160a01b039092166020928302919091019091015260010161362d565b50866001600160a01b031663bde526618a8a815181106136a6576136a6613fb3565b602002602001015183868f8d815181106136c2576136c2613fb3565b60200260200101518f8e815181106136dc576136dc613fb3565b60200260200101516040518663ffffffff1660e01b815260040161370394939291906143ac565b5f604051808303818588803b15801561371a575f80fd5b505af115801561372c573d5f803e3d5ffd5b5050505050506137e4565b856001600160a01b03166355442b5989898151811061375857613758613fb3565b602002602001015185858e8c8151811061377457613774613fb3565b60200260200101518e8d8151811061378e5761378e613fb3565b60200260200101516040518663ffffffff1660e01b81526004016137b594939291906143f6565b5f604051808303818588803b1580156137cc575f80fd5b505af11580156137de573d5f803e3d5ffd5b50505050505b5050505050508060010190506131f7565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613851573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138759190613fda565b5f86815260066020526040812054945063ffffffff9190911691508390036138b057604051637c946ed760e01b815260040160405180910390fd5b8083036138e557826138c3600183613f7b565b604051637ae5968560e01b81526004810192909252602482015260440161068f565b5f858152600760205260408120546138fe906001613fc7565b90506001811180156139105750808410155b1561392157836138c3600183613f7b565b61392b8585613fc7565b925060018111801561393c57508083115b15613945578092505b81831115613951578192505b50509250929050565b5f6020828403121561396a575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156139ae576139ae613971565b604052919050565b5f82601f8301126139c5575f80fd5b813567ffffffffffffffff8111156139df576139df613971565b6139f2601f8201601f1916602001613985565b818152846020838601011115613a06575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613a35575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613a60575f80fd5b613a6c878288016139b6565b91505092959194509250565b5f67ffffffffffffffff821115613a9157613a91613971565b5060051b60200190565b5f82601f830112613aaa575f80fd5b81356020613abf613aba83613a78565b613985565b8083825260208201915060208460051b870101935086841115613ae0575f80fd5b602086015b84811015613afc5780358352918301918301613ae5565b509695505050505050565b5f82601f830112613b16575f80fd5b81356020613b26613aba83613a78565b82815260059290921b84018101918181019086841115613b44575f80fd5b8286015b84811015613afc57803567ffffffffffffffff811115613b66575f80fd5b613b748986838b01016139b6565b845250918301918301613b48565b5f805f805f60a08688031215613b96575f80fd5b8535945067ffffffffffffffff8060208801351115613bb3575f80fd5b613bc38860208901358901613a9b565b94508060408801351115613bd5575f80fd5b6040870135870188601f820112613bea575f80fd5b613bf7613aba8235613a78565b81358082526020808301929160051b8401018b1015613c14575f80fd5b602083015b6020843560051b850101811015613cae578481351115613c37575f80fd5b803584018c603f820112613c49575f80fd5b613c59613aba6020830135613a78565b602082810135808352908201919060051b83016040018f811115613c7b575f80fd5b6040840193505b80841015613c9d578335835260209384019390920191613c82565b508552505060209283019201613c19565b50955050506060870135811015613cc3575f80fd5b613cd38860608901358901613b07565b92508060808801351115613ce5575f80fd5b50613cf68760808801358801613a9b565b90509295509295909350565b5f8060408385031215613d13575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b6020810160048310613d5657634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215613d6c575f80fd5b813560048110613d7a575f80fd5b9392505050565b5f805f8060808587031215613d94575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b0381168114613dc6575f80fd5b919050565b5f60208284031215613ddb575f80fd5b613d7a82613db0565b5f805f60608486031215613df6575f80fd5b613dff84613db0565b9250613e0d60208501613db0565b9150613e1b60408501613db0565b90509250925092565b5f8060408385031215613e35575f80fd5b823567ffffffffffffffff80821115613e4c575f80fd5b613e5886838701613a9b565b93506020850135915080821115613e6d575f80fd5b50613e7a85828601613a9b565b9150509250929050565b5f8060408385031215613e95575f80fd5b823567ffffffffffffffff80821115613eac575f80fd5b818501915085601f830112613ebf575f80fd5b81356020613ecf613aba83613a78565b82815260059290921b84018101918181019089841115613eed575f80fd5b948201945b83861015613f1257613f0386613db0565b82529482019490820190613ef2565b96505086013592505080821115613e6d575f80fd5b805160ff81168114613dc6575f80fd5b5f60208284031215613f47575f80fd5b613d7a82613f27565b5f60208284031215613f60575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115613f8e57613f8e613f67565b92915050565b5f60208284031215613fa4575f80fd5b81518015158114613d7a575f80fd5b634e487b7160e01b5f52603260045260245ffd5b80820180821115613f8e57613f8e613f67565b5f60208284031215613fea575f80fd5b815163ffffffff81168114613d7a575f80fd5b80516bffffffffffffffffffffffff81168114613dc6575f80fd5b5f60808284031215614028575f80fd5b6040516080810181811067ffffffffffffffff8211171561404b5761404b613971565b60405261405783613ffd565b815261406560208401613ffd565b6020820152604083015161ffff8116811461407e575f80fd5b604082015261408f60608401613f27565b60608201529392505050565b5f80604083850312156140ac575f80fd5b505080516020909101519092909150565b8082028115828204841417613f8e57613f8e613f67565b634e487b7160e01b5f52601260045260245ffd5b5f826140f6576140f66140d4565b500490565b600181815b8085111561413557815f190482111561411b5761411b613f67565b8085161561412857918102915b93841c9390800290614100565b509250929050565b5f8261414b57506001613f8e565b8161415757505f613f8e565b816001811461416d576002811461417757614193565b6001915050613f8e565b60ff84111561418857614188613f67565b50506001821b613f8e565b5060208310610133831016604e8410600b84101617156141b6575081810a613f8e565b6141c083836140fb565b805f19048211156141d3576141d3613f67565b029392505050565b5f613d7a838361413d565b5f815180845260208085019450602084015f5b83811015614215578151875295820195908201906001016141f9565b509495945050505050565b6001600160a01b0384168152606060208201525f61424160608301856141e6565b828103604084015261425381856141e6565b9695505050505050565b5f815180845260208085019450602084015f5b838110156142155781516001600160a01b031687529582019590820190600101614270565b604081525f6142a7604083018561425d565b82810360208401526142b981856141e6565b95945050505050565b5f67ffffffffffffffff808416806142dc576142dc6140d4565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561430957614309613f67565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6143656080830185614310565b905082606083015295945050505050565b848152836020820152608060408201525f6143656080830185614310565b5f600182016143a5576143a5613f67565b5060010190565b608081525f6143be608083018761425d565b82810360208401526143d081876141e6565b905082810360408401526143e48186614310565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561442e57815184529284019290840190600101614412565b505050838103602085015261444381886141e6565b91505082810360408401526143e4818661431056fea2646970667358221220668a9db82be7522dd405cfe8fdb98fff035cbab2d81718ce7b6f251d87a01edf64736f6c63430008190033", + "bytecode": "0x610120604052348015610010575f80fd5b50604051614b0e380380614b0e83398101604081905261002f91610226565b6002805460ff60a01b1933166001600160a81b031990911617600160a01b1760ff60a81b1916600160a91b1790556001600160a01b038916158061007a57506001600160a01b038816155b8061008c57506001600160a01b038716155b8061009e57506001600160a01b038616155b806100a7575084155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b8315806100d0575082155b806100d9575081155b806100e2575080155b1561010057604051637c946ed760e01b815260040160405180910390fd5b61ffff82111561013357604051637ae5968560e01b81526004810183905261ffff60248201526044015b60405180910390fd5b6001600160601b0381111561016b57604051637ae5968560e01b8152600481018290526001600160601b03602482015260440161012a565b6001600160a01b0398891660c05260038054988a166001600160a01b0319998a1617905560048054978a16978916979097179096556005805495909816949096169390931790955560e0819052604080518082018252828152466020918201908152825180830194909452518383015281518084038301815260609093019091528151910120610100525f9390935560019290925560805260a0526102a5565b80516001600160a01b0381168114610221575f80fd5b919050565b5f805f805f805f805f6101208a8c03121561023f575f80fd5b6102488a61020b565b985061025660208b0161020b565b975061026460408b0161020b565b965061027260608b0161020b565b955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b60805160a05160c05160e051610100516147a061036e5f395f81816103450152818161141401528181611cf50152611d9c01525f8181610671015281816114470152818161169b015281816116cf01528181611d2c01528181611ec60152818161318e01526131f401525f81816101ef015281816109c201528181610ac901528181610e4901528181610f98015281816126a3015281816127b001528181612ae4015261354c01525f818161063e01526118a401525f818161029c015261187001526147a05ff3fe6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c43565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c43565b60066020525f908152604090205481565b61030a610305366004613d0b565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613e6b565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a0366004613feb565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614028565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461404e565b611312565b34801561041b575f80fd5b5061030a61042a366004613c43565b6113d1565b34801561043a575f80fd5b5061044e610449366004614073565b611654565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a610488366004613feb565b611b99565b348015610498575f80fd5b506102be6104a7366004613c43565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611ca8565b34801561050a575f80fd5b5061030a610519366004613c43565b61204a565b348015610529575f80fd5b5061030a6105383660046140bd565b6121ed565b348015610548575f80fd5b506102be610557366004613c43565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a6105823660046140d6565b6122aa565b348015610592575f80fd5b5061030a6105a13660046140f6565b61235a565b3480156105b1575f80fd5b506105c56105c0366004614136565b6124c8565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f4366004614196565b6128f9565b348015610604575f80fd5b50610211610613366004613c43565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612a5c565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614014565b148061079b5750600381600381111561079957610799614014565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b9190614249565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190614262565b90505f805f806108d18c8c8c88611654565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a828261428d565b90505f9150610994565b61098e818361428d565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190614262565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614262565b610b44919061428d565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612a88565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612c86565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614014565b1480610c9f57506003816003811115610c9d57610c9d614014565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f9190614249565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612f84565b825192955090935091505f9084906002908110610d6357610d636142c5565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b6142c5565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e026142c5565b60200260200101511115611086575f83600181518110610e2457610e246142c5565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba9190614262565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee96142c5565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110099190614262565b611013919061428d565b905083600181518110611028576110286142c5565b6020026020010151811461107657808460018151811061104a5761104a6142c5565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b6134de565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c36142c5565b6020026020010151856001815181106110de576110de6142c5565b6020026020010151866002815181106110f9576110f96142c5565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f69084906142d9565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614014565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614028565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906142ec565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d61152060018561428d565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d9190614262565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f491906142ec565b63ffffffff1690505f62093a8061160b83856142d9565b611615919061428d565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5050505f9182526007602052604090912055565b5f805f80865f0361167857604051637c946ed760e01b815260040160405180910390fd5b5f8690036116995760405163d92e233d60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086036116fb57604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61173f828a613af4565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b15801561178f575f80fd5b505af11580156117a1573d5f803e3d5ffd5b5083925050505b83811015611b8c575f818152600a602052604090205460ff16611b8457600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611830919061432a565b606081015190915060ff16156118cf57604081015161ffff16158015611866575060208101516bffffffffffffffffffffffff16155b156118ca5761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118d5565b50611b84565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa15801561191c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119409190614262565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bd91906143ad565b91509150805f03611a05575f858152600a60205260409020805460ff1916600117905583516119fa906bffffffffffffffffffffffff168a6142d9565b985050505050611b84565b83515f9081906bffffffffffffffffffffffff168184821115611a3257611a2c858361428d565b90508491505b6040880151611a4b9061ffff16655af3107a40006143cf565b861015611a8157670de0b6b3a764000086611a6684846142d9565b611a7091906143cf565b611a7a91906143fa565b9250611b6f565b670de0b6b3a7640000611a9487846143cf565b611a9e91906143fa565b9350670de0b6b3a7640000611ab387836143cf565b611abd91906143fa565b925087602001516bffffffffffffffffffffffff16915081841115611af657611ae6828561428d565b611af090846142d9565b92508193505b60128f1015611b62575f8f6012611b0d919061428d565b611b1890600a6144ed565b611b2290866143fa565b90508f6012611b31919061428d565b611b3c90600a6144ed565b611b4690826143cf565b9050611b52818661428d565b611b5c90856142d9565b90945092505b611b6c848f6142d9565b9d505b611b79838e6142d9565b9c5050505050505050505b6001016117a8565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611bfa576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c139085906142d9565b90506bffffffffffffffffffffffff811115611c5757604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611cd7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d1a907f000000000000000000000000000000000000000000000000000000000000000090613af4565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611d86575f80fd5b505af1158015611d98573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611f8857600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e44919061432a565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb49190614262565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4f91906143ad565b508351909150611f6e9082906bffffffffffffffffffffffff166143cf565b611f7890866142d9565b9450505050806001019050611dd1565b50611f9b670de0b6b3a7640000826143fa565b90508015611ffd57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611fe6575f80fd5b505af1158015611ff8573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b0316331461208a5760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120ab576120ab614014565b14806120c8575060038160038111156120c6576120c6614014565b145b8061213f57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612114573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121389190614249565b60ff166002145b1561215d576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d191906142ec565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b0316331461222d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122545760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146122ea5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8115806122f5575080155b1561231357604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b0316331461239a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b038316156123fd576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b03821615612460576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b038116156124c3576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156124fe576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561253257612532614014565b148061254f5750600381600381111561254d5761254d614014565b145b806125c657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561259b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bf9190614249565b60ff166002145b156125e4576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061263190339089908990600401614532565b60408051808303815f875af115801561264c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267091906143ad565b90935091505f8061268184866142d9565b1115612859575f8315612717576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127149190614262565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af115801561276d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061279191906142a6565b91508315612857576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156127fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128219190614262565b61282b919061428d565b90508381146128575760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128a0576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146129395760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061294957508051825114155b1561297457815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a2a57818181518110612991576129916142c5565b60200260200101515f036129b857604051637c946ed760e01b815260040160405180910390fd5b8281815181106129ca576129ca6142c5565b602002602001015160085f8484815181106129e7576129e76142c5565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612976565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa5828260405161234e9291906145a7565b6024612a71600267ffffffffffffffff6145d4565b612a7b91906145fa565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612b50576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4e91906142a6565b505b6024612b65600267ffffffffffffffff6145d4565b612b6f91906145fa565b67ffffffffffffffff168611612c02576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612bce9085908a908a908a90600401614650565b5f604051808303818588803b158015612be5575f80fd5b505af1158015612bf7573d5f803e3d5ffd5b505050505050612c7e565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612c4f908990899089908990600401614688565b5f604051808303818588803b158015612c66575f80fd5b505af1158015612c78573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612cb557835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612ce457835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d1357835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612f5a57868181518110612d3257612d326142c5565b60200260200101518310612d7657868181518110612d5257612d526142c5565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612d8857612d886142c5565b60200260200101519250858181518110612da457612da46142c5565b6020026020010151515f03612dcc57604051637c946ed760e01b815260040160405180910390fd5b838181518110612dde57612dde6142c5565b602002602001015182612df191906142d9565b91505f600154905080878381518110612e0c57612e0c6142c5565b6020026020010151511115612e5b57868281518110612e2d57612e2d6142c5565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612e7057612e706142c5565b602002602001015151811015612f4c57888481518110612e9257612e926142c5565b60200260200101518181518110612eab57612eab6142c5565b60200260200101515f1c825f1c10612f0c57888481518110612ecf57612ecf6142c5565b60200260200101518181518110612ee857612ee86142c5565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f1e57612f1e6142c5565b60200260200101518181518110612f3757612f376142c5565b60200260200101519150806001019050612e5e565b505050806001019050612d17565b50803414612c7e5760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612fc457612fc4613c5a565b604051908082528060200260200182016040528015612ff757816020015b6060815260200190600190039081612fe25790505b509150845167ffffffffffffffff81111561301457613014613c5a565b60405190808252806020026020018201604052801561303d578160200160208202803683370190505b5090505f5b85518110156134d4575f60085f888481518110613061576130616142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec9190614262565b9050868381518110613100576131006142c5565b60200260200101515167ffffffffffffffff81111561312157613121613c5a565b60405190808252806020026020018201604052801561314a578160200160208202803683370190505b5085848151811061315d5761315d6142c5565b60200260200101819052505f5b87848151811061317c5761317c6142c5565b602002602001015151811015613363577f00000000000000000000000000000000000000000000000000000000000000008885815181106131bf576131bf6142c5565b602002602001015182815181106131d8576131d86142c5565b60200260200101510361322057604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f8061327b8e8e8a8151811061323a5761323a6142c5565b60200260200101518e8b81518110613254576132546142c5565b6020026020010151888151811061326d5761326d6142c5565b602002602001015189611654565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132ab576132ab6142c5565b602002602001015186815181106132c4576132c46142c5565b602002602001018181525050838989815181106132e3576132e36142c5565b602002602001018181516132f791906142d9565b9052508a5184908c905f9061330e5761330e6142c5565b6020026020010181815161332291906142d9565b9052508a5183908c90600290811061333c5761333c6142c5565b6020026020010181815161335091906142d9565b905250506001909301925061316a915050565b505f848481518110613377576133776142c5565b60200260200101511115613486575f60095f8a868151811061339b5761339b6142c5565b602002602001015181526020019081526020015f205490505f811115613484578484815181106133cd576133cd6142c5565b60200260200101518110613426578484815181106133ed576133ed6142c5565b602002602001015181613400919061428d565b90505f858581518110613415576134156142c5565b602002602001018181525050613454565b80858581518110613439576134396142c5565b6020026020010181815161344d919061428d565b9052505f90505b8060095f8b878151811061346a5761346a6142c5565b602002602001015181526020019081526020015f20819055505b505b838381518110613498576134986142c5565b6020026020010151866001815181106134b3576134b36142c5565b602002602001018181516134c791906142d9565b9052505050600101613042565b5093509350939050565b5f5b8651811015613aeb575f60085f8984815181106134ff576134ff6142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061353c5761353c6142c5565b60200260200101511115613607577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb8286858151811061358c5761358c6142c5565b60200260200101516040518363ffffffff1660e01b81526004016135c59291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156135e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360591906142a6565b505b5f8088848151811061361b5761361b6142c5565b60200260200101515167ffffffffffffffff81111561363c5761363c613c5a565b604051908082528060200260200182016040528015613665578160200160208202803683370190505b5090505f5b89858151811061367c5761367c6142c5565b6020026020010151518110156136fe575f89868151811061369f5761369f6142c5565b602002602001015182815181106136b8576136b86142c5565b602002602001015111156136f65760018282815181106136da576136da6142c5565b911515602092830291909101909101526136f3836146a6565b92505b60010161366a565b50815f0361370e57505050613ae3565b5f8267ffffffffffffffff81111561372857613728613c5a565b604051908082528060200260200182016040528015613751578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561376e5761376e613c5a565b604051908082528060200260200182016040528015613797578160200160208202803683370190505b5090505f805b8c88815181106137af576137af6142c5565b602002602001015151811015613893578481815181106137d1576137d16142c5565b60200260200101511561388b578c88815181106137f0576137f06142c5565b60200260200101518181518110613809576138096142c5565b6020026020010151848381518110613823576138236142c5565b6020026020010181815250508b8881518110613841576138416142c5565b6020026020010151818151811061385a5761385a6142c5565b6020026020010151838381518110613874576138746142c5565b6020908102919091010152613888826146a6565b91505b60010161379d565b5060246138a9600267ffffffffffffffff6145d4565b6138b391906145fa565b67ffffffffffffffff168d88815181106138cf576138cf6142c5565b602002602001015111613a2f575f835167ffffffffffffffff8111156138f7576138f7613c5a565b604051908082528060200260200182016040528015613920578160200160208202803683370190505b5090505f5b845181101561397c57848181518110613940576139406142c5565b60200260200101515f1c82828151811061395c5761395c6142c5565b6001600160a01b0390921660209283029190910190910152600101613925565b50866001600160a01b031663bde526618a8a8151811061399e5761399e6142c5565b602002602001015183868f8d815181106139ba576139ba6142c5565b60200260200101518f8e815181106139d4576139d46142c5565b60200260200101516040518663ffffffff1660e01b81526004016139fb94939291906146be565b5f604051808303818588803b158015613a12575f80fd5b505af1158015613a24573d5f803e3d5ffd5b505050505050613adc565b856001600160a01b03166355442b59898981518110613a5057613a506142c5565b602002602001015185858e8c81518110613a6c57613a6c6142c5565b60200260200101518e8d81518110613a8657613a866142c5565b60200260200101516040518663ffffffff1660e01b8152600401613aad9493929190614708565b5f604051808303818588803b158015613ac4575f80fd5b505af1158015613ad6573d5f803e3d5ffd5b50505050505b5050505050505b6001016134e0565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6b91906142ec565b5f86815260066020526040812054945063ffffffff919091169150839003613ba657604051637c946ed760e01b815260040160405180910390fd5b808303613bdb5782613bb960018361428d565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f85815260076020526040902054600181118015613bf95750808410155b15613c0a5783613bb960018361428d565b613c1485856142d9565b9250600181118015613c2557508083115b15613c2e578092505b81831115613c3a578192505b50509250929050565b5f60208284031215613c53575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c9757613c97613c5a565b604052919050565b5f82601f830112613cae575f80fd5b813567ffffffffffffffff811115613cc857613cc8613c5a565b613cdb601f8201601f1916602001613c6e565b818152846020838601011115613cef575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d1e575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d49575f80fd5b613d5587828801613c9f565b91505092959194509250565b5f67ffffffffffffffff821115613d7a57613d7a613c5a565b5060051b60200190565b5f82601f830112613d93575f80fd5b81356020613da8613da383613d61565b613c6e565b8083825260208201915060208460051b870101935086841115613dc9575f80fd5b602086015b84811015613de55780358352918301918301613dce565b509695505050505050565b5f82601f830112613dff575f80fd5b81356020613e0f613da383613d61565b82815260059290921b84018101918181019086841115613e2d575f80fd5b8286015b84811015613de557803567ffffffffffffffff811115613e4f575f80fd5b613e5d8986838b0101613c9f565b845250918301918301613e31565b5f805f805f60a08688031215613e7f575f80fd5b8535945067ffffffffffffffff8060208801351115613e9c575f80fd5b613eac8860208901358901613d84565b94508060408801351115613ebe575f80fd5b6040870135870188601f820112613ed3575f80fd5b613ee0613da38235613d61565b81358082526020808301929160051b8401018b1015613efd575f80fd5b602083015b6020843560051b850101811015613f97578481351115613f20575f80fd5b803584018c603f820112613f32575f80fd5b613f42613da36020830135613d61565b602082810135808352908201919060051b83016040018f811115613f64575f80fd5b6040840193505b80841015613f86578335835260209384019390920191613f6b565b508552505060209283019201613f02565b50955050506060870135811015613fac575f80fd5b613fbc8860608901358901613df0565b92508060808801351115613fce575f80fd5b50613fdf8760808801358801613d84565b90509295509295909350565b5f805f60608486031215613ffd575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061404857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f6020828403121561405e575f80fd5b81356004811061406c575f80fd5b9392505050565b5f805f8060808587031215614086575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b03811681146140b8575f80fd5b919050565b5f602082840312156140cd575f80fd5b61406c826140a2565b5f80604083850312156140e7575f80fd5b50508035926020909101359150565b5f805f60608486031215614108575f80fd5b614111846140a2565b925061411f602085016140a2565b915061412d604085016140a2565b90509250925092565b5f8060408385031215614147575f80fd5b823567ffffffffffffffff8082111561415e575f80fd5b61416a86838701613d84565b9350602085013591508082111561417f575f80fd5b5061418c85828601613d84565b9150509250929050565b5f80604083850312156141a7575f80fd5b823567ffffffffffffffff808211156141be575f80fd5b818501915085601f8301126141d1575f80fd5b813560206141e1613da383613d61565b82815260059290921b840181019181810190898411156141ff575f80fd5b948201945b8386101561422457614215866140a2565b82529482019490820190614204565b9650508601359250508082111561417f575f80fd5b805160ff811681146140b8575f80fd5b5f60208284031215614259575f80fd5b61406c82614239565b5f60208284031215614272575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142a0576142a0614279565b92915050565b5f602082840312156142b6575f80fd5b8151801515811461406c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142a0576142a0614279565b5f602082840312156142fc575f80fd5b815163ffffffff8116811461406c575f80fd5b80516bffffffffffffffffffffffff811681146140b8575f80fd5b5f6080828403121561433a575f80fd5b6040516080810181811067ffffffffffffffff8211171561435d5761435d613c5a565b6040526143698361430f565b81526143776020840161430f565b6020820152604083015161ffff81168114614390575f80fd5b60408201526143a160608401614239565b60608201529392505050565b5f80604083850312156143be575f80fd5b505080516020909101519092909150565b80820281158282048414176142a0576142a0614279565b634e487b7160e01b5f52601260045260245ffd5b5f82614408576144086143e6565b500490565b600181815b8085111561444757815f190482111561442d5761442d614279565b8085161561443a57918102915b93841c9390800290614412565b509250929050565b5f8261445d575060016142a0565b8161446957505f6142a0565b816001811461447f5760028114614489576144a5565b60019150506142a0565b60ff84111561449a5761449a614279565b50506001821b6142a0565b5060208310610133831016604e8410600b84101617156144c8575081810a6142a0565b6144d2838361440d565b805f19048211156144e5576144e5614279565b029392505050565b5f61406c838361444f565b5f815180845260208085019450602084015f5b838110156145275781518752958201959082019060010161450b565b509495945050505050565b6001600160a01b0384168152606060208201525f61455360608301856144f8565b828103604084015261456581856144f8565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145275781516001600160a01b031687529582019590820190600101614582565b604081525f6145b9604083018561456f565b82810360208401526145cb81856144f8565b95945050505050565b5f67ffffffffffffffff808416806145ee576145ee6143e6565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561461b5761461b614279565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146776080830185614622565b905082606083015295945050505050565b848152836020820152608060408201525f6146776080830185614622565b5f600182016146b7576146b7614279565b5060010190565b608081525f6146d0608083018761456f565b82810360208401526146e281876144f8565b905082810360408401526146f68186614622565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561474057815184529284019290840190600101614724565b505050838103602085015261475581886144f8565b91505082810360408401526146f6818661462256fea264697066735822122041d3326451720723ceafc09161f224b183e6c1c9fd6f1a96e1113c7dec8b6b7e64736f6c63430008190033", + "deployedBytecode": "0x6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c43565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c43565b60066020525f908152604090205481565b61030a610305366004613d0b565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613e6b565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a0366004613feb565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614028565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461404e565b611312565b34801561041b575f80fd5b5061030a61042a366004613c43565b6113d1565b34801561043a575f80fd5b5061044e610449366004614073565b611654565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a610488366004613feb565b611b99565b348015610498575f80fd5b506102be6104a7366004613c43565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611ca8565b34801561050a575f80fd5b5061030a610519366004613c43565b61204a565b348015610529575f80fd5b5061030a6105383660046140bd565b6121ed565b348015610548575f80fd5b506102be610557366004613c43565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a6105823660046140d6565b6122aa565b348015610592575f80fd5b5061030a6105a13660046140f6565b61235a565b3480156105b1575f80fd5b506105c56105c0366004614136565b6124c8565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f4366004614196565b6128f9565b348015610604575f80fd5b50610211610613366004613c43565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612a5c565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614014565b148061079b5750600381600381111561079957610799614014565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b9190614249565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190614262565b90505f805f806108d18c8c8c88611654565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a828261428d565b90505f9150610994565b61098e818361428d565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190614262565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614262565b610b44919061428d565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612a88565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612c86565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614014565b1480610c9f57506003816003811115610c9d57610c9d614014565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f9190614249565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612f84565b825192955090935091505f9084906002908110610d6357610d636142c5565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b6142c5565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e026142c5565b60200260200101511115611086575f83600181518110610e2457610e246142c5565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba9190614262565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee96142c5565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110099190614262565b611013919061428d565b905083600181518110611028576110286142c5565b6020026020010151811461107657808460018151811061104a5761104a6142c5565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b6134de565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c36142c5565b6020026020010151856001815181106110de576110de6142c5565b6020026020010151866002815181106110f9576110f96142c5565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f69084906142d9565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614014565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614028565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906142ec565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d61152060018561428d565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d9190614262565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f491906142ec565b63ffffffff1690505f62093a8061160b83856142d9565b611615919061428d565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5050505f9182526007602052604090912055565b5f805f80865f0361167857604051637c946ed760e01b815260040160405180910390fd5b5f8690036116995760405163d92e233d60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086036116fb57604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61173f828a613af4565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b15801561178f575f80fd5b505af11580156117a1573d5f803e3d5ffd5b5083925050505b83811015611b8c575f818152600a602052604090205460ff16611b8457600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611830919061432a565b606081015190915060ff16156118cf57604081015161ffff16158015611866575060208101516bffffffffffffffffffffffff16155b156118ca5761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118d5565b50611b84565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa15801561191c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119409190614262565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bd91906143ad565b91509150805f03611a05575f858152600a60205260409020805460ff1916600117905583516119fa906bffffffffffffffffffffffff168a6142d9565b985050505050611b84565b83515f9081906bffffffffffffffffffffffff168184821115611a3257611a2c858361428d565b90508491505b6040880151611a4b9061ffff16655af3107a40006143cf565b861015611a8157670de0b6b3a764000086611a6684846142d9565b611a7091906143cf565b611a7a91906143fa565b9250611b6f565b670de0b6b3a7640000611a9487846143cf565b611a9e91906143fa565b9350670de0b6b3a7640000611ab387836143cf565b611abd91906143fa565b925087602001516bffffffffffffffffffffffff16915081841115611af657611ae6828561428d565b611af090846142d9565b92508193505b60128f1015611b62575f8f6012611b0d919061428d565b611b1890600a6144ed565b611b2290866143fa565b90508f6012611b31919061428d565b611b3c90600a6144ed565b611b4690826143cf565b9050611b52818661428d565b611b5c90856142d9565b90945092505b611b6c848f6142d9565b9d505b611b79838e6142d9565b9c5050505050505050505b6001016117a8565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611bfa576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c139085906142d9565b90506bffffffffffffffffffffffff811115611c5757604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611cd7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d1a907f000000000000000000000000000000000000000000000000000000000000000090613af4565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611d86575f80fd5b505af1158015611d98573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611f8857600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e44919061432a565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb49190614262565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4f91906143ad565b508351909150611f6e9082906bffffffffffffffffffffffff166143cf565b611f7890866142d9565b9450505050806001019050611dd1565b50611f9b670de0b6b3a7640000826143fa565b90508015611ffd57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611fe6575f80fd5b505af1158015611ff8573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b0316331461208a5760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120ab576120ab614014565b14806120c8575060038160038111156120c6576120c6614014565b145b8061213f57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612114573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121389190614249565b60ff166002145b1561215d576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d191906142ec565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b0316331461222d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122545760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146122ea5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8115806122f5575080155b1561231357604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b0316331461239a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b038316156123fd576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b03821615612460576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b038116156124c3576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156124fe576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561253257612532614014565b148061254f5750600381600381111561254d5761254d614014565b145b806125c657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561259b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bf9190614249565b60ff166002145b156125e4576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061263190339089908990600401614532565b60408051808303815f875af115801561264c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267091906143ad565b90935091505f8061268184866142d9565b1115612859575f8315612717576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127149190614262565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af115801561276d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061279191906142a6565b91508315612857576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156127fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128219190614262565b61282b919061428d565b90508381146128575760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128a0576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146129395760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061294957508051825114155b1561297457815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a2a57818181518110612991576129916142c5565b60200260200101515f036129b857604051637c946ed760e01b815260040160405180910390fd5b8281815181106129ca576129ca6142c5565b602002602001015160085f8484815181106129e7576129e76142c5565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612976565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa5828260405161234e9291906145a7565b6024612a71600267ffffffffffffffff6145d4565b612a7b91906145fa565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612b50576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4e91906142a6565b505b6024612b65600267ffffffffffffffff6145d4565b612b6f91906145fa565b67ffffffffffffffff168611612c02576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612bce9085908a908a908a90600401614650565b5f604051808303818588803b158015612be5575f80fd5b505af1158015612bf7573d5f803e3d5ffd5b505050505050612c7e565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612c4f908990899089908990600401614688565b5f604051808303818588803b158015612c66575f80fd5b505af1158015612c78573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612cb557835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612ce457835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d1357835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612f5a57868181518110612d3257612d326142c5565b60200260200101518310612d7657868181518110612d5257612d526142c5565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612d8857612d886142c5565b60200260200101519250858181518110612da457612da46142c5565b6020026020010151515f03612dcc57604051637c946ed760e01b815260040160405180910390fd5b838181518110612dde57612dde6142c5565b602002602001015182612df191906142d9565b91505f600154905080878381518110612e0c57612e0c6142c5565b6020026020010151511115612e5b57868281518110612e2d57612e2d6142c5565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612e7057612e706142c5565b602002602001015151811015612f4c57888481518110612e9257612e926142c5565b60200260200101518181518110612eab57612eab6142c5565b60200260200101515f1c825f1c10612f0c57888481518110612ecf57612ecf6142c5565b60200260200101518181518110612ee857612ee86142c5565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f1e57612f1e6142c5565b60200260200101518181518110612f3757612f376142c5565b60200260200101519150806001019050612e5e565b505050806001019050612d17565b50803414612c7e5760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612fc457612fc4613c5a565b604051908082528060200260200182016040528015612ff757816020015b6060815260200190600190039081612fe25790505b509150845167ffffffffffffffff81111561301457613014613c5a565b60405190808252806020026020018201604052801561303d578160200160208202803683370190505b5090505f5b85518110156134d4575f60085f888481518110613061576130616142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec9190614262565b9050868381518110613100576131006142c5565b60200260200101515167ffffffffffffffff81111561312157613121613c5a565b60405190808252806020026020018201604052801561314a578160200160208202803683370190505b5085848151811061315d5761315d6142c5565b60200260200101819052505f5b87848151811061317c5761317c6142c5565b602002602001015151811015613363577f00000000000000000000000000000000000000000000000000000000000000008885815181106131bf576131bf6142c5565b602002602001015182815181106131d8576131d86142c5565b60200260200101510361322057604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f8061327b8e8e8a8151811061323a5761323a6142c5565b60200260200101518e8b81518110613254576132546142c5565b6020026020010151888151811061326d5761326d6142c5565b602002602001015189611654565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132ab576132ab6142c5565b602002602001015186815181106132c4576132c46142c5565b602002602001018181525050838989815181106132e3576132e36142c5565b602002602001018181516132f791906142d9565b9052508a5184908c905f9061330e5761330e6142c5565b6020026020010181815161332291906142d9565b9052508a5183908c90600290811061333c5761333c6142c5565b6020026020010181815161335091906142d9565b905250506001909301925061316a915050565b505f848481518110613377576133776142c5565b60200260200101511115613486575f60095f8a868151811061339b5761339b6142c5565b602002602001015181526020019081526020015f205490505f811115613484578484815181106133cd576133cd6142c5565b60200260200101518110613426578484815181106133ed576133ed6142c5565b602002602001015181613400919061428d565b90505f858581518110613415576134156142c5565b602002602001018181525050613454565b80858581518110613439576134396142c5565b6020026020010181815161344d919061428d565b9052505f90505b8060095f8b878151811061346a5761346a6142c5565b602002602001015181526020019081526020015f20819055505b505b838381518110613498576134986142c5565b6020026020010151866001815181106134b3576134b36142c5565b602002602001018181516134c791906142d9565b9052505050600101613042565b5093509350939050565b5f5b8651811015613aeb575f60085f8984815181106134ff576134ff6142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061353c5761353c6142c5565b60200260200101511115613607577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb8286858151811061358c5761358c6142c5565b60200260200101516040518363ffffffff1660e01b81526004016135c59291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156135e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360591906142a6565b505b5f8088848151811061361b5761361b6142c5565b60200260200101515167ffffffffffffffff81111561363c5761363c613c5a565b604051908082528060200260200182016040528015613665578160200160208202803683370190505b5090505f5b89858151811061367c5761367c6142c5565b6020026020010151518110156136fe575f89868151811061369f5761369f6142c5565b602002602001015182815181106136b8576136b86142c5565b602002602001015111156136f65760018282815181106136da576136da6142c5565b911515602092830291909101909101526136f3836146a6565b92505b60010161366a565b50815f0361370e57505050613ae3565b5f8267ffffffffffffffff81111561372857613728613c5a565b604051908082528060200260200182016040528015613751578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561376e5761376e613c5a565b604051908082528060200260200182016040528015613797578160200160208202803683370190505b5090505f805b8c88815181106137af576137af6142c5565b602002602001015151811015613893578481815181106137d1576137d16142c5565b60200260200101511561388b578c88815181106137f0576137f06142c5565b60200260200101518181518110613809576138096142c5565b6020026020010151848381518110613823576138236142c5565b6020026020010181815250508b8881518110613841576138416142c5565b6020026020010151818151811061385a5761385a6142c5565b6020026020010151838381518110613874576138746142c5565b6020908102919091010152613888826146a6565b91505b60010161379d565b5060246138a9600267ffffffffffffffff6145d4565b6138b391906145fa565b67ffffffffffffffff168d88815181106138cf576138cf6142c5565b602002602001015111613a2f575f835167ffffffffffffffff8111156138f7576138f7613c5a565b604051908082528060200260200182016040528015613920578160200160208202803683370190505b5090505f5b845181101561397c57848181518110613940576139406142c5565b60200260200101515f1c82828151811061395c5761395c6142c5565b6001600160a01b0390921660209283029190910190910152600101613925565b50866001600160a01b031663bde526618a8a8151811061399e5761399e6142c5565b602002602001015183868f8d815181106139ba576139ba6142c5565b60200260200101518f8e815181106139d4576139d46142c5565b60200260200101516040518663ffffffff1660e01b81526004016139fb94939291906146be565b5f604051808303818588803b158015613a12575f80fd5b505af1158015613a24573d5f803e3d5ffd5b505050505050613adc565b856001600160a01b03166355442b59898981518110613a5057613a506142c5565b602002602001015185858e8c81518110613a6c57613a6c6142c5565b60200260200101518e8d81518110613a8657613a866142c5565b60200260200101516040518663ffffffff1660e01b8152600401613aad9493929190614708565b5f604051808303818588803b158015613ac4575f80fd5b505af1158015613ad6573d5f803e3d5ffd5b50505050505b5050505050505b6001016134e0565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6b91906142ec565b5f86815260066020526040812054945063ffffffff919091169150839003613ba657604051637c946ed760e01b815260040160405180910390fd5b808303613bdb5782613bb960018361428d565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f85815260076020526040902054600181118015613bf95750808410155b15613c0a5783613bb960018361428d565b613c1485856142d9565b9250600181118015613c2557508083115b15613c2e578092505b81831115613c3a578192505b50509250929050565b5f60208284031215613c53575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c9757613c97613c5a565b604052919050565b5f82601f830112613cae575f80fd5b813567ffffffffffffffff811115613cc857613cc8613c5a565b613cdb601f8201601f1916602001613c6e565b818152846020838601011115613cef575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d1e575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d49575f80fd5b613d5587828801613c9f565b91505092959194509250565b5f67ffffffffffffffff821115613d7a57613d7a613c5a565b5060051b60200190565b5f82601f830112613d93575f80fd5b81356020613da8613da383613d61565b613c6e565b8083825260208201915060208460051b870101935086841115613dc9575f80fd5b602086015b84811015613de55780358352918301918301613dce565b509695505050505050565b5f82601f830112613dff575f80fd5b81356020613e0f613da383613d61565b82815260059290921b84018101918181019086841115613e2d575f80fd5b8286015b84811015613de557803567ffffffffffffffff811115613e4f575f80fd5b613e5d8986838b0101613c9f565b845250918301918301613e31565b5f805f805f60a08688031215613e7f575f80fd5b8535945067ffffffffffffffff8060208801351115613e9c575f80fd5b613eac8860208901358901613d84565b94508060408801351115613ebe575f80fd5b6040870135870188601f820112613ed3575f80fd5b613ee0613da38235613d61565b81358082526020808301929160051b8401018b1015613efd575f80fd5b602083015b6020843560051b850101811015613f97578481351115613f20575f80fd5b803584018c603f820112613f32575f80fd5b613f42613da36020830135613d61565b602082810135808352908201919060051b83016040018f811115613f64575f80fd5b6040840193505b80841015613f86578335835260209384019390920191613f6b565b508552505060209283019201613f02565b50955050506060870135811015613fac575f80fd5b613fbc8860608901358901613df0565b92508060808801351115613fce575f80fd5b50613fdf8760808801358801613d84565b90509295509295909350565b5f805f60608486031215613ffd575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061404857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f6020828403121561405e575f80fd5b81356004811061406c575f80fd5b9392505050565b5f805f8060808587031215614086575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b03811681146140b8575f80fd5b919050565b5f602082840312156140cd575f80fd5b61406c826140a2565b5f80604083850312156140e7575f80fd5b50508035926020909101359150565b5f805f60608486031215614108575f80fd5b614111846140a2565b925061411f602085016140a2565b915061412d604085016140a2565b90509250925092565b5f8060408385031215614147575f80fd5b823567ffffffffffffffff8082111561415e575f80fd5b61416a86838701613d84565b9350602085013591508082111561417f575f80fd5b5061418c85828601613d84565b9150509250929050565b5f80604083850312156141a7575f80fd5b823567ffffffffffffffff808211156141be575f80fd5b818501915085601f8301126141d1575f80fd5b813560206141e1613da383613d61565b82815260059290921b840181019181810190898411156141ff575f80fd5b948201945b8386101561422457614215866140a2565b82529482019490820190614204565b9650508601359250508082111561417f575f80fd5b805160ff811681146140b8575f80fd5b5f60208284031215614259575f80fd5b61406c82614239565b5f60208284031215614272575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142a0576142a0614279565b92915050565b5f602082840312156142b6575f80fd5b8151801515811461406c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142a0576142a0614279565b5f602082840312156142fc575f80fd5b815163ffffffff8116811461406c575f80fd5b80516bffffffffffffffffffffffff811681146140b8575f80fd5b5f6080828403121561433a575f80fd5b6040516080810181811067ffffffffffffffff8211171561435d5761435d613c5a565b6040526143698361430f565b81526143776020840161430f565b6020820152604083015161ffff81168114614390575f80fd5b60408201526143a160608401614239565b60608201529392505050565b5f80604083850312156143be575f80fd5b505080516020909101519092909150565b80820281158282048414176142a0576142a0614279565b634e487b7160e01b5f52601260045260245ffd5b5f82614408576144086143e6565b500490565b600181815b8085111561444757815f190482111561442d5761442d614279565b8085161561443a57918102915b93841c9390800290614412565b509250929050565b5f8261445d575060016142a0565b8161446957505f6142a0565b816001811461447f5760028114614489576144a5565b60019150506142a0565b60ff84111561449a5761449a614279565b50506001821b6142a0565b5060208310610133831016604e8410600b84101617156144c8575081810a6142a0565b6144d2838361440d565b805f19048211156144e5576144e5614279565b029392505050565b5f61406c838361444f565b5f815180845260208085019450602084015f5b838110156145275781518752958201959082019060010161450b565b509495945050505050565b6001600160a01b0384168152606060208201525f61455360608301856144f8565b828103604084015261456581856144f8565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145275781516001600160a01b031687529582019590820190600101614582565b604081525f6145b9604083018561456f565b82810360208401526145cb81856144f8565b95945050505050565b5f67ffffffffffffffff808416806145ee576145ee6143e6565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561461b5761461b614279565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146776080830185614622565b905082606083015295945050505050565b848152836020820152608060408201525f6146776080830185614622565b5f600182016146b7576146b7614279565b5060010190565b608081525f6146d0608083018761456f565b82810360208401526146e281876144f8565b905082810360408401526146f68186614622565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561474057815184529284019290840190600101614724565b505050838103602085015261475581886144f8565b91505082810360408401526146f6818661462256fea264697066735822122041d3326451720723ceafc09161f224b183e6c1c9fd6f1a96e1113c7dec8b6b7e64736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/EthereumDepositProcessor.json b/abis/0.8.25/EthereumDepositProcessor.json index 7b3329e9..3502cda0 100644 --- a/abis/0.8.25/EthereumDepositProcessor.json +++ b/abis/0.8.25/EthereumDepositProcessor.json @@ -226,8 +226,8 @@ "type": "function" } ], - "bytecode": "0x610100604052348015610010575f80fd5b50604051610dac380380610dac83398101604081905261002f916100d7565b6001600160a01b038416158061004c57506001600160a01b038316155b8061005e57506001600160a01b038216155b8061007057506001600160a01b038116155b1561008e5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0393841660805291831660a052821660c0521660e0525f805460ff19166001179055610128565b80516001600160a01b03811681146100d2575f80fd5b919050565b5f805f80608085870312156100ea575f80fd5b6100f3856100bc565b9350610101602086016100bc565b925061010f604086016100bc565b915061011d606086016100bc565b905092959194509250565b60805160a05160c05160e051610c1b6101915f395f8181610131015261059d01525f818160d3015261049101525f818161015801528181610192015281816101f4015281816102f2015261035401525f81816082015281816105d401526106df0152610c1b5ff3fe608060405234801561000f575f80fd5b5060043610610079575f3560e01c8063b2267a7b11610058578063b2267a7b14610104578063bde5266114610119578063d33219b41461012c578063e09d894d14610153575f80fd5b806231d1151461007d57806329134768146100ce578063a8b2ae02146100f5575b5f80fd5b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b604051601281526020016100c5565b610117610112366004610980565b61017a565b005b610117610127366004610a6a565b6102da565b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461022c576040517f625a43fe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061026057610260610b3d565b73ffffffffffffffffffffffffffffffffffffffff92909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f815181106102bc576102bc610b3d565b6020026020010181815250506102d28282610397565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610387576040517f625a43fe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610223565b6103918484610397565b50505050565b5f54600160ff90911611156103d8576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660021781555b8251811015610823575f83828151811061041f5761041f610b3d565b602002602001015190505f83838151811061043c5761043c610b3d565b60209081029190910101516040517f1eda94d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192505f917f00000000000000000000000000000000000000000000000000000000000000001690631eda94d790602401602060405180830381865afa1580156104d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fa9190610b6a565b9050805f0361054d576040517fe65a6c4100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610223565b80821115610693575f6105608284610b81565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905293945084939192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af115801561061c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106409190610bbf565b508373ffffffffffffffffffffffffffffffffffffffff167f7ab855409e27a3b361adc9ebbc0750f5efb6d4594be28fef73c314d86d13a7f78260405161068991815260200190565b60405180910390a2505b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107499190610bbf565b506040517fb6b55f250000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff84169063b6b55f25906024015f604051808303815f87803b1580156107af575f80fd5b505af11580156107c1573d5f803e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f38360405161080d91815260200190565b60405180910390a2505050806001019050610403565b50505f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b803573ffffffffffffffffffffffffffffffffffffffff81168114610875575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108ee576108ee61087a565b604052919050565b5f82601f830112610905575f80fd5b813567ffffffffffffffff81111561091f5761091f61087a565b61095060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108a7565b818152846020838601011115610964575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215610993575f80fd5b61099c85610852565b935060208501359250604085013567ffffffffffffffff8111156109be575f80fd5b6109ca878288016108f6565b949793965093946060013593505050565b5f67ffffffffffffffff8211156109f4576109f461087a565b5060051b60200190565b5f82601f830112610a0d575f80fd5b81356020610a22610a1d836109db565b6108a7565b8083825260208201915060208460051b870101935086841115610a43575f80fd5b602086015b84811015610a5f5780358352918301918301610a48565b509695505050505050565b5f805f8060808587031215610a7d575f80fd5b843567ffffffffffffffff80821115610a94575f80fd5b818701915087601f830112610aa7575f80fd5b81356020610ab7610a1d836109db565b82815260059290921b8401810191818101908b841115610ad5575f80fd5b948201945b83861015610afa57610aeb86610852565b82529482019490820190610ada565b98505088013592505080821115610b0f575f80fd5b610b1b888389016109fe565b94506040870135915080821115610b30575f80fd5b506109ca878288016108f6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215610b7a575f80fd5b5051919050565b81810381811115610bb9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b92915050565b5f60208284031215610bcf575f80fd5b81518015158114610bde575f80fd5b939250505056fea26469706673582212205f7d2b0c3357c8768ff5aa942748c9a518b7e96b28d8649bab5347e5823c250464736f6c63430008190033", - "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610079575f3560e01c8063b2267a7b11610058578063b2267a7b14610104578063bde5266114610119578063d33219b41461012c578063e09d894d14610153575f80fd5b806231d1151461007d57806329134768146100ce578063a8b2ae02146100f5575b5f80fd5b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b604051601281526020016100c5565b610117610112366004610980565b61017a565b005b610117610127366004610a6a565b6102da565b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461022c576040517f625a43fe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061026057610260610b3d565b73ffffffffffffffffffffffffffffffffffffffff92909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f815181106102bc576102bc610b3d565b6020026020010181815250506102d28282610397565b505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610387576040517f625a43fe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610223565b6103918484610397565b50505050565b5f54600160ff90911611156103d8576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660021781555b8251811015610823575f83828151811061041f5761041f610b3d565b602002602001015190505f83838151811061043c5761043c610b3d565b60209081029190910101516040517f1eda94d700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301529192505f917f00000000000000000000000000000000000000000000000000000000000000001690631eda94d790602401602060405180830381865afa1580156104d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104fa9190610b6a565b9050805f0361054d576040517fe65a6c4100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610223565b80821115610693575f6105608284610b81565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905293945084939192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af115801561061c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106409190610bbf565b508373ffffffffffffffffffffffffffffffffffffffff167f7ab855409e27a3b361adc9ebbc0750f5efb6d4594be28fef73c314d86d13a7f78260405161068991815260200190565b60405180910390a2505b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107499190610bbf565b506040517fb6b55f250000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff84169063b6b55f25906024015f604051808303815f87803b1580156107af575f80fd5b505af11580156107c1573d5f803e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f38360405161080d91815260200190565b60405180910390a2505050806001019050610403565b50505f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b803573ffffffffffffffffffffffffffffffffffffffff81168114610875575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108ee576108ee61087a565b604052919050565b5f82601f830112610905575f80fd5b813567ffffffffffffffff81111561091f5761091f61087a565b61095060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108a7565b818152846020838601011115610964575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215610993575f80fd5b61099c85610852565b935060208501359250604085013567ffffffffffffffff8111156109be575f80fd5b6109ca878288016108f6565b949793965093946060013593505050565b5f67ffffffffffffffff8211156109f4576109f461087a565b5060051b60200190565b5f82601f830112610a0d575f80fd5b81356020610a22610a1d836109db565b6108a7565b8083825260208201915060208460051b870101935086841115610a43575f80fd5b602086015b84811015610a5f5780358352918301918301610a48565b509695505050505050565b5f805f8060808587031215610a7d575f80fd5b843567ffffffffffffffff80821115610a94575f80fd5b818701915087601f830112610aa7575f80fd5b81356020610ab7610a1d836109db565b82815260059290921b8401810191818101908b841115610ad5575f80fd5b948201945b83861015610afa57610aeb86610852565b82529482019490820190610ada565b98505088013592505080821115610b0f575f80fd5b610b1b888389016109fe565b94506040870135915080821115610b30575f80fd5b506109ca878288016108f6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215610b7a575f80fd5b5051919050565b81810381811115610bb9577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b92915050565b5f60208284031215610bcf575f80fd5b81518015158114610bde575f80fd5b939250505056fea26469706673582212205f7d2b0c3357c8768ff5aa942748c9a518b7e96b28d8649bab5347e5823c250464736f6c63430008190033", + "bytecode": "0x610100604052348015610010575f80fd5b50604051610c01380380610c0183398101604081905261002f916100d7565b6001600160a01b038416158061004c57506001600160a01b038316155b8061005e57506001600160a01b038216155b8061007057506001600160a01b038116155b1561008e5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0393841660805291831660a052821660c0521660e0525f805460ff19166001179055610128565b80516001600160a01b03811681146100d2575f80fd5b919050565b5f805f80608085870312156100ea575f80fd5b6100f3856100bc565b9350610101602086016100bc565b925061010f604086016100bc565b915061011d606086016100bc565b905092959194509250565b60805160a05160c05160e051610a706101915f395f818161012401526104d801525f818160c601526103e601525f818161014b01528181610178015281816101b40152818161029801526102d401525f818160820152818161050f01526106000152610a705ff3fe608060405234801561000f575f80fd5b5060043610610079575f3560e01c8063b2267a7b11610058578063b2267a7b146100f7578063bde526611461010c578063d33219b41461011f578063e09d894d14610146575f80fd5b806231d1151461007d57806329134768146100c1578063a8b2ae02146100e8575b5f80fd5b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b604051601281526020016100b8565b61010a610105366004610807565b61016d565b005b61010a61011a3660046108f1565b61028d565b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101ec5760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f81518110610220576102206109c4565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061026f5761026f6109c4565b6020026020010181815250506102858282610317565b505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103075760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044016101e3565b6103118484610317565b50505050565b5f54600160ff9091161115610358576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805460ff191660021781555b825181101561072a575f838281518110610381576103816109c4565b602002602001015190505f83838151811061039e5761039e6109c4565b60209081029190910101516040517f1eda94d70000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529192505f917f00000000000000000000000000000000000000000000000000000000000000001690631eda94d790602401602060405180830381865afa15801561042b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044f91906109d8565b9050805f03610495576040517fe65a6c410000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101e3565b808211156105c1575f6104a882846109ef565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905293945084939192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015610557573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061057b9190610a14565b50836001600160a01b03167f7ab855409e27a3b361adc9ebbc0750f5efb6d4594be28fef73c314d86d13a7f7826040516105b791815260200190565b60405180910390a2505b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610646573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066a9190610a14565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0384169063b6b55f25906024015f604051808303815f87803b1580156106c3575f80fd5b505af11580156106d5573d5f803e3d5ffd5b50505050826001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f38360405161071491815260200190565b60405180910390a2505050806001019050610365565b50505f805460ff1916600117905550565b80356001600160a01b0381168114610751575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561079357610793610756565b604052919050565b5f82601f8301126107aa575f80fd5b813567ffffffffffffffff8111156107c4576107c4610756565b6107d7601f8201601f191660200161076a565b8181528460208386010111156107eb575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f806080858703121561081a575f80fd5b6108238561073b565b935060208501359250604085013567ffffffffffffffff811115610845575f80fd5b6108518782880161079b565b949793965093946060013593505050565b5f67ffffffffffffffff82111561087b5761087b610756565b5060051b60200190565b5f82601f830112610894575f80fd5b813560206108a96108a483610862565b61076a565b8083825260208201915060208460051b8701019350868411156108ca575f80fd5b602086015b848110156108e657803583529183019183016108cf565b509695505050505050565b5f805f8060808587031215610904575f80fd5b843567ffffffffffffffff8082111561091b575f80fd5b818701915087601f83011261092e575f80fd5b8135602061093e6108a483610862565b82815260059290921b8401810191818101908b84111561095c575f80fd5b948201945b83861015610981576109728661073b565b82529482019490820190610961565b98505088013592505080821115610996575f80fd5b6109a288838901610885565b945060408701359150808211156109b7575f80fd5b506108518782880161079b565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156109e8575f80fd5b5051919050565b81810381811115610a0e57634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215610a24575f80fd5b81518015158114610a33575f80fd5b939250505056fea26469706673582212205b944139e363f8017bfcca63edc212fff8f05ed88a8b0d4db65c64ce77a45d0d64736f6c63430008190033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610079575f3560e01c8063b2267a7b11610058578063b2267a7b146100f7578063bde526611461010c578063d33219b41461011f578063e09d894d14610146575f80fd5b806231d1151461007d57806329134768146100c1578063a8b2ae02146100e8575b5f80fd5b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b604051601281526020016100b8565b61010a610105366004610807565b61016d565b005b61010a61011a3660046108f1565b61028d565b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b6100a47f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101ec5760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f81518110610220576102206109c4565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061026f5761026f6109c4565b6020026020010181815250506102858282610317565b505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103075760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044016101e3565b6103118484610317565b50505050565b5f54600160ff9091161115610358576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805460ff191660021781555b825181101561072a575f838281518110610381576103816109c4565b602002602001015190505f83838151811061039e5761039e6109c4565b60209081029190910101516040517f1eda94d70000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529192505f917f00000000000000000000000000000000000000000000000000000000000000001690631eda94d790602401602060405180830381865afa15801561042b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044f91906109d8565b9050805f03610495576040517fe65a6c410000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101e3565b808211156105c1575f6104a882846109ef565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905293945084939192507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015610557573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061057b9190610a14565b50836001600160a01b03167f7ab855409e27a3b361adc9ebbc0750f5efb6d4594be28fef73c314d86d13a7f7826040516105b791815260200190565b60405180910390a2505b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610646573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066a9190610a14565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0384169063b6b55f25906024015f604051808303815f87803b1580156106c3575f80fd5b505af11580156106d5573d5f803e3d5ffd5b50505050826001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f38360405161071491815260200190565b60405180910390a2505050806001019050610365565b50505f805460ff1916600117905550565b80356001600160a01b0381168114610751575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561079357610793610756565b604052919050565b5f82601f8301126107aa575f80fd5b813567ffffffffffffffff8111156107c4576107c4610756565b6107d7601f8201601f191660200161076a565b8181528460208386010111156107eb575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f806080858703121561081a575f80fd5b6108238561073b565b935060208501359250604085013567ffffffffffffffff811115610845575f80fd5b6108518782880161079b565b949793965093946060013593505050565b5f67ffffffffffffffff82111561087b5761087b610756565b5060051b60200190565b5f82601f830112610894575f80fd5b813560206108a96108a483610862565b61076a565b8083825260208201915060208460051b8701019350868411156108ca575f80fd5b602086015b848110156108e657803583529183019183016108cf565b509695505050505050565b5f805f8060808587031215610904575f80fd5b843567ffffffffffffffff8082111561091b575f80fd5b818701915087601f83011261092e575f80fd5b8135602061093e6108a483610862565b82815260059290921b8401810191818101908b84111561095c575f80fd5b948201945b83861015610981576109728661073b565b82529482019490820190610961565b98505088013592505080821115610996575f80fd5b6109a288838901610885565b945060408701359150808211156109b7575f80fd5b506108518782880161079b565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156109e8575f80fd5b5051919050565b81810381811115610a0e57634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215610a24575f80fd5b81518015158114610a33575f80fd5b939250505056fea26469706673582212205b944139e363f8017bfcca63edc212fff8f05ed88a8b0d4db65c64ce77a45d0d64736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/GnosisDepositProcessorL1.json b/abis/0.8.25/GnosisDepositProcessorL1.json index 9f01dfbd..fa5b4781 100644 --- a/abis/0.8.25/GnosisDepositProcessorL1.json +++ b/abis/0.8.25/GnosisDepositProcessorL1.json @@ -164,9 +164,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -317,6 +317,25 @@ "name": "L2TargetDispenserUpdated", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "leftovers", + "type": "uint256" + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -343,6 +362,12 @@ "internalType": "uint256", "name": "transferAmount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -373,19 +398,6 @@ "name": "MessageReceived", "type": "event" }, - { - "inputs": [], - "name": "BRIDGE_PAYLOAD_LENGTH", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "MAX_CHAIN_ID", @@ -542,6 +554,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -636,10 +667,23 @@ ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + } + ], + "name": "updateHashMaintenance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ], - "bytecode": "0x610120604052348015610010575f80fd5b506040516117a93803806117a983398101604081905261002f91610179565b84848484846001600160a01b038416158061005157506001600160a01b038316155b8061006357506001600160a01b038216155b156100815760405163d92e233d60e01b815260040160405180910390fd5b805f036100a157604051637c946ed760e01b815260040160405180910390fd5b60246100b560026001600160401b036101d3565b6100bf9190610204565b6001600160401b031681111561011d578060246100e460026001600160401b036101d3565b6100ee9190610204565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c05290911660e052610100525050600180546001600160a01b0319163317905550610237915050565b80516001600160a01b0381168114610174575f80fd5b919050565b5f805f805f60a0868803121561018d575f80fd5b6101968661015e565b94506101a46020870161015e565b93506101b26040870161015e565b92506101c06060870161015e565b9150608086015190509295509295909350565b5f6001600160401b03838116806101f857634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561023057634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e051610100516114cc6102dd5f395f818161034b01528181610d9d0152610e3901525f8181610187015281816106cb01528181610c1301528181610ca00152610d0d01525f81816102c0015281816108dd01526109ce01525f818161039c0152818161044b015281816104a0015281816105da0152818161062f0152610e6901525f81816101370152818161090c01526109fc01526114cc5ff3fe608060405260043610610122575f3560e01c8063a8b2ae02116100a1578063e309fb7711610071578063f4427c2c11610057578063f4427c2c146103be578063f953cec7146103d3578063f9fc3c21146103f2575f80fd5b8063e309fb771461036d578063f2541c351461038b575f80fd5b8063a8b2ae0214610301578063b2267a7b14610314578063bde5266114610327578063c23cc3ff1461033a575f80fd5b806354d20cc2116100f65780635bc105c0116100dc5780635bc105c01461029b5780636143fe93146102af5780638da5cb5b146102e2575f80fd5b806354d20cc2146101e157806354e4bbf41461027a575f80fd5b806231d115146101265780633d1f8679146101765780634c1c6cbf146101a95780634ece6b17146101cd575b5f80fd5b348015610131575f80fd5b506101597f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610181575f80fd5b506101597f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101bf620493e081565b60405190815260200161016d565b3480156101d8575f80fd5b506101bf602081565b3480156101ec575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102497ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161016d565b348015610285575f80fd5b50610299610294366004610ee2565b610408565b005b3480156102a6575f80fd5b506101bf610414565b3480156102ba575f80fd5b506101597f000000000000000000000000000000000000000000000000000000000000000081565b3480156102ed575f80fd5b50600154610159906001600160a01b031681565b34801561030c575f80fd5b5060126101bf565b610299610322366004610fce565b610440565b6102996103353660046110ba565b6105cf565b348015610345575f80fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610378575f80fd5b505f54610159906001600160a01b031681565b348015610396575f80fd5b506101597f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c9575f80fd5b506101bf60025481565b3480156103de575f80fd5b506102996103ed36600461118f565b6106c8565b3480156103fd575f80fd5b506101bf621e848081565b6104118161075b565b50565b6024610429600267ffffffffffffffff6111ee565b6104339190611239565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104d8576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061050c5761050c611261565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061055b5761055b611261565b6020026020010181815250505f6105748383878761085e565b600280549192505f6105858361128e565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328484876040516105be93929190611337565b60405180910390a250505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610662576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044016104cf565b5f61066f8585858561085e565b600280549192505f6106808361128e565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328686856040516106b993929190611337565b60405180910390a25050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d67bdd256040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610726573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074a919061136c565b9050610757338284610c9e565b5050565b6001546001600160a01b031633146107b4576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201523360248201526044016104cf565b6001600160a01b0381166107f4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f60208351146108a75782516040517f34c9027a0000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016104cf565b8115610a63576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610952573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109769190611387565b505f858560405160200161098b9291906113a6565b60408051601f19818403018152908290525f547fd74054810000000000000000000000000000000000000000000000000000000083529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263d740548192610a2b927f00000000000000000000000000000000000000000000000000000000000000009291169088908790600401611401565b5f604051808303815f87803b158015610a42575f80fd5b505af1158015610a54573d5f803e3d5ffd5b50505050600254915050610c96565b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d91610acb9189918991016113a6565b60408051601f1981840301815290829052610ae89160240161143c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f84806020019051810190610b5c919061144e565b9050805f03610b97576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b621e8480811115610be0576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052621e848060248201526044016104cf565b5f80546040517fdc8601b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b392610c5092919091169087908790600401611465565b6020604051808303815f875af1158015610c6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c90919061144e565b93505050505b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610d3a576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016104cf565b5f546001600160a01b03838116911614610d96575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015290911660248201526044016104cf565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610df490859061143c565b60405180910390a35f81806020019051810190610e11919061144e565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b158015610eb2575f80fd5b505af1158015610ec4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b0381168114610411575f80fd5b5f60208284031215610ef2575f80fd5b8135610efd81610ece565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610f5a57610f5a610f04565b604052919050565b5f82601f830112610f71575f80fd5b813567ffffffffffffffff811115610f8b57610f8b610f04565b610f9e6020601f19601f84011601610f31565b818152846020838601011115610fb2575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215610fe1575f80fd5b8435610fec81610ece565b935060208501359250604085013567ffffffffffffffff81111561100e575f80fd5b61101a87828801610f62565b949793965093946060013593505050565b5f67ffffffffffffffff82111561104457611044610f04565b5060051b60200190565b5f82601f83011261105d575f80fd5b8135602061107261106d8361102b565b610f31565b8083825260208201915060208460051b870101935086841115611093575f80fd5b602086015b848110156110af5780358352918301918301611098565b509695505050505050565b5f805f80608085870312156110cd575f80fd5b843567ffffffffffffffff808211156110e4575f80fd5b818701915087601f8301126110f7575f80fd5b8135602061110761106d8361102b565b82815260059290921b8401810191818101908b841115611125575f80fd5b948201945b8386101561114c57853561113d81610ece565b8252948201949082019061112a565b98505088013592505080821115611161575f80fd5b61116d8883890161104e565b94506040870135915080821115611182575f80fd5b5061101a87828801610f62565b5f6020828403121561119f575f80fd5b813567ffffffffffffffff8111156111b5575f80fd5b610c9684828501610f62565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff8084168061122d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff82811682821603908082111561125a5761125a6111c1565b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112be576112be6111c1565b5060010190565b5f815180845260208085019450602084015f5b838110156112fd5781516001600160a01b0316875295820195908201906001016112d8565b509495945050505050565b5f815180845260208085019450602084015f5b838110156112fd5781518752958201959082019060010161131b565b606081525f61134960608301866112c5565b828103602084015261135b8186611308565b915050826040830152949350505050565b5f6020828403121561137c575f80fd5b8151610efd81610ece565b5f60208284031215611397575f80fd5b81518015158114610efd575f80fd5b604081525f6113b860408301856112c5565b82810360208401526113ca8185611308565b95945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b0380871683528086166020840152508360408301526080606083015261143260808301846113d3565b9695505050505050565b602081525f610efd60208301846113d3565b5f6020828403121561145e575f80fd5b5051919050565b6001600160a01b0384168152606060208201525f61148660608301856113d3565b905082604083015294935050505056fea2646970667358221220c15565e2267b4ad66ab6c04a7997077b1267cf2768b12921b2b00038368574e964736f6c63430008190033", - "deployedBytecode": "0x608060405260043610610122575f3560e01c8063a8b2ae02116100a1578063e309fb7711610071578063f4427c2c11610057578063f4427c2c146103be578063f953cec7146103d3578063f9fc3c21146103f2575f80fd5b8063e309fb771461036d578063f2541c351461038b575f80fd5b8063a8b2ae0214610301578063b2267a7b14610314578063bde5266114610327578063c23cc3ff1461033a575f80fd5b806354d20cc2116100f65780635bc105c0116100dc5780635bc105c01461029b5780636143fe93146102af5780638da5cb5b146102e2575f80fd5b806354d20cc2146101e157806354e4bbf41461027a575f80fd5b806231d115146101265780633d1f8679146101765780634c1c6cbf146101a95780634ece6b17146101cd575b5f80fd5b348015610131575f80fd5b506101597f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610181575f80fd5b506101597f000000000000000000000000000000000000000000000000000000000000000081565b3480156101b4575f80fd5b506101bf620493e081565b60405190815260200161016d565b3480156101d8575f80fd5b506101bf602081565b3480156101ec575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102497ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161016d565b348015610285575f80fd5b50610299610294366004610ee2565b610408565b005b3480156102a6575f80fd5b506101bf610414565b3480156102ba575f80fd5b506101597f000000000000000000000000000000000000000000000000000000000000000081565b3480156102ed575f80fd5b50600154610159906001600160a01b031681565b34801561030c575f80fd5b5060126101bf565b610299610322366004610fce565b610440565b6102996103353660046110ba565b6105cf565b348015610345575f80fd5b506101bf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610378575f80fd5b505f54610159906001600160a01b031681565b348015610396575f80fd5b506101597f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c9575f80fd5b506101bf60025481565b3480156103de575f80fd5b506102996103ed36600461118f565b6106c8565b3480156103fd575f80fd5b506101bf621e848081565b6104118161075b565b50565b6024610429600267ffffffffffffffff6111ee565b6104339190611239565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104d8576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061050c5761050c611261565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061055b5761055b611261565b6020026020010181815250505f6105748383878761085e565b600280549192505f6105858361128e565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328484876040516105be93929190611337565b60405180910390a250505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610662576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044016104cf565b5f61066f8585858561085e565b600280549192505f6106808361128e565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328686856040516106b993929190611337565b60405180910390a25050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d67bdd256040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610726573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074a919061136c565b9050610757338284610c9e565b5050565b6001546001600160a01b031633146107b4576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201523360248201526044016104cf565b6001600160a01b0381166107f4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f60208351146108a75782516040517f34c9027a0000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016104cf565b8115610a63576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610952573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109769190611387565b505f858560405160200161098b9291906113a6565b60408051601f19818403018152908290525f547fd74054810000000000000000000000000000000000000000000000000000000083529092506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263d740548192610a2b927f00000000000000000000000000000000000000000000000000000000000000009291169088908790600401611401565b5f604051808303815f87803b158015610a42575f80fd5b505af1158015610a54573d5f803e3d5ffd5b50505050600254915050610c96565b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d91610acb9189918991016113a6565b60408051601f1981840301815290829052610ae89160240161143c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f84806020019051810190610b5c919061144e565b9050805f03610b97576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b621e8480811115610be0576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052621e848060248201526044016104cf565b5f80546040517fdc8601b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b392610c5092919091169087908790600401611465565b6020604051808303815f875af1158015610c6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c90919061144e565b93505050505b949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610d3a576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016104cf565b5f546001600160a01b03838116911614610d96575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015290911660248201526044016104cf565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610df490859061143c565b60405180910390a35f81806020019051810190610e11919061144e565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b158015610eb2575f80fd5b505af1158015610ec4573d5f803e3d5ffd5b5050505050505050565b6001600160a01b0381168114610411575f80fd5b5f60208284031215610ef2575f80fd5b8135610efd81610ece565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610f5a57610f5a610f04565b604052919050565b5f82601f830112610f71575f80fd5b813567ffffffffffffffff811115610f8b57610f8b610f04565b610f9e6020601f19601f84011601610f31565b818152846020838601011115610fb2575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215610fe1575f80fd5b8435610fec81610ece565b935060208501359250604085013567ffffffffffffffff81111561100e575f80fd5b61101a87828801610f62565b949793965093946060013593505050565b5f67ffffffffffffffff82111561104457611044610f04565b5060051b60200190565b5f82601f83011261105d575f80fd5b8135602061107261106d8361102b565b610f31565b8083825260208201915060208460051b870101935086841115611093575f80fd5b602086015b848110156110af5780358352918301918301611098565b509695505050505050565b5f805f80608085870312156110cd575f80fd5b843567ffffffffffffffff808211156110e4575f80fd5b818701915087601f8301126110f7575f80fd5b8135602061110761106d8361102b565b82815260059290921b8401810191818101908b841115611125575f80fd5b948201945b8386101561114c57853561113d81610ece565b8252948201949082019061112a565b98505088013592505080821115611161575f80fd5b61116d8883890161104e565b94506040870135915080821115611182575f80fd5b5061101a87828801610f62565b5f6020828403121561119f575f80fd5b813567ffffffffffffffff8111156111b5575f80fd5b610c9684828501610f62565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff8084168061122d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff82811682821603908082111561125a5761125a6111c1565b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112be576112be6111c1565b5060010190565b5f815180845260208085019450602084015f5b838110156112fd5781516001600160a01b0316875295820195908201906001016112d8565b509495945050505050565b5f815180845260208085019450602084015f5b838110156112fd5781518752958201959082019060010161131b565b606081525f61134960608301866112c5565b828103602084015261135b8186611308565b915050826040830152949350505050565b5f6020828403121561137c575f80fd5b8151610efd81610ece565b5f60208284031215611397575f80fd5b81518015158114610efd575f80fd5b604081525f6113b860408301856112c5565b82810360208401526113ca8185611308565b95945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b0380871683528086166020840152508360408301526080606083015261143260808301846113d3565b9695505050505050565b602081525f610efd60208301846113d3565b5f6020828403121561145e575f80fd5b5051919050565b6001600160a01b0384168152606060208201525f61148660608301856113d3565b905082604083015294935050505056fea2646970667358221220c15565e2267b4ad66ab6c04a7997077b1267cf2768b12921b2b00038368574e964736f6c63430008190033", + "bytecode": "0x610120604052348015610010575f80fd5b506040516118a23803806118a283398101604081905261002f91610179565b84848484846001600160a01b038416158061005157506001600160a01b038316155b8061006357506001600160a01b038216155b156100815760405163d92e233d60e01b815260040160405180910390fd5b805f036100a157604051637c946ed760e01b815260040160405180910390fd5b60246100b560026001600160401b036101d3565b6100bf9190610204565b6001600160401b031681111561011d578060246100e460026001600160401b036101d3565b6100ee9190610204565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c05290911660e052610100525050600180546001600160a01b0319163317905550610237915050565b80516001600160a01b0381168114610174575f80fd5b919050565b5f805f805f60a0868803121561018d575f80fd5b6101968661015e565b94506101a46020870161015e565b93506101b26040870161015e565b92506101c06060870161015e565b9150608086015190509295509295909350565b5f6001600160401b03838116806101f857634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561023057634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e051610100516115b76102eb5f395f81816103ae01528181610edc0152610fc801525f81816101df0152818161090d01528181610d5101528181610ddf0152610e4c01525f818161030401528181610ad80152610bdb01525f81816103ff015281816104ae015281816104ea01528181610579015281816105b5015281816107aa015281816107e6015261100401525f818161015101528181610b070152610ba401526115b75ff3fe60806040526004361061013c575f3560e01c8063a8b2ae02116100bb578063e309fb7711610071578063f4427c2c11610057578063f4427c2c14610421578063f953cec714610436578063f9fc3c2114610455575f80fd5b8063e309fb77146103d0578063f2541c35146103ee575f80fd5b8063b2267a7b116100a1578063b2267a7b14610377578063bde526611461038a578063c23cc3ff1461039d575f80fd5b8063a8b2ae0214610345578063ac65ded214610358575f80fd5b806354d20cc2116101105780635bc105c0116100f65780635bc105c0146102df5780636143fe93146102f35780638da5cb5b14610326575f80fd5b806354d20cc21461022557806354e4bbf4146102be575f80fd5b806231d1151461014057806307d9c534146101905780633d1f8679146101ce5780634c1c6cbf14610201575b5f80fd5b34801561014b575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019b575f80fd5b506101be6101aa366004611062565b60036020525f908152604090205460ff1681565b6040519015158152602001610187565b3480156101d9575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b34801561020c575f80fd5b50610217620493e081565b604051908152602001610187565b348015610230575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261028d7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610187565b3480156102c9575f80fd5b506102dd6102d836600461108d565b61046b565b005b3480156102ea575f80fd5b50610217610477565b3480156102fe575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b348015610331575f80fd5b50600154610173906001600160a01b031681565b348015610350575f80fd5b506012610217565b348015610363575f80fd5b506102dd610372366004611062565b6104a3565b6102dd610385366004611160565b61056e565b6102dd61039836600461124c565b61079f565b3480156103a8575f80fd5b506102177f000000000000000000000000000000000000000000000000000000000000000081565b3480156103db575f80fd5b505f54610173906001600160a01b031681565b3480156103f9575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b34801561042c575f80fd5b5061021760025481565b348015610441575f80fd5b506102dd610450366004611321565b61090a565b348015610460575f80fd5b50610217621e848081565b6104748161099d565b50565b602461048c600267ffffffffffffffff61136f565b61049691906113a1565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105225760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b5f8181526003602052604090205460ff1615610554576040516356bc34a160e01b815260048101829052602401610519565b5f908152600360205260409020805460ff19166001179055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105e85760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610519565b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061061c5761061c6113c9565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061066b5761066b6113c9565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f806106bf86868a8a87610aa0565b9092509050801561074557604051329082905f81818185875af1925050503d805f8114610707576040519150601f19603f3d011682016040523d82523d5f602084013e61070c565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b6107508460016113dd565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b60405161078b93929190611468565b60405180910390a350505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108195760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610519565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f806108618888888887610aa0565b909250905080156108b257604051329082905f81818185875af1925050503d805f81146108a9576040519150601f19603f3d011682016040523d82523d5f602084013e6108ae565b606091505b5050505b6108bd8460016113dd565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a896040516108f893929190611468565b60405180910390a35050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d67bdd256040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610968573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098c919061149d565b9050610999338284610ddd565b5050565b6001546001600160a01b031633146109f6576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610519565b6001600160a01b038116610a36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f808315610c35576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610b4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7191906114b8565b505f546040517fad58bdd10000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529182166024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000009091169063ad58bdd1906064015f604051808303815f87803b158015610c1e575f80fd5b505af1158015610c30573d5f803e3d5ffd5b505050505b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d91610c9f918b918b91899101611468565b60408051601f1981840301815290829052610cbc91602401611505565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092525f805492517fdc8601b3000000000000000000000000000000000000000000000000000000008152919350916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b392610d8e9216908690621e848090600401611517565b6020604051808303815f875af1158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce9190611548565b99349950975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610e79576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610519565b5f546001600160a01b03838116911614610ed5575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610519565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610f33908590611505565b60405180910390a35f8082806020019051810190610f51919061155f565b5f81815260036020526040902054919350915060ff1615610f88576040516356bc34a160e01b815260048101829052602401610519565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b158015611045575f80fd5b505af1158015611057573d5f803e3d5ffd5b505050505050505050565b5f60208284031215611072575f80fd5b5035919050565b6001600160a01b0381168114610474575f80fd5b5f6020828403121561109d575f80fd5b81356110a881611079565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110ec576110ec6110af565b604052919050565b5f82601f830112611103575f80fd5b813567ffffffffffffffff81111561111d5761111d6110af565b611130601f8201601f19166020016110c3565b818152846020838601011115611144575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611173575f80fd5b843561117e81611079565b935060208501359250604085013567ffffffffffffffff8111156111a0575f80fd5b6111ac878288016110f4565b949793965093946060013593505050565b5f67ffffffffffffffff8211156111d6576111d66110af565b5060051b60200190565b5f82601f8301126111ef575f80fd5b813560206112046111ff836111bd565b6110c3565b8083825260208201915060208460051b870101935086841115611225575f80fd5b602086015b84811015611241578035835291830191830161122a565b509695505050505050565b5f805f806080858703121561125f575f80fd5b843567ffffffffffffffff80821115611276575f80fd5b818701915087601f830112611289575f80fd5b813560206112996111ff836111bd565b82815260059290921b8401810191818101908b8411156112b7575f80fd5b948201945b838610156112de5785356112cf81611079565b825294820194908201906112bc565b985050880135925050808211156112f3575f80fd5b6112ff888389016111e0565b94506040870135915080821115611314575f80fd5b506111ac878288016110f4565b5f60208284031215611331575f80fd5b813567ffffffffffffffff811115611347575f80fd5b611353848285016110f4565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff8084168061139557634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156113c2576113c261135b565b5092915050565b634e487b7160e01b5f52603260045260245ffd5b808201808211156113f0576113f061135b565b92915050565b5f815180845260208085019450602084015f5b8381101561142e5781516001600160a01b031687529582019590820190600101611409565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561142e5781518752958201959082019060010161144c565b606081525f61147a60608301866113f6565b828103602084015261148c8186611439565b915050826040830152949350505050565b5f602082840312156114ad575f80fd5b81516110a881611079565b5f602082840312156114c8575f80fd5b815180151581146110a8575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6110a860208301846114d7565b6001600160a01b0384168152606060208201525f61153860608301856114d7565b9050826040830152949350505050565b5f60208284031215611558575f80fd5b5051919050565b5f8060408385031215611570575f80fd5b50508051602090910151909290915056fea26469706673582212207fc5bd2bb5c72b7fff49e36fe1f3a02a98663b6a948baab0bc66e6e9df5dfcca64736f6c63430008190033", + "deployedBytecode": "0x60806040526004361061013c575f3560e01c8063a8b2ae02116100bb578063e309fb7711610071578063f4427c2c11610057578063f4427c2c14610421578063f953cec714610436578063f9fc3c2114610455575f80fd5b8063e309fb77146103d0578063f2541c35146103ee575f80fd5b8063b2267a7b116100a1578063b2267a7b14610377578063bde526611461038a578063c23cc3ff1461039d575f80fd5b8063a8b2ae0214610345578063ac65ded214610358575f80fd5b806354d20cc2116101105780635bc105c0116100f65780635bc105c0146102df5780636143fe93146102f35780638da5cb5b14610326575f80fd5b806354d20cc21461022557806354e4bbf4146102be575f80fd5b806231d1151461014057806307d9c534146101905780633d1f8679146101ce5780634c1c6cbf14610201575b5f80fd5b34801561014b575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019b575f80fd5b506101be6101aa366004611062565b60036020525f908152604090205460ff1681565b6040519015158152602001610187565b3480156101d9575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b34801561020c575f80fd5b50610217620493e081565b604051908152602001610187565b348015610230575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261028d7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610187565b3480156102c9575f80fd5b506102dd6102d836600461108d565b61046b565b005b3480156102ea575f80fd5b50610217610477565b3480156102fe575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b348015610331575f80fd5b50600154610173906001600160a01b031681565b348015610350575f80fd5b506012610217565b348015610363575f80fd5b506102dd610372366004611062565b6104a3565b6102dd610385366004611160565b61056e565b6102dd61039836600461124c565b61079f565b3480156103a8575f80fd5b506102177f000000000000000000000000000000000000000000000000000000000000000081565b3480156103db575f80fd5b505f54610173906001600160a01b031681565b3480156103f9575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b34801561042c575f80fd5b5061021760025481565b348015610441575f80fd5b506102dd610450366004611321565b61090a565b348015610460575f80fd5b50610217621e848081565b6104748161099d565b50565b602461048c600267ffffffffffffffff61136f565b61049691906113a1565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105225760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b5f8181526003602052604090205460ff1615610554576040516356bc34a160e01b815260048101829052602401610519565b5f908152600360205260409020805460ff19166001179055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105e85760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610519565b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061061c5761061c6113c9565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061066b5761066b6113c9565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f806106bf86868a8a87610aa0565b9092509050801561074557604051329082905f81818185875af1925050503d805f8114610707576040519150601f19603f3d011682016040523d82523d5f602084013e61070c565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b6107508460016113dd565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b60405161078b93929190611468565b60405180910390a350505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108195760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610519565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f806108618888888887610aa0565b909250905080156108b257604051329082905f81818185875af1925050503d805f81146108a9576040519150601f19603f3d011682016040523d82523d5f602084013e6108ae565b606091505b5050505b6108bd8460016113dd565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a896040516108f893929190611468565b60405180910390a35050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d67bdd256040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610968573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098c919061149d565b9050610999338284610ddd565b5050565b6001546001600160a01b031633146109f6576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610519565b6001600160a01b038116610a36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f808315610c35576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610b4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7191906114b8565b505f546040517fad58bdd10000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529182166024820152604481018690527f00000000000000000000000000000000000000000000000000000000000000009091169063ad58bdd1906064015f604051808303815f87803b158015610c1e575f80fd5b505af1158015610c30573d5f803e3d5ffd5b505050505b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d91610c9f918b918b91899101611468565b60408051601f1981840301815290829052610cbc91602401611505565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092525f805492517fdc8601b3000000000000000000000000000000000000000000000000000000008152919350916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263dc8601b392610d8e9216908690621e848090600401611517565b6020604051808303815f875af1158015610daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dce9190611548565b99349950975050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610e79576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610519565b5f546001600160a01b03838116911614610ed5575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610519565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610f33908590611505565b60405180910390a35f8082806020019051810190610f51919061155f565b5f81815260036020526040902054919350915060ff1615610f88576040516356bc34a160e01b815260048101829052602401610519565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b158015611045575f80fd5b505af1158015611057573d5f803e3d5ffd5b505050505050505050565b5f60208284031215611072575f80fd5b5035919050565b6001600160a01b0381168114610474575f80fd5b5f6020828403121561109d575f80fd5b81356110a881611079565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110ec576110ec6110af565b604052919050565b5f82601f830112611103575f80fd5b813567ffffffffffffffff81111561111d5761111d6110af565b611130601f8201601f19166020016110c3565b818152846020838601011115611144575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611173575f80fd5b843561117e81611079565b935060208501359250604085013567ffffffffffffffff8111156111a0575f80fd5b6111ac878288016110f4565b949793965093946060013593505050565b5f67ffffffffffffffff8211156111d6576111d66110af565b5060051b60200190565b5f82601f8301126111ef575f80fd5b813560206112046111ff836111bd565b6110c3565b8083825260208201915060208460051b870101935086841115611225575f80fd5b602086015b84811015611241578035835291830191830161122a565b509695505050505050565b5f805f806080858703121561125f575f80fd5b843567ffffffffffffffff80821115611276575f80fd5b818701915087601f830112611289575f80fd5b813560206112996111ff836111bd565b82815260059290921b8401810191818101908b8411156112b7575f80fd5b948201945b838610156112de5785356112cf81611079565b825294820194908201906112bc565b985050880135925050808211156112f3575f80fd5b6112ff888389016111e0565b94506040870135915080821115611314575f80fd5b506111ac878288016110f4565b5f60208284031215611331575f80fd5b813567ffffffffffffffff811115611347575f80fd5b611353848285016110f4565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff8084168061139557634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156113c2576113c261135b565b5092915050565b634e487b7160e01b5f52603260045260245ffd5b808201808211156113f0576113f061135b565b92915050565b5f815180845260208085019450602084015f5b8381101561142e5781516001600160a01b031687529582019590820190600101611409565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561142e5781518752958201959082019060010161144c565b606081525f61147a60608301866113f6565b828103602084015261148c8186611439565b915050826040830152949350505050565b5f602082840312156114ad575f80fd5b81516110a881611079565b5f602082840312156114c8575f80fd5b815180151581146110a8575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6110a860208301846114d7565b6001600160a01b0384168152606060208201525f61153860608301856114d7565b9050826040830152949350505050565b5f60208284031215611558575f80fd5b5051919050565b5f8060408385031215611570575f80fd5b50508051602090910151909290915056fea26469706673582212207fc5bd2bb5c72b7fff49e36fe1f3a02a98663b6a948baab0bc66e6e9df5dfcca64736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/GnosisTargetDispenserL2.json b/abis/0.8.25/GnosisTargetDispenserL2.json index a77411ae..34ae573c 100644 --- a/abis/0.8.25/GnosisTargetDispenserL2.json +++ b/abis/0.8.25/GnosisTargetDispenserL2.json @@ -29,11 +29,6 @@ "internalType": "uint256", "name": "_l1SourceChainId", "type": "uint256" - }, - { - "internalType": "address", - "name": "_l2TokenRelayer", - "type": "address" } ], "stateMutability": "nonpayable", @@ -169,9 +164,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -371,20 +366,33 @@ "inputs": [ { "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, "internalType": "uint256", - "name": "sequence", + "name": "leftovers", "type": "uint256" - }, + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": true, - "internalType": "address", - "name": "messageSender", - "type": "address" + "internalType": "uint256", + "name": "sequence", + "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "l1Processor", + "name": "messageSender", "type": "address" }, { @@ -392,6 +400,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -481,10 +495,16 @@ "name": "amount", "type": "uint256" }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, { "indexed": false, "internalType": "uint256", - "name": "batchNonce", + "name": "olasBalance", "type": "uint256" }, { @@ -511,6 +531,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "StakingTargetDeposited", @@ -528,25 +554,6 @@ "name": "TargetDispenserUnpaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithheldAmountSynced", - "type": "event" - }, { "inputs": [], "name": "BRIDGE_PAYLOAD_LENGTH", @@ -562,7 +569,7 @@ }, { "inputs": [], - "name": "GAS_LIMIT", + "name": "MAX_CHAIN_ID", "outputs": [ { "internalType": "uint256", @@ -575,7 +582,7 @@ }, { "inputs": [], - "name": "MAX_CHAIN_ID", + "name": "MAX_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -588,7 +595,7 @@ }, { "inputs": [], - "name": "MAX_GAS_LIMIT", + "name": "MIN_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -640,25 +647,25 @@ }, { "inputs": [], - "name": "l1DepositProcessor", + "name": "getBridgingDecimals", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], - "stateMutability": "view", + "stateMutability": "pure", "type": "function" }, { "inputs": [], - "name": "l1SourceChainId", + "name": "l1DepositProcessor", "outputs": [ { - "internalType": "uint256", + "internalType": "address", "name": "", - "type": "uint256" + "type": "address" } ], "stateMutability": "view", @@ -666,12 +673,12 @@ }, { "inputs": [], - "name": "l2MessageRelayer", + "name": "l1SourceChainId", "outputs": [ { - "internalType": "address", + "internalType": "uint256", "name": "", - "type": "address" + "type": "uint256" } ], "stateMutability": "view", @@ -679,7 +686,7 @@ }, { "inputs": [], - "name": "l2TokenRelayer", + "name": "l2MessageRelayer", "outputs": [ { "internalType": "address", @@ -716,29 +723,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onTokenBridged", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "owner", @@ -785,6 +769,44 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "queuedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -811,9 +833,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "redeem", @@ -847,25 +869,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "stakingQueueingNonces", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -874,7 +877,7 @@ "type": "bytes" } ], - "name": "syncWithheldTokens", + "name": "syncWithheldAmount", "outputs": [], "stateMutability": "payable", "type": "function" @@ -904,8 +907,8 @@ "type": "receive" } ], - "bytecode": "0x610140604052348015610010575f80fd5b5060405161286b38038061286b83398101604081905261002f916101d5565b85858585856001600160a01b038516158061005157506001600160a01b038416155b8061006357506001600160a01b038316155b8061007557506001600160a01b038216155b156100935760405163d92e233d60e01b815260040160405180910390fd5b805f036100b357604051637c946ed760e01b815260040160405180910390fd5b60246100c760026001600160401b0361023e565b6100d1919061026f565b6001600160401b031681111561012f578060246100f660026001600160401b0361023e565b610100919061026f565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e052610100526002805460ff60a81b1960ff60a01b1933166001600160a81b031990921691909117600160a01b1716600160a81b17905581166101a25760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b031661012052506102a29350505050565b80516001600160a01b03811681146101d0575f80fd5b919050565b5f805f805f8060c087890312156101ea575f80fd5b6101f3876101ba565b9550610201602088016101ba565b945061020f604088016101ba565b935061021d606088016101ba565b92506080870151915061023260a088016101ba565b90509295509295509295565b5f6001600160401b038381168061026357634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561029b57634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e05161010051610120516124e86103835f395f818161058b0152818161138f01526113ea01525f81816105390152611f4101525f81816102ee0152818161143d015281816116ef0152818161176e01528181611e5801528181611ec70152611ef601525f81816102bb0152818161141c015281816114a0015281816116c201528181611dba0152611e2901525f8181610321015261192e01525f81816102470152818161090b015281816109c40152818161117701528181611231015281816112d401528181611ac20152611b8501526124e85ff3fe60806040526004361061019b575f3560e01c8063713d1a4e116100dc578063a7be1b5011610087578063db7af85411610062578063db7af854146105eb578063e3f5aa511461060a578063f4427c2c14610620578063f953cec714610635575f80fd5b8063a7be1b501461057a578063bddc966e146105ad578063ce5494bb146105cc575f80fd5b80639890220b116100b75780639890220b146105145780639b7bb84714610528578063a6f9dae11461055b575f80fd5b8063713d1a4e146104a35780638456cb59146104e15780638da5cb5b146104f5575f80fd5b80632b83cccd1161014757806354d20cc21161012257806354d20cc21461039f5780635a7287cf146104385780635bc105c01461044c5780635c975abb14610460575f80fd5b80632b83cccd146103585780633f4ba83a146103775780634ece6b171461038b575f80fd5b8063256359a811610177578063256359a8146102dd578063291347681461031057806329f404cd14610343575f80fd5b806231d11514610236578063091d2788146102865780631bad5957146102aa575f80fd5b36610232576002546001600160a01b03166101fb576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610241575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610291575f80fd5b5061029c620493e081565b60405190815260200161027d565b3480156102b5575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e8575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b34801561031b575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b610356610351366004611fe3565b610654565b005b348015610363575f80fd5b50610356610372366004612086565b610793565b348015610382575f80fd5b50610356610b6f565b348015610396575f80fd5b5061029c602081565b3480156103aa575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104077ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161027d565b348015610443575f80fd5b5061029c5f5481565b348015610457575f80fd5b5061029c610c18565b34801561046b575f80fd5b506002546104919074010000000000000000000000000000000000000000900460ff1681565b60405160ff909116815260200161027d565b3480156104ae575f80fd5b506104d16104bd3660046120b8565b60036020525f908152604090205460ff1681565b604051901515815260200161027d565b3480156104ec575f80fd5b50610356610c44565b348015610500575f80fd5b50600254610269906001600160a01b031681565b34801561051f575f80fd5b5061029c610ced565b348015610533575f80fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610566575f80fd5b506103566105753660046120cf565b610e9e565b348015610585575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b8575f80fd5b506103566105c7366004611fe3565b610f7f565b3480156105d7575f80fd5b506103566105e63660046120cf565b610fcb565b3480156105f6575f80fd5b506103566106053660046120f1565b611384565b348015610615575f80fd5b5061029c621e848081565b34801561062b575f80fd5b5061029c60015481565b348015610640575f80fd5b5061035661064f366004611fe3565b61149d565b6002546001600160a81b90910460ff161115610683576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036106fd576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80549081900361073a576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80556107478183611530565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff1611156107c2576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff7401000000000000000000000000000000000000000090910416900361083c576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff16806108db576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101f2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610958573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097c9190612173565b9050848110610b18576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610a0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2e919061218a565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610a87575f80fd5b505af1158015610a99573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610ad891815260200190565b60405180910390a25f83815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610b54565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101f2565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610baf5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610c2d600267ffffffffffffffff6121d6565b610c379190612221565b67ffffffffffffffff1681565b6002546001600160a01b03163314610c845760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff161115610d1e576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610d825760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b479050805f03610dbe576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610dfd576040519150601f19603f3d011682016040523d82523d5f602084013e610e02565b606091505b5050905080610e52576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f6004820152306024820152336044820152606481018390526084016101f2565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a01b03163314610ede5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b6001600160a01b038116610f1e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610fbf5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b610fc8816117c7565b50565b6002546001600160a81b90910460ff161115610ffa576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b0316331461105e5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b60025474010000000000000000000000000000000000000000900460ff166001036110b5576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f03611103576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016101f2565b306001600160a01b03821603611147576040517f38e04bf20000000000000000000000000000000000000000000000000000000081523060048201526024016101f2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156111c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e89190612173565b90508015611318576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611279573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129d919061218a565b905080611316576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101f2565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611417576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b6114977f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611db892505050565b50505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d67bdd256040518163ffffffff1660e01b81526004016020604051808303815f875af11580156114fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151f9190612249565b905061152c338284611db8565b5050565b60208151146115785780516040517f34c9027a0000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016101f2565b5f8180602001905181019061158d9190612173565b9050620493e08110156115a05750620493e05b621e84808111156115b15750621e84805b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018590525f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d910160408051601f198184030181529082905261162f91602401612292565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517fdc8601b30000000000000000000000000000000000000000000000000000000081529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dc8601b39061171b907f000000000000000000000000000000000000000000000000000000000000000090869088906004016122a4565b6020604051808303815f875af1158015611737573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175b9190612173565b6040518681529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690339083907fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e4709060200160405180910390a45050505050565b6002546001600160a81b90910460ff1611156117f6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f9081906118349060209085018101908501612364565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b8551811015611d73575f86828151811061187c5761187c612423565b602002602001015190505f86838151811061189957611899612423565b602002602001015190505f826040516024016118c491906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061195a908590612450565b5f604051808303815f865af19150503d805f8114611993576040519150601f19603f3d011682016040523d82523d5f602084013e611998565b606091505b50915091505f8280156119ac575081516020145b156119c857818060200190518101906119c59190612173565b90505b805f03611a29576119d9858a612466565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb86604051611a1691815260200190565b60405180910390a2505050505050611d6b565b80851115611a92575f611a3c828761247f565b9050611a48818b612466565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb82604051611a8891815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611b0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b339190612173565b10158015611b415750876001145b15611ca6576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bef919061218a565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015611c48575f80fd5b505af1158015611c5a573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051611c9991815260200190565b60405180910390a2611d64565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f8181526003835283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b600101611860565b50611d7f836001612466565b6001558115610b5457815f80828254611d989190612466565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611e56576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611ef4576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611f6f929190612492565b60405180910390a2611f80816117c7565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611fdb57611fdb611f85565b604052919050565b5f6020808385031215611ff4575f80fd5b823567ffffffffffffffff8082111561200b575f80fd5b818501915085601f83011261201e575f80fd5b81358181111561203057612030611f85565b61204284601f19601f84011601611fb2565b91508082528684828501011115612057575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610fc8575f80fd5b5f805f60608486031215612098575f80fd5b83356120a381612072565b95602085013595506040909401359392505050565b5f602082840312156120c8575f80fd5b5035919050565b5f602082840312156120df575f80fd5b81356120ea81612072565b9392505050565b5f805f8060608587031215612104575f80fd5b843561210f81612072565b935060208501359250604085013567ffffffffffffffff80821115612132575f80fd5b818701915087601f830112612145575f80fd5b813581811115612153575f80fd5b886020828501011115612164575f80fd5b95989497505060200194505050565b5f60208284031215612183575f80fd5b5051919050565b5f6020828403121561219a575f80fd5b815180151581146120ea575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680612215577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff828116828216039080821115612242576122426121a9565b5092915050565b5f60208284031215612259575f80fd5b81516120ea81612072565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6120ea6020830184612264565b6001600160a01b0384168152606060208201525f6122c56060830185612264565b9050826040830152949350505050565b5f67ffffffffffffffff8211156122ee576122ee611f85565b5060051b60200190565b5f82601f830112612307575f80fd5b8151602061231c612317836122d5565b611fb2565b8083825260208201915060208460051b87010193508684111561233d575f80fd5b602086015b848110156123595780518352918301918301612342565b509695505050505050565b5f8060408385031215612375575f80fd5b825167ffffffffffffffff8082111561238c575f80fd5b818501915085601f83011261239f575f80fd5b815160206123af612317836122d5565b82815260059290921b840181019181810190898411156123cd575f80fd5b948201945b838610156123f45785516123e581612072565b825294820194908201906123d2565b9188015191965090935050508082111561240c575f80fd5b50612419858286016122f8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b80820180821115612479576124796121a9565b92915050565b81810381811115612479576124796121a9565b828152604060208201525f6124aa6040830184612264565b94935050505056fea2646970667358221220b9533b08791e497c0bf7a259452423e4939bb81b2e4a4c6a009cb6e28c644e3464736f6c63430008190033", - "deployedBytecode": "0x60806040526004361061019b575f3560e01c8063713d1a4e116100dc578063a7be1b5011610087578063db7af85411610062578063db7af854146105eb578063e3f5aa511461060a578063f4427c2c14610620578063f953cec714610635575f80fd5b8063a7be1b501461057a578063bddc966e146105ad578063ce5494bb146105cc575f80fd5b80639890220b116100b75780639890220b146105145780639b7bb84714610528578063a6f9dae11461055b575f80fd5b8063713d1a4e146104a35780638456cb59146104e15780638da5cb5b146104f5575f80fd5b80632b83cccd1161014757806354d20cc21161012257806354d20cc21461039f5780635a7287cf146104385780635bc105c01461044c5780635c975abb14610460575f80fd5b80632b83cccd146103585780633f4ba83a146103775780634ece6b171461038b575f80fd5b8063256359a811610177578063256359a8146102dd578063291347681461031057806329f404cd14610343575f80fd5b806231d11514610236578063091d2788146102865780631bad5957146102aa575f80fd5b36610232576002546001600160a01b03166101fb576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610241575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610291575f80fd5b5061029c620493e081565b60405190815260200161027d565b3480156102b5575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e8575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b34801561031b575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b610356610351366004611fe3565b610654565b005b348015610363575f80fd5b50610356610372366004612086565b610793565b348015610382575f80fd5b50610356610b6f565b348015610396575f80fd5b5061029c602081565b3480156103aa575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104077ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161027d565b348015610443575f80fd5b5061029c5f5481565b348015610457575f80fd5b5061029c610c18565b34801561046b575f80fd5b506002546104919074010000000000000000000000000000000000000000900460ff1681565b60405160ff909116815260200161027d565b3480156104ae575f80fd5b506104d16104bd3660046120b8565b60036020525f908152604090205460ff1681565b604051901515815260200161027d565b3480156104ec575f80fd5b50610356610c44565b348015610500575f80fd5b50600254610269906001600160a01b031681565b34801561051f575f80fd5b5061029c610ced565b348015610533575f80fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610566575f80fd5b506103566105753660046120cf565b610e9e565b348015610585575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b8575f80fd5b506103566105c7366004611fe3565b610f7f565b3480156105d7575f80fd5b506103566105e63660046120cf565b610fcb565b3480156105f6575f80fd5b506103566106053660046120f1565b611384565b348015610615575f80fd5b5061029c621e848081565b34801561062b575f80fd5b5061029c60015481565b348015610640575f80fd5b5061035661064f366004611fe3565b61149d565b6002546001600160a81b90910460ff161115610683576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036106fd576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80549081900361073a576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80556107478183611530565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff1611156107c2576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff7401000000000000000000000000000000000000000090910416900361083c576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff16806108db576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101f2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610958573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097c9190612173565b9050848110610b18576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610a0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a2e919061218a565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610a87575f80fd5b505af1158015610a99573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610ad891815260200190565b60405180910390a25f83815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610b54565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101f2565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610baf5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610c2d600267ffffffffffffffff6121d6565b610c379190612221565b67ffffffffffffffff1681565b6002546001600160a01b03163314610c845760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff161115610d1e576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610d825760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b479050805f03610dbe576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610dfd576040519150601f19603f3d011682016040523d82523d5f602084013e610e02565b606091505b5050905080610e52576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f6004820152306024820152336044820152606481018390526084016101f2565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a01b03163314610ede5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b6001600160a01b038116610f1e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610fbf5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b610fc8816117c7565b50565b6002546001600160a81b90910460ff161115610ffa576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b0316331461105e5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b60025474010000000000000000000000000000000000000000900460ff166001036110b5576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f03611103576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016101f2565b306001600160a01b03821603611147576040517f38e04bf20000000000000000000000000000000000000000000000000000000081523060048201526024016101f2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156111c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e89190612173565b90508015611318576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611279573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129d919061218a565b905080611316576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101f2565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611417576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b6114977f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611db892505050565b50505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d67bdd256040518163ffffffff1660e01b81526004016020604051808303815f875af11580156114fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151f9190612249565b905061152c338284611db8565b5050565b60208151146115785780516040517f34c9027a0000000000000000000000000000000000000000000000000000000081526020600482015260248101919091526044016101f2565b5f8180602001905181019061158d9190612173565b9050620493e08110156115a05750620493e05b621e84808111156115b15750621e84805b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018590525f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d910160408051601f198184030181529082905261162f91602401612292565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517fdc8601b30000000000000000000000000000000000000000000000000000000081529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dc8601b39061171b907f000000000000000000000000000000000000000000000000000000000000000090869088906004016122a4565b6020604051808303815f875af1158015611737573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175b9190612173565b6040518681529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690339083907fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e4709060200160405180910390a45050505050565b6002546001600160a81b90910460ff1611156117f6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f9081906118349060209085018101908501612364565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b8551811015611d73575f86828151811061187c5761187c612423565b602002602001015190505f86838151811061189957611899612423565b602002602001015190505f826040516024016118c491906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061195a908590612450565b5f604051808303815f865af19150503d805f8114611993576040519150601f19603f3d011682016040523d82523d5f602084013e611998565b606091505b50915091505f8280156119ac575081516020145b156119c857818060200190518101906119c59190612173565b90505b805f03611a29576119d9858a612466565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb86604051611a1691815260200190565b60405180910390a2505050505050611d6b565b80851115611a92575f611a3c828761247f565b9050611a48818b612466565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb82604051611a8891815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611b0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b339190612173565b10158015611b415750876001145b15611ca6576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611bcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bef919061218a565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015611c48575f80fd5b505af1158015611c5a573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051611c9991815260200190565b60405180910390a2611d64565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f8181526003835283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b600101611860565b50611d7f836001612466565b6001558115610b5457815f80828254611d989190612466565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611e56576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611ef4576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611f6f929190612492565b60405180910390a2611f80816117c7565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611fdb57611fdb611f85565b604052919050565b5f6020808385031215611ff4575f80fd5b823567ffffffffffffffff8082111561200b575f80fd5b818501915085601f83011261201e575f80fd5b81358181111561203057612030611f85565b61204284601f19601f84011601611fb2565b91508082528684828501011115612057575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610fc8575f80fd5b5f805f60608486031215612098575f80fd5b83356120a381612072565b95602085013595506040909401359392505050565b5f602082840312156120c8575f80fd5b5035919050565b5f602082840312156120df575f80fd5b81356120ea81612072565b9392505050565b5f805f8060608587031215612104575f80fd5b843561210f81612072565b935060208501359250604085013567ffffffffffffffff80821115612132575f80fd5b818701915087601f830112612145575f80fd5b813581811115612153575f80fd5b886020828501011115612164575f80fd5b95989497505060200194505050565b5f60208284031215612183575f80fd5b5051919050565b5f6020828403121561219a575f80fd5b815180151581146120ea575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680612215577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff828116828216039080821115612242576122426121a9565b5092915050565b5f60208284031215612259575f80fd5b81516120ea81612072565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6120ea6020830184612264565b6001600160a01b0384168152606060208201525f6122c56060830185612264565b9050826040830152949350505050565b5f67ffffffffffffffff8211156122ee576122ee611f85565b5060051b60200190565b5f82601f830112612307575f80fd5b8151602061231c612317836122d5565b611fb2565b8083825260208201915060208460051b87010193508684111561233d575f80fd5b602086015b848110156123595780518352918301918301612342565b509695505050505050565b5f8060408385031215612375575f80fd5b825167ffffffffffffffff8082111561238c575f80fd5b818501915085601f83011261239f575f80fd5b815160206123af612317836122d5565b82815260059290921b840181019181810190898411156123cd575f80fd5b948201945b838610156123f45785516123e581612072565b825294820194908201906123d2565b9188015191965090935050508082111561240c575f80fd5b50612419858286016122f8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b80820180821115612479576124796121a9565b92915050565b81810381811115612479576124796121a9565b828152604060208201525f6124aa6040830184612264565b94935050505056fea2646970667358221220b9533b08791e497c0bf7a259452423e4939bb81b2e4a4c6a009cb6e28c644e3464736f6c63430008190033", + "bytecode": "0x610120604052348015610010575f80fd5b5060405161247d38038061247d83398101604081905261002f916101aa565b84848484846001600160a01b038516158061005157506001600160a01b038416155b8061006357506001600160a01b038316155b8061007557506001600160a01b038216155b156100935760405163d92e233d60e01b815260040160405180910390fd5b805f036100b357604051637c946ed760e01b815260040160405180910390fd5b60246100c760026001600160401b03610204565b6100d19190610235565b6001600160401b031681111561012f578060246100f660026001600160401b03610204565b6101009190610235565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c05290911660e0526101005250506002805460ff60a81b1960ff60a01b1933166001600160a81b031990921691909117600160a01b1716600160a81b17905550610268915050565b80516001600160a01b03811681146101a5575f80fd5b919050565b5f805f805f60a086880312156101be575f80fd5b6101c78661018f565b94506101d56020870161018f565b93506101e36040870161018f565b92506101f16060870161018f565b9150608086015190509295509295909350565b5f6001600160401b038381168061022957634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561026157634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161216161031c5f395f818161053d0152611c5301525f818161031d0152818161148401528181611b6a01528181611bd90152611c0801525f81816102ea0152818161126a0152818161145701528181611acc0152611b3b01525f818161035001526116a301525f818161022e01528181610bf301528181610c93015281816110730152818161112d015281816111b70152818161181e01526118cc01526121615ff3fe60806040526004361061019b575f3560e01c80637ce1ffeb116100dc578063a6f9dae111610087578063ce5494bb11610062578063ce5494bb146105b0578063e3f5aa51146105cf578063f4427c2c146105e5578063f953cec7146105fa575f80fd5b8063a6f9dae11461055f578063a8b2ae021461057e578063bddc966e14610591575f80fd5b80639890220b116100b75780639890220b146104f9578063992c3e4b1461050d5780639b7bb8471461052c575f80fd5b80637ce1ffeb146104b05780638456cb59146104c65780638da5cb5b146104da575f80fd5b80633f4ba83a116101475780635a7287cf116101225780635a7287cf146104435780635bc105c0146104575780635c975abb1461046b5780637424ddc81461049d575f80fd5b80633f4ba83a146103725780634ece6b171461038857806354d20cc2146103aa575f80fd5b80631bad5957116101775780631bad5957146102d9578063256359a81461030c578063291347681461033f575f80fd5b806231d1151461021d57806307d9c5341461026d5780631b2e7f0a146102ab575f80fd5b36610219576002546001600160a01b03166101e25760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610228575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610278575f80fd5b5061029b610287366004611c97565b60036020525f908152604090205460ff1681565b6040519015158152602001610264565b3480156102b6575f80fd5b5061029b6102c5366004611c97565b60046020525f908152604090205460ff1681565b3480156102e4575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b348015610317575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561037d575f80fd5b50610386610619565b005b348015610393575f80fd5b5061039c602081565b604051908152602001610264565b3480156103b5575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104127ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610264565b34801561044e575f80fd5b5061039c5f5481565b348015610462575f80fd5b5061039c6106b1565b348015610476575f80fd5b5060025461048b90600160a01b900460ff1681565b60405160ff9091168152602001610264565b6103866104ab366004611cf3565b6106dd565b3480156104bb575f80fd5b5061039c620493e081565b3480156104d1575f80fd5b506103866108ae565b3480156104e5575f80fd5b50600254610250906001600160a01b031681565b348015610504575f80fd5b5061039c610957565b348015610518575f80fd5b50610386610527366004611d96565b610ac4565b348015610537575f80fd5b5061039c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056a575f80fd5b50610386610579366004611dc8565b610e08565b348015610589575f80fd5b50601261039c565b34801561059c575f80fd5b506103866105ab366004611cf3565b610ee9565b3480156105bb575f80fd5b506103866105ca366004611dc8565b610f35565b3480156105da575f80fd5b5061039c621e848081565b3480156105f0575f80fd5b5061039c60015481565b348015610605575f80fd5b50610386610614366004611cf3565b611267565b6002546001600160a01b031633146106595760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b60246106c6600267ffffffffffffffff611e12565b6106d09190611e38565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff16111561070c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b90910416900361074a576040516313d0ff5960e31b815260040160405180910390fd5b5f54601281805f0361076f57604051637c946ed760e01b815260040160405180910390fd5b6107798184611e60565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f806107c48589856112fa565b9092509050801561084a57604051339082905f81818185875af1925050503d805f811461080c576040519150601f19603f3d011682016040523d82523d5f602084013e610811565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610855846001611eb6565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b031633146108ee5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff161115610988576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146109da5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b479050805f036109fd57604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610a3c576040519150601f19603f3d011682016040523d82523d5f602084013e610a41565b606091505b5050905080610a785760405163cd3f165960e01b81525f6004820152306024820152336044820152606481018390526084016101d9565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff161115610af3576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610b31576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680610bdc576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610c40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c649190611ec9565b9050848110610db15760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610cd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfd9190611ee0565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610d3d575f80fd5b505af1158015610d4f573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c32198087604051610d8f91815260200190565b60405180910390a35f838152600460205260409020805460ff19169055610ded565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101d9565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610e485760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b6001600160a01b038116610e88576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f295760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b610f32816114fe565b50565b6002546001600160a81b90910460ff161115610f64576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b03163314610fb65760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600254600160a01b900460ff16600103610ffc576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361103157604051631c7025f960e11b81526001600160a01b03821660048201526024016101d9565b306001600160a01b0382160361105c57604051631c7025f960e11b81523060048201526024016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156110c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e49190611ec9565b905080156111fb576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611175573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111999190611ee0565b9050806111f95760405163cd3f165960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101d9565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d67bdd256040518163ffffffff1660e01b81526004016020604051808303815f875af11580156112c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e99190611eff565b90506112f6338284611aca565b5050565b5f805f602085510361132d578480602001905181019061131a9190611ec9565b9050621e848081111561132d5750621e84805b620493e081101561133e5750620493e05b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018890529081018590525f907ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d9060600160408051601f19818403018152908290526113c491602401611f48565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517fdc8601b30000000000000000000000000000000000000000000000000000000081529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dc8601b3906114b0907f00000000000000000000000000000000000000000000000000000000000000009086908890600401611f5a565b6020604051808303815f875af11580156114cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f09190611ec9565b983498509650505050505050565b6002546001600160a81b90910460ff16111561152d576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f908190819061155b906020908601810190860161201a565b5f81815260036020526040902054929550909350915060ff16156115ae576040517f56bc34a1000000000000000000000000000000000000000000000000000000008152600481018290526024016101d9565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015611a93575f8682815181106115f1576115f16120e1565b602002602001015190505f86838151811061160e5761160e6120e1565b602002602001015190505f8260405160240161163991906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906116cf9085906120f5565b5f604051808303815f865af19150503d805f8114611708576040519150601f19603f3d011682016040523d82523d5f602084013e61170d565b606091505b50915091505f828015611721575081516020145b1561173d578180602001905181019061173a9190611ec9565b90505b805f0361179e5761174e858a611eb6565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161178b91815260200190565b60405180910390a2505050505050611a8b565b80851115611807575f6117b18287611e60565b90506117bd818b611eb6565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516117fd91815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561186b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188f9190611ec9565b90508581101580156118a15750886001145b156119d55760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611912573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119369190611ee0565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015611976575f80fd5b505af1158015611988573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c321980886040516119c891815260200190565b60405180910390a3611a83565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b6001016115d5565b508115610ded57815f80828254611aaa9190611eb6565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611b68576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611c06576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611c8192919061210b565b60405180910390a2611c92816114fe565b505050565b5f60208284031215611ca7575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ceb57611ceb611cae565b604052919050565b5f6020808385031215611d04575f80fd5b823567ffffffffffffffff80821115611d1b575f80fd5b818501915085601f830112611d2e575f80fd5b813581811115611d4057611d40611cae565b611d52601f8201601f19168501611cc2565b91508082528684828501011115611d67575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f32575f80fd5b5f805f60608486031215611da8575f80fd5b8335611db381611d82565b95602085013595506040909401359392505050565b5f60208284031215611dd8575f80fd5b8135611de381611d82565b9392505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611e2c57611e2c611dea565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611e5957611e59611dfe565b5092915050565b81810381811115611e7357611e73611dfe565b92915050565b80851115611eae57815f1904821115611e9457611e94611dfe565b80851615611ea157918102915b93841c9390800290611e79565b509250929050565b80820180821115611e7357611e73611dfe565b5f60208284031215611ed9575f80fd5b5051919050565b5f60208284031215611ef0575f80fd5b81518015158114611de3575f80fd5b5f60208284031215611f0f575f80fd5b8151611de381611d82565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611de36020830184611f1a565b6001600160a01b0384168152606060208201525f611f7b6060830185611f1a565b9050826040830152949350505050565b5f67ffffffffffffffff821115611fa457611fa4611cae565b5060051b60200190565b5f82601f830112611fbd575f80fd5b81516020611fd2611fcd83611f8b565b611cc2565b8083825260208201915060208460051b870101935086841115611ff3575f80fd5b602086015b8481101561200f5780518352918301918301611ff8565b509695505050505050565b5f805f6060848603121561202c575f80fd5b835167ffffffffffffffff80821115612043575f80fd5b818601915086601f830112612056575f80fd5b81516020612066611fcd83611f8b565b82815260059290921b8401810191818101908a841115612084575f80fd5b948201945b838610156120ab57855161209c81611d82565b82529482019490820190612089565b918901519197509093505050808211156120c3575f80fd5b506120d086828701611fae565b925050604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b828152604060208201525f6121236040830184611f1a565b94935050505056fea2646970667358221220d0a764106e1847016de0d0877189b9a955dc8e9d508360540d03b9289e4f495764736f6c63430008190033", + "deployedBytecode": "0x60806040526004361061019b575f3560e01c80637ce1ffeb116100dc578063a6f9dae111610087578063ce5494bb11610062578063ce5494bb146105b0578063e3f5aa51146105cf578063f4427c2c146105e5578063f953cec7146105fa575f80fd5b8063a6f9dae11461055f578063a8b2ae021461057e578063bddc966e14610591575f80fd5b80639890220b116100b75780639890220b146104f9578063992c3e4b1461050d5780639b7bb8471461052c575f80fd5b80637ce1ffeb146104b05780638456cb59146104c65780638da5cb5b146104da575f80fd5b80633f4ba83a116101475780635a7287cf116101225780635a7287cf146104435780635bc105c0146104575780635c975abb1461046b5780637424ddc81461049d575f80fd5b80633f4ba83a146103725780634ece6b171461038857806354d20cc2146103aa575f80fd5b80631bad5957116101775780631bad5957146102d9578063256359a81461030c578063291347681461033f575f80fd5b806231d1151461021d57806307d9c5341461026d5780631b2e7f0a146102ab575f80fd5b36610219576002546001600160a01b03166101e25760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610228575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610278575f80fd5b5061029b610287366004611c97565b60036020525f908152604090205460ff1681565b6040519015158152602001610264565b3480156102b6575f80fd5b5061029b6102c5366004611c97565b60046020525f908152604090205460ff1681565b3480156102e4575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b348015610317575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561037d575f80fd5b50610386610619565b005b348015610393575f80fd5b5061039c602081565b604051908152602001610264565b3480156103b5575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104127ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610264565b34801561044e575f80fd5b5061039c5f5481565b348015610462575f80fd5b5061039c6106b1565b348015610476575f80fd5b5060025461048b90600160a01b900460ff1681565b60405160ff9091168152602001610264565b6103866104ab366004611cf3565b6106dd565b3480156104bb575f80fd5b5061039c620493e081565b3480156104d1575f80fd5b506103866108ae565b3480156104e5575f80fd5b50600254610250906001600160a01b031681565b348015610504575f80fd5b5061039c610957565b348015610518575f80fd5b50610386610527366004611d96565b610ac4565b348015610537575f80fd5b5061039c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056a575f80fd5b50610386610579366004611dc8565b610e08565b348015610589575f80fd5b50601261039c565b34801561059c575f80fd5b506103866105ab366004611cf3565b610ee9565b3480156105bb575f80fd5b506103866105ca366004611dc8565b610f35565b3480156105da575f80fd5b5061039c621e848081565b3480156105f0575f80fd5b5061039c60015481565b348015610605575f80fd5b50610386610614366004611cf3565b611267565b6002546001600160a01b031633146106595760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b60246106c6600267ffffffffffffffff611e12565b6106d09190611e38565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff16111561070c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b90910416900361074a576040516313d0ff5960e31b815260040160405180910390fd5b5f54601281805f0361076f57604051637c946ed760e01b815260040160405180910390fd5b6107798184611e60565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f806107c48589856112fa565b9092509050801561084a57604051339082905f81818185875af1925050503d805f811461080c576040519150601f19603f3d011682016040523d82523d5f602084013e610811565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610855846001611eb6565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b031633146108ee5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff161115610988576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146109da5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b479050805f036109fd57604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610a3c576040519150601f19603f3d011682016040523d82523d5f602084013e610a41565b606091505b5050905080610a785760405163cd3f165960e01b81525f6004820152306024820152336044820152606481018390526084016101d9565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff161115610af3576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610b31576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680610bdc576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610c40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c649190611ec9565b9050848110610db15760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610cd9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfd9190611ee0565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610d3d575f80fd5b505af1158015610d4f573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c32198087604051610d8f91815260200190565b60405180910390a35f838152600460205260409020805460ff19169055610ded565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101d9565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610e485760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b6001600160a01b038116610e88576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f295760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b610f32816114fe565b50565b6002546001600160a81b90910460ff161115610f64576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b03163314610fb65760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600254600160a01b900460ff16600103610ffc576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361103157604051631c7025f960e11b81526001600160a01b03821660048201526024016101d9565b306001600160a01b0382160361105c57604051631c7025f960e11b81523060048201526024016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156110c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e49190611ec9565b905080156111fb576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611175573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111999190611ee0565b9050806111f95760405163cd3f165960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101d9565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d67bdd256040518163ffffffff1660e01b81526004016020604051808303815f875af11580156112c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e99190611eff565b90506112f6338284611aca565b5050565b5f805f602085510361132d578480602001905181019061131a9190611ec9565b9050621e848081111561132d5750621e84805b620493e081101561133e5750620493e05b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018890529081018590525f907ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d9060600160408051601f19818403018152908290526113c491602401611f48565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517fdc8601b30000000000000000000000000000000000000000000000000000000081529091505f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063dc8601b3906114b0907f00000000000000000000000000000000000000000000000000000000000000009086908890600401611f5a565b6020604051808303815f875af11580156114cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f09190611ec9565b983498509650505050505050565b6002546001600160a81b90910460ff16111561152d576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f908190819061155b906020908601810190860161201a565b5f81815260036020526040902054929550909350915060ff16156115ae576040517f56bc34a1000000000000000000000000000000000000000000000000000000008152600481018290526024016101d9565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015611a93575f8682815181106115f1576115f16120e1565b602002602001015190505f86838151811061160e5761160e6120e1565b602002602001015190505f8260405160240161163991906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906116cf9085906120f5565b5f604051808303815f865af19150503d805f8114611708576040519150601f19603f3d011682016040523d82523d5f602084013e61170d565b606091505b50915091505f828015611721575081516020145b1561173d578180602001905181019061173a9190611ec9565b90505b805f0361179e5761174e858a611eb6565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161178b91815260200190565b60405180910390a2505050505050611a8b565b80851115611807575f6117b18287611e60565b90506117bd818b611eb6565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516117fd91815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561186b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188f9190611ec9565b90508581101580156118a15750886001145b156119d55760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611912573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119369190611ee0565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015611976575f80fd5b505af1158015611988573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c321980886040516119c891815260200190565b60405180910390a3611a83565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b6001016115d5565b508115610ded57815f80828254611aaa9190611eb6565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611b68576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611c06576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611c8192919061210b565b60405180910390a2611c92816114fe565b505050565b5f60208284031215611ca7575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ceb57611ceb611cae565b604052919050565b5f6020808385031215611d04575f80fd5b823567ffffffffffffffff80821115611d1b575f80fd5b818501915085601f830112611d2e575f80fd5b813581811115611d4057611d40611cae565b611d52601f8201601f19168501611cc2565b91508082528684828501011115611d67575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f32575f80fd5b5f805f60608486031215611da8575f80fd5b8335611db381611d82565b95602085013595506040909401359392505050565b5f60208284031215611dd8575f80fd5b8135611de381611d82565b9392505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611e2c57611e2c611dea565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611e5957611e59611dfe565b5092915050565b81810381811115611e7357611e73611dfe565b92915050565b80851115611eae57815f1904821115611e9457611e94611dfe565b80851615611ea157918102915b93841c9390800290611e79565b509250929050565b80820180821115611e7357611e73611dfe565b5f60208284031215611ed9575f80fd5b5051919050565b5f60208284031215611ef0575f80fd5b81518015158114611de3575f80fd5b5f60208284031215611f0f575f80fd5b8151611de381611d82565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611de36020830184611f1a565b6001600160a01b0384168152606060208201525f611f7b6060830185611f1a565b9050826040830152949350505050565b5f67ffffffffffffffff821115611fa457611fa4611cae565b5060051b60200190565b5f82601f830112611fbd575f80fd5b81516020611fd2611fcd83611f8b565b611cc2565b8083825260208201915060208460051b870101935086841115611ff3575f80fd5b602086015b8481101561200f5780518352918301918301611ff8565b509695505050505050565b5f805f6060848603121561202c575f80fd5b835167ffffffffffffffff80821115612043575f80fd5b818601915086601f830112612056575f80fd5b81516020612066611fcd83611f8b565b82815260059290921b8401810191818101908a841115612084575f80fd5b948201945b838610156120ab57855161209c81611d82565b82529482019490820190612089565b918901519197509093505050808211156120c3575f80fd5b506120d086828701611fae565b925050604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b828152604060208201525f6121236040830184611f1a565b94935050505056fea2646970667358221220d0a764106e1847016de0d0877189b9a955dc8e9d508360540d03b9289e4f495764736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/OptimismDepositProcessorL1.json b/abis/0.8.25/OptimismDepositProcessorL1.json index 104a57aa..6ea30915 100644 --- a/abis/0.8.25/OptimismDepositProcessorL1.json +++ b/abis/0.8.25/OptimismDepositProcessorL1.json @@ -169,9 +169,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -322,6 +322,25 @@ "name": "L2TargetDispenserUpdated", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "leftovers", + "type": "uint256" + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -348,6 +367,12 @@ "internalType": "uint256", "name": "transferAmount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -560,6 +585,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -654,10 +698,23 @@ ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + } + ], + "name": "updateHashMaintenance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ], - "bytecode": "0x610140604052348015610010575f80fd5b5060405161187e38038061187e83398101604081905261002f916101a4565b85858585856001600160a01b038416158061005157506001600160a01b038316155b8061006357506001600160a01b038216155b156100815760405163d92e233d60e01b815260040160405180910390fd5b805f036100a157604051637c946ed760e01b815260040160405180910390fd5b60246100b560026001600160401b0361020d565b6100bf919061023e565b6001600160401b031681111561011d578060246100e460026001600160401b0361020d565b6100ee919061023e565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e05261010052600180546001600160a01b0319163317905581166101715760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b031661012052506102719350505050565b80516001600160a01b038116811461019f575f80fd5b919050565b5f805f805f8060c087890312156101b9575f80fd5b6101c287610189565b95506101d060208801610189565b94506101de60408801610189565b93506101ec60608801610189565b92506080870151915061020160a08801610189565b90509295509295509295565b5f6001600160401b038381168061023257634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561026a57634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e05161010051610120516115566103285f395f818161032c0152610a1201525f818161039801528181610e320152610ece01525f81816101a10152818161070c01528181610cba01528181610d350152610da201525f81816102da0152818161091d0152610a6101525f81816103e90152818161048c015281816104e10152818161061b015281816106700152610efe01525f81816101510152818161094c01526109ea01526115565ff3fe60806040526004361061013c575f3560e01c8063a0726ffa116100bb578063e309fb7711610071578063f4427c2c11610057578063f4427c2c1461040b578063f953cec714610420578063f9fc3c2114610433575f80fd5b8063e309fb77146103ba578063f2541c35146103d8575f80fd5b8063b2267a7b116100a1578063b2267a7b14610361578063bde5266114610374578063c23cc3ff14610387575f80fd5b8063a0726ffa1461031b578063a8b2ae021461034e575f80fd5b806354d20cc2116101105780635bc105c0116100f65780635bc105c0146102b55780636143fe93146102c95780638da5cb5b146102fc575f80fd5b806354d20cc2146101fb57806354e4bbf414610294575f80fd5b806231d115146101405780633d1f8679146101905780634c1c6cbf146101c35780634ece6b17146101e7575b5f80fd5b34801561014b575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019b575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ce575f80fd5b506101d9620493e081565b604051908152602001610187565b3480156101f2575f80fd5b506101d9604081565b348015610206575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102637ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610187565b34801561029f575f80fd5b506102b36102ae366004610f77565b610449565b005b3480156102c0575f80fd5b506101d9610455565b3480156102d4575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b348015610307575f80fd5b50600154610173906001600160a01b031681565b348015610326575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b348015610359575f80fd5b5060126101d9565b6102b361036f366004611063565b610481565b6102b361038236600461114f565b610610565b348015610392575f80fd5b506101d97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c5575f80fd5b505f54610173906001600160a01b031681565b3480156103e3575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b348015610416575f80fd5b506101d960025481565b6102b361042e366004611224565b610709565b34801561043e575f80fd5b506101d9621e848081565b6104528161079b565b50565b602461046a600267ffffffffffffffff61128b565b61047491906112d6565b67ffffffffffffffff1681565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610519576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061054d5761054d6112fe565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061059c5761059c6112fe565b6020026020010181815250505f6105b58383878761089e565b600280549192505f6105c68361132b565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328484876040516105ff939291906113d4565b60405180910390a250505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106a3576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610510565b5f6106b08585858561089e565b600280549192505f6106c18361132b565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328686856040516106fa939291906113d4565b60405180910390a25050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610766573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078a9190611409565b9050610797338284610d33565b5050565b6001546001600160a01b031633146107f4576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610510565b6001600160a01b038116610834576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f60408351146108e7578251604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526105109290600401918252602082015260400190565b8115610ab9576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610992573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b69190611424565b505f80546040517f838b25200000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152918216604482015260648101859052620493e0608482015260c060a482015260c48101929092527f0000000000000000000000000000000000000000000000000000000000000000169063838b25209060e4015f604051808303815f87803b158015610aa2575f80fd5b505af1158015610ab4573d5f803e3d5ffd5b505050505b5f8084806020019051810190610acf9190611443565b91509150815f1480610adf575080155b15610b16576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b621e8480811115610b5f576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052621e84806024820152604401610510565b34821115610ba2576040517f491a2bb100000000000000000000000000000000000000000000000000000000815234600482015260248101839052604401610510565b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d91610c0a918b918b9101611465565b60408051601f1981840301815290829052610c27916024016114c0565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092525f5491517f3dbb202b0000000000000000000000000000000000000000000000000000000081529092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692633dbb202b928792610cf6921690869088906004016114d2565b5f604051808303818588803b158015610d0d575f80fd5b505af1158015610d1f573d5f803e3d5ffd5b50506002549b9a5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610dcf576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610510565b5f546001600160a01b03838116911614610e2b575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610510565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610e899085906114c0565b60405180910390a35f81806020019051810190610ea69190611509565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b158015610f47575f80fd5b505af1158015610f59573d5f803e3d5ffd5b5050505050505050565b6001600160a01b0381168114610452575f80fd5b5f60208284031215610f87575f80fd5b8135610f9281610f63565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fef57610fef610f99565b604052919050565b5f82601f830112611006575f80fd5b813567ffffffffffffffff81111561102057611020610f99565b6110336020601f19601f84011601610fc6565b818152846020838601011115611047575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611076575f80fd5b843561108181610f63565b935060208501359250604085013567ffffffffffffffff8111156110a3575f80fd5b6110af87828801610ff7565b949793965093946060013593505050565b5f67ffffffffffffffff8211156110d9576110d9610f99565b5060051b60200190565b5f82601f8301126110f2575f80fd5b81356020611107611102836110c0565b610fc6565b8083825260208201915060208460051b870101935086841115611128575f80fd5b602086015b84811015611144578035835291830191830161112d565b509695505050505050565b5f805f8060808587031215611162575f80fd5b843567ffffffffffffffff80821115611179575f80fd5b818701915087601f83011261118c575f80fd5b8135602061119c611102836110c0565b82815260059290921b8401810191818101908b8411156111ba575f80fd5b948201945b838610156111e15785356111d281610f63565b825294820194908201906111bf565b985050880135925050808211156111f6575f80fd5b611202888389016110e3565b94506040870135915080821115611217575f80fd5b506110af87828801610ff7565b5f60208284031215611234575f80fd5b813567ffffffffffffffff81111561124a575f80fd5b61125684828501610ff7565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff808416806112ca577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156112f7576112f761125e565b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361135b5761135b61125e565b5060010190565b5f815180845260208085019450602084015f5b8381101561139a5781516001600160a01b031687529582019590820190600101611375565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561139a578151875295820195908201906001016113b8565b606081525f6113e66060830186611362565b82810360208401526113f881866113a5565b915050826040830152949350505050565b5f60208284031215611419575f80fd5b8151610f9281610f63565b5f60208284031215611434575f80fd5b81518015158114610f92575f80fd5b5f8060408385031215611454575f80fd5b505080516020909101519092909150565b604081525f6114776040830185611362565b828103602084015261148981856113a5565b95945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610f926020830184611492565b6001600160a01b0384168152606060208201525f6114f36060830185611492565b905063ffffffff83166040830152949350505050565b5f60208284031215611519575f80fd5b505191905056fea26469706673582212204f454c35f62491921d3e8278e94ea8fe88e3ce7dce30ff96f71cc147df78055764736f6c63430008190033", - "deployedBytecode": "0x60806040526004361061013c575f3560e01c8063a0726ffa116100bb578063e309fb7711610071578063f4427c2c11610057578063f4427c2c1461040b578063f953cec714610420578063f9fc3c2114610433575f80fd5b8063e309fb77146103ba578063f2541c35146103d8575f80fd5b8063b2267a7b116100a1578063b2267a7b14610361578063bde5266114610374578063c23cc3ff14610387575f80fd5b8063a0726ffa1461031b578063a8b2ae021461034e575f80fd5b806354d20cc2116101105780635bc105c0116100f65780635bc105c0146102b55780636143fe93146102c95780638da5cb5b146102fc575f80fd5b806354d20cc2146101fb57806354e4bbf414610294575f80fd5b806231d115146101405780633d1f8679146101905780634c1c6cbf146101c35780634ece6b17146101e7575b5f80fd5b34801561014b575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019b575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ce575f80fd5b506101d9620493e081565b604051908152602001610187565b3480156101f2575f80fd5b506101d9604081565b348015610206575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102637ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610187565b34801561029f575f80fd5b506102b36102ae366004610f77565b610449565b005b3480156102c0575f80fd5b506101d9610455565b3480156102d4575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b348015610307575f80fd5b50600154610173906001600160a01b031681565b348015610326575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b348015610359575f80fd5b5060126101d9565b6102b361036f366004611063565b610481565b6102b361038236600461114f565b610610565b348015610392575f80fd5b506101d97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c5575f80fd5b505f54610173906001600160a01b031681565b3480156103e3575f80fd5b506101737f000000000000000000000000000000000000000000000000000000000000000081565b348015610416575f80fd5b506101d960025481565b6102b361042e366004611224565b610709565b34801561043e575f80fd5b506101d9621e848081565b6104528161079b565b50565b602461046a600267ffffffffffffffff61128b565b61047491906112d6565b67ffffffffffffffff1681565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610519576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061054d5761054d6112fe565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061059c5761059c6112fe565b6020026020010181815250505f6105b58383878761089e565b600280549192505f6105c68361132b565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328484876040516105ff939291906113d4565b60405180910390a250505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106a3576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610510565b5f6106b08585858561089e565b600280549192505f6106c18361132b565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328686856040516106fa939291906113d4565b60405180910390a25050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610766573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078a9190611409565b9050610797338284610d33565b5050565b6001546001600160a01b031633146107f4576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610510565b6001600160a01b038116610834576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f60408351146108e7578251604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526105109290600401918252602082015260400190565b8115610ab9576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610992573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b69190611424565b505f80546040517f838b25200000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152918216604482015260648101859052620493e0608482015260c060a482015260c48101929092527f0000000000000000000000000000000000000000000000000000000000000000169063838b25209060e4015f604051808303815f87803b158015610aa2575f80fd5b505af1158015610ab4573d5f803e3d5ffd5b505050505b5f8084806020019051810190610acf9190611443565b91509150815f1480610adf575080155b15610b16576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b621e8480811115610b5f576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052621e84806024820152604401610510565b34821115610ba2576040517f491a2bb100000000000000000000000000000000000000000000000000000000815234600482015260248101839052604401610510565b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d91610c0a918b918b9101611465565b60408051601f1981840301815290829052610c27916024016114c0565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092525f5491517f3dbb202b0000000000000000000000000000000000000000000000000000000081529092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692633dbb202b928792610cf6921690869088906004016114d2565b5f604051808303818588803b158015610d0d575f80fd5b505af1158015610d1f573d5f803e3d5ffd5b50506002549b9a5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610dcf576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610510565b5f546001600160a01b03838116911614610e2b575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610510565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610e899085906114c0565b60405180910390a35f81806020019051810190610ea69190611509565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b158015610f47575f80fd5b505af1158015610f59573d5f803e3d5ffd5b5050505050505050565b6001600160a01b0381168114610452575f80fd5b5f60208284031215610f87575f80fd5b8135610f9281610f63565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fef57610fef610f99565b604052919050565b5f82601f830112611006575f80fd5b813567ffffffffffffffff81111561102057611020610f99565b6110336020601f19601f84011601610fc6565b818152846020838601011115611047575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611076575f80fd5b843561108181610f63565b935060208501359250604085013567ffffffffffffffff8111156110a3575f80fd5b6110af87828801610ff7565b949793965093946060013593505050565b5f67ffffffffffffffff8211156110d9576110d9610f99565b5060051b60200190565b5f82601f8301126110f2575f80fd5b81356020611107611102836110c0565b610fc6565b8083825260208201915060208460051b870101935086841115611128575f80fd5b602086015b84811015611144578035835291830191830161112d565b509695505050505050565b5f805f8060808587031215611162575f80fd5b843567ffffffffffffffff80821115611179575f80fd5b818701915087601f83011261118c575f80fd5b8135602061119c611102836110c0565b82815260059290921b8401810191818101908b8411156111ba575f80fd5b948201945b838610156111e15785356111d281610f63565b825294820194908201906111bf565b985050880135925050808211156111f6575f80fd5b611202888389016110e3565b94506040870135915080821115611217575f80fd5b506110af87828801610ff7565b5f60208284031215611234575f80fd5b813567ffffffffffffffff81111561124a575f80fd5b61125684828501610ff7565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff808416806112ca577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156112f7576112f761125e565b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361135b5761135b61125e565b5060010190565b5f815180845260208085019450602084015f5b8381101561139a5781516001600160a01b031687529582019590820190600101611375565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561139a578151875295820195908201906001016113b8565b606081525f6113e66060830186611362565b82810360208401526113f881866113a5565b915050826040830152949350505050565b5f60208284031215611419575f80fd5b8151610f9281610f63565b5f60208284031215611434575f80fd5b81518015158114610f92575f80fd5b5f8060408385031215611454575f80fd5b505080516020909101519092909150565b604081525f6114776040830185611362565b828103602084015261148981856113a5565b95945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610f926020830184611492565b6001600160a01b0384168152606060208201525f6114f36060830185611492565b905063ffffffff83166040830152949350505050565b5f60208284031215611519575f80fd5b505191905056fea26469706673582212204f454c35f62491921d3e8278e94ea8fe88e3ce7dce30ff96f71cc147df78055764736f6c63430008190033", + "bytecode": "0x610140604052348015610010575f80fd5b506040516119ae3803806119ae83398101604081905261002f916101a4565b85858585856001600160a01b038416158061005157506001600160a01b038316155b8061006357506001600160a01b038216155b156100815760405163d92e233d60e01b815260040160405180910390fd5b805f036100a157604051637c946ed760e01b815260040160405180910390fd5b60246100b560026001600160401b0361020d565b6100bf919061023e565b6001600160401b031681111561011d578060246100e460026001600160401b0361020d565b6100ee919061023e565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e05261010052600180546001600160a01b0319163317905581166101715760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b031661012052506102719350505050565b80516001600160a01b038116811461019f575f80fd5b919050565b5f805f805f8060c087890312156101b9575f80fd5b6101c287610189565b95506101d060208801610189565b94506101de60408801610189565b93506101ec60608801610189565b92506080870151915061020160a08801610189565b90509295509295509295565b5f6001600160401b038381168061023257634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561026a57634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e05161010051610120516116786103365f395f818161038f0152610c2c01525f818161041a01528181610f97015261108301525f81816102040152818161096d01528181610e1f01528181610e9a0152610f0701525f818161033d01528181610b370152610c7b01525f818161046b0152818161050e0152818161054a015281816105d9015281816106150152818161080a0152818161084601526110bf01525f818161017601528181610b660152610c0401526116785ff3fe608060405260043610610161575f3560e01c8063a0726ffa116100c6578063c23cc3ff1161007c578063f4427c2c11610057578063f4427c2c1461048d578063f953cec7146104a2578063f9fc3c21146104b5575f80fd5b8063c23cc3ff14610409578063e309fb771461043c578063f2541c351461045a575f80fd5b8063ac65ded2116100ac578063ac65ded2146103c4578063b2267a7b146103e3578063bde52661146103f6575f80fd5b8063a0726ffa1461037e578063a8b2ae02146103b1575f80fd5b806354d20cc21161011b5780635bc105c0116101015780635bc105c0146103185780636143fe931461032c5780638da5cb5b1461035f575f80fd5b806354d20cc21461025e57806354e4bbf4146102f7575f80fd5b80633d1f86791161014b5780633d1f8679146101f35780634c1c6cbf146102265780634ece6b171461024a575f80fd5b806231d1151461016557806307d9c534146101b5575b5f80fd5b348015610170575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c0575f80fd5b506101e36101cf36600461111d565b60036020525f908152604090205460ff1681565b60405190151581526020016101ac565b3480156101fe575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b348015610231575f80fd5b5061023c620493e081565b6040519081526020016101ac565b348015610255575f80fd5b5061023c602081565b348015610269575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102c67ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101ac565b348015610302575f80fd5b50610316610311366004611148565b6104cb565b005b348015610323575f80fd5b5061023c6104d7565b348015610337575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b34801561036a575f80fd5b50600154610198906001600160a01b031681565b348015610389575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b3480156103bc575f80fd5b50601261023c565b3480156103cf575f80fd5b506103166103de36600461111d565b610503565b6103166103f136600461121b565b6105ce565b610316610404366004611307565b6107ff565b348015610414575f80fd5b5061023c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610447575f80fd5b505f54610198906001600160a01b031681565b348015610465575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b348015610498575f80fd5b5061023c60025481565b6103166104b03660046113dc565b61096a565b3480156104c0575f80fd5b5061023c621e848081565b6104d4816109fc565b50565b60246104ec600267ffffffffffffffff61142a565b6104f6919061145c565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105825760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b5f8181526003602052604090205460ff16156105b4576040516356bc34a160e01b815260048101829052602401610579565b5f908152600360205260409020805460ff19166001179055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106485760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610579565b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061067c5761067c611484565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f815181106106cb576106cb611484565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f8061071f86868a8a87610aff565b909250905080156107a557604051329082905f81818185875af1925050503d805f8114610767576040519150601f19603f3d011682016040523d82523d5f602084013e61076c565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b6107b0846001611498565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b6040516107eb93929190611523565b60405180910390a350505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108795760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610579565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f806108c18888888887610aff565b9092509050801561091257604051329082905f81818185875af1925050503d805f8114610909576040519150601f19603f3d011682016040523d82523d5f602084013e61090e565b606091505b5050505b61091d846001611498565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a8960405161095893929190611523565b60405180910390a35050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109eb9190611558565b90506109f8338284610e98565b5050565b6001546001600160a01b03163314610a55576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610579565b6001600160a01b038116610a95576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f808315610cd3576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610bac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd09190611573565b505f80546040517f838b25200000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152918216604482015260648101879052620493e0608482015260c060a482015260c48101929092527f0000000000000000000000000000000000000000000000000000000000000000169063838b25209060e4015f604051808303815f87803b158015610cbc575f80fd5b505af1158015610cce573d5f803e3d5ffd5b505050505b5f6020865103610cf45785806020019051810190610cf19190611592565b90505b621e8480811015610d055750621e84805b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d91610d6f918c918c918a9101611523565b60408051601f1981840301815290829052610d8c916024016115d7565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092525f5491517f3dbb202b0000000000000000000000000000000000000000000000000000000081529092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692633dbb202b92610e5c929190911690859087906004016115e9565b5f604051808303815f87803b158015610e73575f80fd5b505af1158015610e85573d5f803e3d5ffd5b50969b349b509950505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610f34576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610579565b5f546001600160a01b03838116911614610f90575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610579565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610fee9085906115d7565b60405180910390a35f808280602001905181019061100c9190611620565b5f81815260036020526040902054919350915060ff1615611043576040516356bc34a160e01b815260048101829052602401610579565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b158015611100575f80fd5b505af1158015611112573d5f803e3d5ffd5b505050505050505050565b5f6020828403121561112d575f80fd5b5035919050565b6001600160a01b03811681146104d4575f80fd5b5f60208284031215611158575f80fd5b813561116381611134565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111a7576111a761116a565b604052919050565b5f82601f8301126111be575f80fd5b813567ffffffffffffffff8111156111d8576111d861116a565b6111eb601f8201601f191660200161117e565b8181528460208386010111156111ff575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f806080858703121561122e575f80fd5b843561123981611134565b935060208501359250604085013567ffffffffffffffff81111561125b575f80fd5b611267878288016111af565b949793965093946060013593505050565b5f67ffffffffffffffff8211156112915761129161116a565b5060051b60200190565b5f82601f8301126112aa575f80fd5b813560206112bf6112ba83611278565b61117e565b8083825260208201915060208460051b8701019350868411156112e0575f80fd5b602086015b848110156112fc57803583529183019183016112e5565b509695505050505050565b5f805f806080858703121561131a575f80fd5b843567ffffffffffffffff80821115611331575f80fd5b818701915087601f830112611344575f80fd5b813560206113546112ba83611278565b82815260059290921b8401810191818101908b841115611372575f80fd5b948201945b8386101561139957853561138a81611134565b82529482019490820190611377565b985050880135925050808211156113ae575f80fd5b6113ba8883890161129b565b945060408701359150808211156113cf575f80fd5b50611267878288016111af565b5f602082840312156113ec575f80fd5b813567ffffffffffffffff811115611402575f80fd5b61140e848285016111af565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff8084168061145057634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff82811682821603908082111561147d5761147d611416565b5092915050565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114ab576114ab611416565b92915050565b5f815180845260208085019450602084015f5b838110156114e95781516001600160a01b0316875295820195908201906001016114c4565b509495945050505050565b5f815180845260208085019450602084015f5b838110156114e957815187529582019590820190600101611507565b606081525f61153560608301866114b1565b828103602084015261154781866114f4565b915050826040830152949350505050565b5f60208284031215611568575f80fd5b815161116381611134565b5f60208284031215611583575f80fd5b81518015158114611163575f80fd5b5f602082840312156115a2575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61116360208301846115a9565b6001600160a01b0384168152606060208201525f61160a60608301856115a9565b905063ffffffff83166040830152949350505050565b5f8060408385031215611631575f80fd5b50508051602090910151909290915056fea2646970667358221220174a9564686652806fc2aab26f9b0ce69fd89110ddb897ea28a570e6db4bd8c664736f6c63430008190033", + "deployedBytecode": "0x608060405260043610610161575f3560e01c8063a0726ffa116100c6578063c23cc3ff1161007c578063f4427c2c11610057578063f4427c2c1461048d578063f953cec7146104a2578063f9fc3c21146104b5575f80fd5b8063c23cc3ff14610409578063e309fb771461043c578063f2541c351461045a575f80fd5b8063ac65ded2116100ac578063ac65ded2146103c4578063b2267a7b146103e3578063bde52661146103f6575f80fd5b8063a0726ffa1461037e578063a8b2ae02146103b1575f80fd5b806354d20cc21161011b5780635bc105c0116101015780635bc105c0146103185780636143fe931461032c5780638da5cb5b1461035f575f80fd5b806354d20cc21461025e57806354e4bbf4146102f7575f80fd5b80633d1f86791161014b5780633d1f8679146101f35780634c1c6cbf146102265780634ece6b171461024a575f80fd5b806231d1151461016557806307d9c534146101b5575b5f80fd5b348015610170575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101c0575f80fd5b506101e36101cf36600461111d565b60036020525f908152604090205460ff1681565b60405190151581526020016101ac565b3480156101fe575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b348015610231575f80fd5b5061023c620493e081565b6040519081526020016101ac565b348015610255575f80fd5b5061023c602081565b348015610269575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102c67ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101ac565b348015610302575f80fd5b50610316610311366004611148565b6104cb565b005b348015610323575f80fd5b5061023c6104d7565b348015610337575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b34801561036a575f80fd5b50600154610198906001600160a01b031681565b348015610389575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b3480156103bc575f80fd5b50601261023c565b3480156103cf575f80fd5b506103166103de36600461111d565b610503565b6103166103f136600461121b565b6105ce565b610316610404366004611307565b6107ff565b348015610414575f80fd5b5061023c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610447575f80fd5b505f54610198906001600160a01b031681565b348015610465575f80fd5b506101987f000000000000000000000000000000000000000000000000000000000000000081565b348015610498575f80fd5b5061023c60025481565b6103166104b03660046113dc565b61096a565b3480156104c0575f80fd5b5061023c621e848081565b6104d4816109fc565b50565b60246104ec600267ffffffffffffffff61142a565b6104f6919061145c565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105825760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b5f8181526003602052604090205460ff16156105b4576040516356bc34a160e01b815260048101829052602401610579565b5f908152600360205260409020805460ff19166001179055565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106485760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610579565b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061067c5761067c611484565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f815181106106cb576106cb611484565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f8061071f86868a8a87610aff565b909250905080156107a557604051329082905f81818185875af1925050503d805f8114610767576040519150601f19603f3d011682016040523d82523d5f602084013e61076c565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b6107b0846001611498565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b6040516107eb93929190611523565b60405180910390a350505050505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108795760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610579565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f806108c18888888887610aff565b9092509050801561091257604051329082905f81818185875af1925050503d805f8114610909576040519150601f19603f3d011682016040523d82523d5f602084013e61090e565b606091505b5050505b61091d846001611498565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a8960405161095893929190611523565b60405180910390a35050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109eb9190611558565b90506109f8338284610e98565b5050565b6001546001600160a01b03163314610a55576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610579565b6001600160a01b038116610a95576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f808315610cd3576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610bac573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd09190611573565b505f80546040517f838b25200000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830152918216604482015260648101879052620493e0608482015260c060a482015260c48101929092527f0000000000000000000000000000000000000000000000000000000000000000169063838b25209060e4015f604051808303815f87803b158015610cbc575f80fd5b505af1158015610cce573d5f803e3d5ffd5b505050505b5f6020865103610cf45785806020019051810190610cf19190611592565b90505b621e8480811015610d055750621e84805b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015290515f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d91610d6f918c918c918a9101611523565b60408051601f1981840301815290829052610d8c916024016115d7565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092525f5491517f3dbb202b0000000000000000000000000000000000000000000000000000000081529092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692633dbb202b92610e5c929190911690859087906004016115e9565b5f604051808303815f87803b158015610e73575f80fd5b505af1158015610e85573d5f803e3d5ffd5b50969b349b509950505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610f34576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610579565b5f546001600160a01b03838116911614610f90575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610579565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610fee9085906115d7565b60405180910390a35f808280602001905181019061100c9190611620565b5f81815260036020526040902054919350915060ff1615611043576040516356bc34a160e01b815260048101829052602401610579565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b158015611100575f80fd5b505af1158015611112573d5f803e3d5ffd5b505050505050505050565b5f6020828403121561112d575f80fd5b5035919050565b6001600160a01b03811681146104d4575f80fd5b5f60208284031215611158575f80fd5b813561116381611134565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111a7576111a761116a565b604052919050565b5f82601f8301126111be575f80fd5b813567ffffffffffffffff8111156111d8576111d861116a565b6111eb601f8201601f191660200161117e565b8181528460208386010111156111ff575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f806080858703121561122e575f80fd5b843561123981611134565b935060208501359250604085013567ffffffffffffffff81111561125b575f80fd5b611267878288016111af565b949793965093946060013593505050565b5f67ffffffffffffffff8211156112915761129161116a565b5060051b60200190565b5f82601f8301126112aa575f80fd5b813560206112bf6112ba83611278565b61117e565b8083825260208201915060208460051b8701019350868411156112e0575f80fd5b602086015b848110156112fc57803583529183019183016112e5565b509695505050505050565b5f805f806080858703121561131a575f80fd5b843567ffffffffffffffff80821115611331575f80fd5b818701915087601f830112611344575f80fd5b813560206113546112ba83611278565b82815260059290921b8401810191818101908b841115611372575f80fd5b948201945b8386101561139957853561138a81611134565b82529482019490820190611377565b985050880135925050808211156113ae575f80fd5b6113ba8883890161129b565b945060408701359150808211156113cf575f80fd5b50611267878288016111af565b5f602082840312156113ec575f80fd5b813567ffffffffffffffff811115611402575f80fd5b61140e848285016111af565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff8084168061145057634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff82811682821603908082111561147d5761147d611416565b5092915050565b634e487b7160e01b5f52603260045260245ffd5b808201808211156114ab576114ab611416565b92915050565b5f815180845260208085019450602084015f5b838110156114e95781516001600160a01b0316875295820195908201906001016114c4565b509495945050505050565b5f815180845260208085019450602084015f5b838110156114e957815187529582019590820190600101611507565b606081525f61153560608301866114b1565b828103602084015261154781866114f4565b915050826040830152949350505050565b5f60208284031215611568575f80fd5b815161116381611134565b5f60208284031215611583575f80fd5b81518015158114611163575f80fd5b5f602082840312156115a2575f80fd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61116360208301846115a9565b6001600160a01b0384168152606060208201525f61160a60608301856115a9565b905063ffffffff83166040830152949350505050565b5f8060408385031215611631575f80fd5b50508051602090910151909290915056fea2646970667358221220174a9564686652806fc2aab26f9b0ce69fd89110ddb897ea28a570e6db4bd8c664736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/OptimismTargetDispenserL2.json b/abis/0.8.25/OptimismTargetDispenserL2.json index 41b6674f..b36a159e 100644 --- a/abis/0.8.25/OptimismTargetDispenserL2.json +++ b/abis/0.8.25/OptimismTargetDispenserL2.json @@ -164,9 +164,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -366,20 +366,33 @@ "inputs": [ { "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, "internalType": "uint256", - "name": "sequence", + "name": "leftovers", "type": "uint256" - }, + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": true, - "internalType": "address", - "name": "messageSender", - "type": "address" + "internalType": "uint256", + "name": "sequence", + "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "l1Processor", + "name": "messageSender", "type": "address" }, { @@ -387,6 +400,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -476,10 +495,16 @@ "name": "amount", "type": "uint256" }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, { "indexed": false, "internalType": "uint256", - "name": "batchNonce", + "name": "olasBalance", "type": "uint256" }, { @@ -506,6 +531,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "StakingTargetDeposited", @@ -523,25 +554,6 @@ "name": "TargetDispenserUnpaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithheldAmountSynced", - "type": "event" - }, { "inputs": [], "name": "BRIDGE_PAYLOAD_LENGTH", @@ -557,7 +569,7 @@ }, { "inputs": [], - "name": "GAS_LIMIT", + "name": "MAX_CHAIN_ID", "outputs": [ { "internalType": "uint256", @@ -570,7 +582,7 @@ }, { "inputs": [], - "name": "MAX_CHAIN_ID", + "name": "MAX_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -583,7 +595,7 @@ }, { "inputs": [], - "name": "MAX_GAS_LIMIT", + "name": "MIN_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -633,6 +645,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "getBridgingDecimals", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, { "inputs": [], "name": "l1DepositProcessor", @@ -744,6 +769,44 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "queuedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -770,9 +833,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "redeem", @@ -806,25 +869,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "stakingQueueingNonces", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -833,7 +877,7 @@ "type": "bytes" } ], - "name": "syncWithheldTokens", + "name": "syncWithheldAmount", "outputs": [], "stateMutability": "payable", "type": "function" @@ -863,8 +907,8 @@ "type": "receive" } ], - "bytecode": "0x610120604052348015610010575f80fd5b5060405161269938038061269983398101604081905261002f916101aa565b84848484846001600160a01b038516158061005157506001600160a01b038416155b8061006357506001600160a01b038316155b8061007557506001600160a01b038216155b156100935760405163d92e233d60e01b815260040160405180910390fd5b805f036100b357604051637c946ed760e01b815260040160405180910390fd5b60246100c760026001600160401b03610204565b6100d19190610235565b6001600160401b031681111561012f578060246100f660026001600160401b03610204565b6101009190610235565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c05290911660e0526101005250506002805460ff60a81b1960ff60a01b1933166001600160a81b031990921691909117600160a01b1716600160a81b17905550610268915050565b80516001600160a01b03811681146101a5575f80fd5b919050565b5f805f805f60a086880312156101be575f80fd5b6101c78661018f565b94506101d56020870161018f565b93506101e36040870161018f565b92506101f16060870161018f565b9150608086015190509295509295909350565b5f6001600160401b038381168061022957634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561026157634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e051610100516123766103235f395f81816105230152611e2901525f81816102d8015281816115e00152818161163c01528181611d4001528181611daf0152611dde01525f81816102a501528181611313015281816115b101528181611ca20152611d1101525f818161030b015261181601525f8181610231015281816108970152818161095001528181611103015281816111bd01528181611260015281816119aa0152611a6d01526123765ff3fe608060405260043610610185575f3560e01c80635c975abb116100d1578063a6f9dae11161007c578063e3f5aa5111610057578063e3f5aa51146105a2578063f4427c2c146105b8578063f953cec7146105cd575f80fd5b8063a6f9dae114610545578063bddc966e14610564578063ce5494bb14610583575f80fd5b80638da5cb5b116100ac5780638da5cb5b146104df5780639890220b146104fe5780639b7bb84714610512575f80fd5b80635c975abb1461044a578063713d1a4e1461048d5780638456cb59146104cb575f80fd5b80632b83cccd1161013157806354d20cc21161010c57806354d20cc2146103895780635a7287cf146104225780635bc105c014610436575f80fd5b80632b83cccd146103425780633f4ba83a146103615780634ece6b1714610375575f80fd5b8063256359a811610161578063256359a8146102c757806329134768146102fa57806329f404cd1461032d575f80fd5b806231d11514610220578063091d2788146102705780631bad595714610294575f80fd5b3661021c576002546001600160a01b03166101e5576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b34801561022b575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561027b575f80fd5b50610286620493e081565b604051908152602001610267565b34801561029f575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b3480156102d2575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b348015610305575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b61034061033b366004611ecb565b6105e0565b005b34801561034d575f80fd5b5061034061035c366004611f6e565b61071f565b34801561036c575f80fd5b50610340610afb565b348015610380575f80fd5b50610286604081565b348015610394575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526103f17ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610267565b34801561042d575f80fd5b506102865f5481565b348015610441575f80fd5b50610286610ba4565b348015610455575f80fd5b5060025461047b9074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610267565b348015610498575f80fd5b506104bb6104a7366004611fa0565b60036020525f908152604090205460ff1681565b6040519015158152602001610267565b3480156104d6575f80fd5b50610340610bd0565b3480156104ea575f80fd5b50600254610253906001600160a01b031681565b348015610509575f80fd5b50610286610c79565b34801561051d575f80fd5b506102867f000000000000000000000000000000000000000000000000000000000000000081565b348015610550575f80fd5b5061034061055f366004611fb7565b610e2a565b34801561056f575f80fd5b5061034061057e366004611ecb565b610f0b565b34801561058e575f80fd5b5061034061059d366004611fb7565b610f57565b3480156105ad575f80fd5b50610286621e848081565b3480156105c3575f80fd5b5061028660015481565b6103406105db366004611ecb565b611310565b6002546001600160a81b90910460ff16111561060f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff74010000000000000000000000000000000000000000909104169003610689576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054908190036106c6576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80556106d381836113a2565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff16111561074e576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036107c8576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1680610867576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101dc565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109089190611fd9565b9050848110610aa4576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610996573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ba9190611ff0565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610a13575f80fd5b505af1158015610a25573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610a6491815260200190565b60405180910390a25f83815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610ae0565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101dc565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610b3b5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610bb9600267ffffffffffffffff61203c565b610bc39190612087565b67ffffffffffffffff1681565b6002546001600160a01b03163314610c105760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff161115610caa576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610d0e5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b479050805f03610d4a576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610d89576040519150601f19603f3d011682016040523d82523d5f602084013e610d8e565b606091505b5050905080610dde576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f6004820152306024820152336044820152606481018390526084016101dc565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a01b03163314610e6a5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b6001600160a01b038116610eaa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f4b5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b610f54816116af565b50565b6002546001600160a81b90910460ff161115610f86576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610fea5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b60025474010000000000000000000000000000000000000000900460ff16600103611041576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361108f576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016101dc565b306001600160a01b038216036110d3576040517f38e04bf20000000000000000000000000000000000000000000000000000000081523060048201526024016101dc565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611150573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111749190611fd9565b905080156112a4576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611205573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112299190611ff0565b9050806112a2576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101dc565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139191906120af565b905061139e338284611ca0565b5050565b60408151146113ea578051604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526101dc9290600401918252602082015260400190565b5f808280602001905181019061140091906120ca565b91509150815f0361143d576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34821115611480576040517f491a2bb1000000000000000000000000000000000000000000000000000000008152346004820152602481018390526044016101dc565b620493e08110156114915750620493e05b621e84808111156114a25750621e84805b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018690525f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d910160408051601f19818403018152908290526115209160240161211a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b0000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633dbb202b90859061160c907f0000000000000000000000000000000000000000000000000000000000000000908690889060040161212c565b5f604051808303818588803b158015611623575f80fd5b505af1158015611635573d5f803e3d5ffd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03165f7fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e470886040516116a091815260200190565b60405180910390a45050505050565b6002546001600160a81b90910460ff1611156116de576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f90819061171c90602090850181019085016121f2565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b8551811015611c5b575f868281518110611764576117646122b1565b602002602001015190505f868381518110611781576117816122b1565b602002602001015190505f826040516024016117ac91906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906118429085906122de565b5f604051808303815f865af19150503d805f811461187b576040519150601f19603f3d011682016040523d82523d5f602084013e611880565b606091505b50915091505f828015611894575081516020145b156118b057818060200190518101906118ad9190611fd9565b90505b805f03611911576118c1858a6122f4565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb866040516118fe91815260200190565b60405180910390a2505050505050611c53565b8085111561197a575f611924828761230d565b9050611930818b6122f4565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8260405161197091815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156119f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1b9190611fd9565b10158015611a295750876001145b15611b8e576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611ab3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad79190611ff0565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015611b30575f80fd5b505af1158015611b42573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051611b8191815260200190565b60405180910390a2611c4c565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f8181526003835283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b600101611748565b50611c678360016122f4565b6001558115610ae057815f80828254611c8091906122f4565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611d3e576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611ddc576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611e57929190612320565b60405180910390a2611e68816116af565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ec357611ec3611e6d565b604052919050565b5f6020808385031215611edc575f80fd5b823567ffffffffffffffff80821115611ef3575f80fd5b818501915085601f830112611f06575f80fd5b813581811115611f1857611f18611e6d565b611f2a84601f19601f84011601611e9a565b91508082528684828501011115611f3f575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f54575f80fd5b5f805f60608486031215611f80575f80fd5b8335611f8b81611f5a565b95602085013595506040909401359392505050565b5f60208284031215611fb0575f80fd5b5035919050565b5f60208284031215611fc7575f80fd5b8135611fd281611f5a565b9392505050565b5f60208284031215611fe9575f80fd5b5051919050565b5f60208284031215612000575f80fd5b81518015158114611fd2575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff8084168061207b577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156120a8576120a861200f565b5092915050565b5f602082840312156120bf575f80fd5b8151611fd281611f5a565b5f80604083850312156120db575f80fd5b505080516020909101519092909150565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611fd260208301846120ec565b6001600160a01b0384168152606060208201525f61214d60608301856120ec565b905063ffffffff83166040830152949350505050565b5f67ffffffffffffffff82111561217c5761217c611e6d565b5060051b60200190565b5f82601f830112612195575f80fd5b815160206121aa6121a583612163565b611e9a565b8083825260208201915060208460051b8701019350868411156121cb575f80fd5b602086015b848110156121e757805183529183019183016121d0565b509695505050505050565b5f8060408385031215612203575f80fd5b825167ffffffffffffffff8082111561221a575f80fd5b818501915085601f83011261222d575f80fd5b8151602061223d6121a583612163565b82815260059290921b8401810191818101908984111561225b575f80fd5b948201945b8386101561228257855161227381611f5a565b82529482019490820190612260565b9188015191965090935050508082111561229a575f80fd5b506122a785828601612186565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b808201808211156123075761230761200f565b92915050565b818103818111156123075761230761200f565b828152604060208201525f61233860408301846120ec565b94935050505056fea26469706673582212209e38c1e37d3685d1e7c46a47b776230217b04e4d47b7a2b416f802c54992c4b964736f6c63430008190033", - "deployedBytecode": "0x608060405260043610610185575f3560e01c80635c975abb116100d1578063a6f9dae11161007c578063e3f5aa5111610057578063e3f5aa51146105a2578063f4427c2c146105b8578063f953cec7146105cd575f80fd5b8063a6f9dae114610545578063bddc966e14610564578063ce5494bb14610583575f80fd5b80638da5cb5b116100ac5780638da5cb5b146104df5780639890220b146104fe5780639b7bb84714610512575f80fd5b80635c975abb1461044a578063713d1a4e1461048d5780638456cb59146104cb575f80fd5b80632b83cccd1161013157806354d20cc21161010c57806354d20cc2146103895780635a7287cf146104225780635bc105c014610436575f80fd5b80632b83cccd146103425780633f4ba83a146103615780634ece6b1714610375575f80fd5b8063256359a811610161578063256359a8146102c757806329134768146102fa57806329f404cd1461032d575f80fd5b806231d11514610220578063091d2788146102705780631bad595714610294575f80fd5b3661021c576002546001600160a01b03166101e5576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b34801561022b575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561027b575f80fd5b50610286620493e081565b604051908152602001610267565b34801561029f575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b3480156102d2575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b348015610305575f80fd5b506102537f000000000000000000000000000000000000000000000000000000000000000081565b61034061033b366004611ecb565b6105e0565b005b34801561034d575f80fd5b5061034061035c366004611f6e565b61071f565b34801561036c575f80fd5b50610340610afb565b348015610380575f80fd5b50610286604081565b348015610394575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526103f17ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610267565b34801561042d575f80fd5b506102865f5481565b348015610441575f80fd5b50610286610ba4565b348015610455575f80fd5b5060025461047b9074010000000000000000000000000000000000000000900460ff1681565b60405160ff9091168152602001610267565b348015610498575f80fd5b506104bb6104a7366004611fa0565b60036020525f908152604090205460ff1681565b6040519015158152602001610267565b3480156104d6575f80fd5b50610340610bd0565b3480156104ea575f80fd5b50600254610253906001600160a01b031681565b348015610509575f80fd5b50610286610c79565b34801561051d575f80fd5b506102867f000000000000000000000000000000000000000000000000000000000000000081565b348015610550575f80fd5b5061034061055f366004611fb7565b610e2a565b34801561056f575f80fd5b5061034061057e366004611ecb565b610f0b565b34801561058e575f80fd5b5061034061059d366004611fb7565b610f57565b3480156105ad575f80fd5b50610286621e848081565b3480156105c3575f80fd5b5061028660015481565b6103406105db366004611ecb565b611310565b6002546001600160a81b90910460ff16111561060f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff74010000000000000000000000000000000000000000909104169003610689576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054908190036106c6576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80556106d381836113a2565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff16111561074e576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036107c8576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1680610867576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101dc565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109089190611fd9565b9050848110610aa4576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610996573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ba9190611ff0565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610a13575f80fd5b505af1158015610a25573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610a6491815260200190565b60405180910390a25f83815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610ae0565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101dc565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610b3b5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610bb9600267ffffffffffffffff61203c565b610bc39190612087565b67ffffffffffffffff1681565b6002546001600160a01b03163314610c105760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff161115610caa576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610d0e5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b479050805f03610d4a576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610d89576040519150601f19603f3d011682016040523d82523d5f602084013e610d8e565b606091505b5050905080610dde576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f6004820152306024820152336044820152606481018390526084016101dc565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a01b03163314610e6a5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b6001600160a01b038116610eaa576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f4b5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b610f54816116af565b50565b6002546001600160a81b90910460ff161115610f86576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610fea5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101dc565b60025474010000000000000000000000000000000000000000900460ff16600103611041576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361108f576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016101dc565b306001600160a01b038216036110d3576040517f38e04bf20000000000000000000000000000000000000000000000000000000081523060048201526024016101dc565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611150573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111749190611fd9565b905080156112a4576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611205573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112299190611ff0565b9050806112a2576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101dc565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139191906120af565b905061139e338284611ca0565b5050565b60408151146113ea578051604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526101dc9290600401918252602082015260400190565b5f808280602001905181019061140091906120ca565b91509150815f0361143d576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34821115611480576040517f491a2bb1000000000000000000000000000000000000000000000000000000008152346004820152602481018390526044016101dc565b620493e08110156114915750620493e05b621e84808111156114a25750621e84805b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018690525f917ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d910160408051601f19818403018152908290526115209160240161211a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b0000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633dbb202b90859061160c907f0000000000000000000000000000000000000000000000000000000000000000908690889060040161212c565b5f604051808303818588803b158015611623575f80fd5b505af1158015611635573d5f803e3d5ffd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03165f7fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e470886040516116a091815260200190565b60405180910390a45050505050565b6002546001600160a81b90910460ff1611156116de576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f90819061171c90602090850181019085016121f2565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b8551811015611c5b575f868281518110611764576117646122b1565b602002602001015190505f868381518110611781576117816122b1565b602002602001015190505f826040516024016117ac91906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906118429085906122de565b5f604051808303815f865af19150503d805f811461187b576040519150601f19603f3d011682016040523d82523d5f602084013e611880565b606091505b50915091505f828015611894575081516020145b156118b057818060200190518101906118ad9190611fd9565b90505b805f03611911576118c1858a6122f4565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb866040516118fe91815260200190565b60405180910390a2505050505050611c53565b8085111561197a575f611924828761230d565b9050611930818b6122f4565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8260405161197091815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156119f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1b9190611fd9565b10158015611a295750876001145b15611b8e576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611ab3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad79190611ff0565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015611b30575f80fd5b505af1158015611b42573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051611b8191815260200190565b60405180910390a2611c4c565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f8181526003835283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b600101611748565b50611c678360016122f4565b6001558115610ae057815f80828254611c8091906122f4565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611d3e576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611ddc576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611e57929190612320565b60405180910390a2611e68816116af565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ec357611ec3611e6d565b604052919050565b5f6020808385031215611edc575f80fd5b823567ffffffffffffffff80821115611ef3575f80fd5b818501915085601f830112611f06575f80fd5b813581811115611f1857611f18611e6d565b611f2a84601f19601f84011601611e9a565b91508082528684828501011115611f3f575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f54575f80fd5b5f805f60608486031215611f80575f80fd5b8335611f8b81611f5a565b95602085013595506040909401359392505050565b5f60208284031215611fb0575f80fd5b5035919050565b5f60208284031215611fc7575f80fd5b8135611fd281611f5a565b9392505050565b5f60208284031215611fe9575f80fd5b5051919050565b5f60208284031215612000575f80fd5b81518015158114611fd2575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff8084168061207b577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156120a8576120a861200f565b5092915050565b5f602082840312156120bf575f80fd5b8151611fd281611f5a565b5f80604083850312156120db575f80fd5b505080516020909101519092909150565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611fd260208301846120ec565b6001600160a01b0384168152606060208201525f61214d60608301856120ec565b905063ffffffff83166040830152949350505050565b5f67ffffffffffffffff82111561217c5761217c611e6d565b5060051b60200190565b5f82601f830112612195575f80fd5b815160206121aa6121a583612163565b611e9a565b8083825260208201915060208460051b8701019350868411156121cb575f80fd5b602086015b848110156121e757805183529183019183016121d0565b509695505050505050565b5f8060408385031215612203575f80fd5b825167ffffffffffffffff8082111561221a575f80fd5b818501915085601f83011261222d575f80fd5b8151602061223d6121a583612163565b82815260059290921b8401810191818101908984111561225b575f80fd5b948201945b8386101561228257855161227381611f5a565b82529482019490820190612260565b9188015191965090935050508082111561229a575f80fd5b506122a785828601612186565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b808201808211156123075761230761200f565b92915050565b818103818111156123075761230761200f565b828152604060208201525f61233860408301846120ec565b94935050505056fea26469706673582212209e38c1e37d3685d1e7c46a47b776230217b04e4d47b7a2b416f802c54992c4b964736f6c63430008190033", + "bytecode": "0x610120604052348015610010575f80fd5b5060405161246038038061246083398101604081905261002f916101aa565b84848484846001600160a01b038516158061005157506001600160a01b038416155b8061006357506001600160a01b038316155b8061007557506001600160a01b038216155b156100935760405163d92e233d60e01b815260040160405180910390fd5b805f036100b357604051637c946ed760e01b815260040160405180910390fd5b60246100c760026001600160401b03610204565b6100d19190610235565b6001600160401b031681111561012f578060246100f660026001600160401b03610204565b6101009190610235565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c05290911660e0526101005250506002805460ff60a81b1960ff60a01b1933166001600160a81b031990921691909117600160a01b1716600160a81b17905550610268915050565b80516001600160a01b03811681146101a5575f80fd5b919050565b5f805f805f60a086880312156101be575f80fd5b6101c78661018f565b94506101d56020870161018f565b93506101e36040870161018f565b92506101f16060870161018f565b9150608086015190509295509295909350565b5f6001600160401b038381168061022957634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561026157634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161214461031c5f395f818161053d0152611c3001525f818161031d0152818161147501528181611b4701528181611bb60152611be501525f81816102ea0152818161125e0152818161144801528181611aa90152611b1801525f8181610350015261168001525f818161022e01528181610be701528181610c870152818161106701528181611121015281816111ab015281816117fb01526118a901526121445ff3fe60806040526004361061019b575f3560e01c80637ce1ffeb116100dc578063a6f9dae111610087578063ce5494bb11610062578063ce5494bb146105b0578063e3f5aa51146105cf578063f4427c2c146105e5578063f953cec7146105fa575f80fd5b8063a6f9dae11461055f578063a8b2ae021461057e578063bddc966e14610591575f80fd5b80639890220b116100b75780639890220b146104f9578063992c3e4b1461050d5780639b7bb8471461052c575f80fd5b80637ce1ffeb146104b05780638456cb59146104c65780638da5cb5b146104da575f80fd5b80633f4ba83a116101475780635a7287cf116101225780635a7287cf146104435780635bc105c0146104575780635c975abb1461046b5780637424ddc81461049d575f80fd5b80633f4ba83a146103725780634ece6b171461038857806354d20cc2146103aa575f80fd5b80631bad5957116101775780631bad5957146102d9578063256359a81461030c578063291347681461033f575f80fd5b806231d1151461021d57806307d9c5341461026d5780631b2e7f0a146102ab575f80fd5b36610219576002546001600160a01b03166101e25760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610228575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610278575f80fd5b5061029b610287366004611c74565b60036020525f908152604090205460ff1681565b6040519015158152602001610264565b3480156102b6575f80fd5b5061029b6102c5366004611c74565b60046020525f908152604090205460ff1681565b3480156102e4575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b348015610317575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561037d575f80fd5b5061038661060d565b005b348015610393575f80fd5b5061039c602081565b604051908152602001610264565b3480156103b5575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104127ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610264565b34801561044e575f80fd5b5061039c5f5481565b348015610462575f80fd5b5061039c6106a5565b348015610476575f80fd5b5060025461048b90600160a01b900460ff1681565b60405160ff9091168152602001610264565b6103866104ab366004611cd0565b6106d1565b3480156104bb575f80fd5b5061039c620493e081565b3480156104d1575f80fd5b506103866108a2565b3480156104e5575f80fd5b50600254610250906001600160a01b031681565b348015610504575f80fd5b5061039c61094b565b348015610518575f80fd5b50610386610527366004611d73565b610ab8565b348015610537575f80fd5b5061039c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056a575f80fd5b50610386610579366004611da5565b610dfc565b348015610589575f80fd5b50601261039c565b34801561059c575f80fd5b506103866105ab366004611cd0565b610edd565b3480156105bb575f80fd5b506103866105ca366004611da5565b610f29565b3480156105da575f80fd5b5061039c621e848081565b3480156105f0575f80fd5b5061039c60015481565b610386610608366004611cd0565b61125b565b6002546001600160a01b0316331461064d5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b60246106ba600267ffffffffffffffff611def565b6106c49190611e15565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff161115610700576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b90910416900361073e576040516313d0ff5960e31b815260040160405180910390fd5b5f54601281805f0361076357604051637c946ed760e01b815260040160405180910390fd5b61076d8184611e3d565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f806107b88589856112ed565b9092509050801561083e57604051339082905f81818185875af1925050503d805f8114610800576040519150601f19603f3d011682016040523d82523d5f602084013e610805565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610849846001611e93565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b031633146108e25760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff16111561097c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146109ce5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b479050805f036109f157604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610a30576040519150601f19603f3d011682016040523d82523d5f602084013e610a35565b606091505b5050905080610a6c5760405163cd3f165960e01b81525f6004820152306024820152336044820152606481018390526084016101d9565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff161115610ae7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610b25576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680610bd0576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610c34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190611ea6565b9050848110610da55760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610ccd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf19190611ebd565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610d31575f80fd5b505af1158015610d43573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c32198087604051610d8391815260200190565b60405180910390a35f838152600460205260409020805460ff19169055610de1565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101d9565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610e3c5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b6001600160a01b038116610e7c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f1d5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b610f26816114db565b50565b6002546001600160a81b90910460ff161115610f58576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b03163314610faa5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600254600160a01b900460ff16600103610ff0576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361102557604051631c7025f960e11b81526001600160a01b03821660048201526024016101d9565b306001600160a01b0382160361105057604051631c7025f960e11b81523060048201526024016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156110b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d89190611ea6565b905080156111ef576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611169573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118d9190611ebd565b9050806111ed5760405163cd3f165960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101d9565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112dc9190611edc565b90506112e9338284611aa7565b5050565b5f805f6020855103611320578480602001905181019061130d9190611ea6565b9050621e84808111156113205750621e84805b620493e08110156113315750620493e05b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018890529081018590525f907ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d9060600160408051601f19818403018152908290526113b791602401611f25565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b0000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633dbb202b906114a1907f00000000000000000000000000000000000000000000000000000000000000009085908790600401611f37565b5f604051808303815f87803b1580156114b8575f80fd5b505af11580156114ca573d5f803e3d5ffd5b509699349950975050505050505050565b6002546001600160a81b90910460ff16111561150a576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f90819081906115389060209086018101908601611ffd565b5f81815260036020526040902054929550909350915060ff161561158b576040517f56bc34a1000000000000000000000000000000000000000000000000000000008152600481018290526024016101d9565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015611a70575f8682815181106115ce576115ce6120c4565b602002602001015190505f8683815181106115eb576115eb6120c4565b602002602001015190505f8260405160240161161691906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906116ac9085906120d8565b5f604051808303815f865af19150503d805f81146116e5576040519150601f19603f3d011682016040523d82523d5f602084013e6116ea565b606091505b50915091505f8280156116fe575081516020145b1561171a57818060200190518101906117179190611ea6565b90505b805f0361177b5761172b858a611e93565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161176891815260200190565b60405180910390a2505050505050611a68565b808511156117e4575f61178e8287611e3d565b905061179a818b611e93565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516117da91815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611848573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186c9190611ea6565b905085811015801561187e5750886001145b156119b25760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156118ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119139190611ebd565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015611953575f80fd5b505af1158015611965573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c321980886040516119a591815260200190565b60405180910390a3611a60565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b6001016115b2565b508115610de157815f80828254611a879190611e93565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611b45576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611be3576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611c5e9291906120ee565b60405180910390a2611c6f816114db565b505050565b5f60208284031215611c84575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cc857611cc8611c8b565b604052919050565b5f6020808385031215611ce1575f80fd5b823567ffffffffffffffff80821115611cf8575f80fd5b818501915085601f830112611d0b575f80fd5b813581811115611d1d57611d1d611c8b565b611d2f601f8201601f19168501611c9f565b91508082528684828501011115611d44575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f26575f80fd5b5f805f60608486031215611d85575f80fd5b8335611d9081611d5f565b95602085013595506040909401359392505050565b5f60208284031215611db5575f80fd5b8135611dc081611d5f565b9392505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611e0957611e09611dc7565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611e3657611e36611ddb565b5092915050565b81810381811115611e5057611e50611ddb565b92915050565b80851115611e8b57815f1904821115611e7157611e71611ddb565b80851615611e7e57918102915b93841c9390800290611e56565b509250929050565b80820180821115611e5057611e50611ddb565b5f60208284031215611eb6575f80fd5b5051919050565b5f60208284031215611ecd575f80fd5b81518015158114611dc0575f80fd5b5f60208284031215611eec575f80fd5b8151611dc081611d5f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611dc06020830184611ef7565b6001600160a01b0384168152606060208201525f611f586060830185611ef7565b905063ffffffff83166040830152949350505050565b5f67ffffffffffffffff821115611f8757611f87611c8b565b5060051b60200190565b5f82601f830112611fa0575f80fd5b81516020611fb5611fb083611f6e565b611c9f565b8083825260208201915060208460051b870101935086841115611fd6575f80fd5b602086015b84811015611ff25780518352918301918301611fdb565b509695505050505050565b5f805f6060848603121561200f575f80fd5b835167ffffffffffffffff80821115612026575f80fd5b818601915086601f830112612039575f80fd5b81516020612049611fb083611f6e565b82815260059290921b8401810191818101908a841115612067575f80fd5b948201945b8386101561208e57855161207f81611d5f565b8252948201949082019061206c565b918901519197509093505050808211156120a6575f80fd5b506120b386828701611f91565b925050604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b828152604060208201525f6121066040830184611ef7565b94935050505056fea2646970667358221220fb65460817b16b27799592346bcd2f07d6b9fd8f2e5d7c5c5094c28c4bb3ed0564736f6c63430008190033", + "deployedBytecode": "0x60806040526004361061019b575f3560e01c80637ce1ffeb116100dc578063a6f9dae111610087578063ce5494bb11610062578063ce5494bb146105b0578063e3f5aa51146105cf578063f4427c2c146105e5578063f953cec7146105fa575f80fd5b8063a6f9dae11461055f578063a8b2ae021461057e578063bddc966e14610591575f80fd5b80639890220b116100b75780639890220b146104f9578063992c3e4b1461050d5780639b7bb8471461052c575f80fd5b80637ce1ffeb146104b05780638456cb59146104c65780638da5cb5b146104da575f80fd5b80633f4ba83a116101475780635a7287cf116101225780635a7287cf146104435780635bc105c0146104575780635c975abb1461046b5780637424ddc81461049d575f80fd5b80633f4ba83a146103725780634ece6b171461038857806354d20cc2146103aa575f80fd5b80631bad5957116101775780631bad5957146102d9578063256359a81461030c578063291347681461033f575f80fd5b806231d1151461021d57806307d9c5341461026d5780631b2e7f0a146102ab575f80fd5b36610219576002546001600160a01b03166101e25760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610228575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610278575f80fd5b5061029b610287366004611c74565b60036020525f908152604090205460ff1681565b6040519015158152602001610264565b3480156102b6575f80fd5b5061029b6102c5366004611c74565b60046020525f908152604090205460ff1681565b3480156102e4575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b348015610317575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561034a575f80fd5b506102507f000000000000000000000000000000000000000000000000000000000000000081565b34801561037d575f80fd5b5061038661060d565b005b348015610393575f80fd5b5061039c602081565b604051908152602001610264565b3480156103b5575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104127ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610264565b34801561044e575f80fd5b5061039c5f5481565b348015610462575f80fd5b5061039c6106a5565b348015610476575f80fd5b5060025461048b90600160a01b900460ff1681565b60405160ff9091168152602001610264565b6103866104ab366004611cd0565b6106d1565b3480156104bb575f80fd5b5061039c620493e081565b3480156104d1575f80fd5b506103866108a2565b3480156104e5575f80fd5b50600254610250906001600160a01b031681565b348015610504575f80fd5b5061039c61094b565b348015610518575f80fd5b50610386610527366004611d73565b610ab8565b348015610537575f80fd5b5061039c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056a575f80fd5b50610386610579366004611da5565b610dfc565b348015610589575f80fd5b50601261039c565b34801561059c575f80fd5b506103866105ab366004611cd0565b610edd565b3480156105bb575f80fd5b506103866105ca366004611da5565b610f29565b3480156105da575f80fd5b5061039c621e848081565b3480156105f0575f80fd5b5061039c60015481565b610386610608366004611cd0565b61125b565b6002546001600160a01b0316331461064d5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b60246106ba600267ffffffffffffffff611def565b6106c49190611e15565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff161115610700576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b90910416900361073e576040516313d0ff5960e31b815260040160405180910390fd5b5f54601281805f0361076357604051637c946ed760e01b815260040160405180910390fd5b61076d8184611e3d565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f806107b88589856112ed565b9092509050801561083e57604051339082905f81818185875af1925050503d805f8114610800576040519150601f19603f3d011682016040523d82523d5f602084013e610805565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610849846001611e93565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b031633146108e25760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff16111561097c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146109ce5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b479050805f036109f157604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610a30576040519150601f19603f3d011682016040523d82523d5f602084013e610a35565b606091505b5050905080610a6c5760405163cd3f165960e01b81525f6004820152306024820152336044820152606481018390526084016101d9565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff161115610ae7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610b25576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680610bd0576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610c34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190611ea6565b9050848110610da55760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610ccd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf19190611ebd565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610d31575f80fd5b505af1158015610d43573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c32198087604051610d8391815260200190565b60405180910390a35f838152600460205260409020805460ff19169055610de1565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101d9565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610e3c5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b6001600160a01b038116610e7c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b03163314610f1d5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b610f26816114db565b50565b6002546001600160a81b90910460ff161115610f58576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b03163314610faa5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101d9565b600254600160a01b900460ff16600103610ff0576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361102557604051631c7025f960e11b81526001600160a01b03821660048201526024016101d9565b306001600160a01b0382160361105057604051631c7025f960e11b81523060048201526024016101d9565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156110b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d89190611ea6565b905080156111ef576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611169573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118d9190611ebd565b9050806111ed5760405163cd3f165960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101d9565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112dc9190611edc565b90506112e9338284611aa7565b5050565b5f805f6020855103611320578480602001905181019061130d9190611ea6565b9050621e84808111156113205750621e84805b620493e08110156113315750620493e05b604080518082018252601581527f726563656976654d65737361676528627974657329000000000000000000000060209182015281519081018890529081018590525f907ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d9060600160408051601f19818403018152908290526113b791602401611f25565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f3dbb202b0000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633dbb202b906114a1907f00000000000000000000000000000000000000000000000000000000000000009085908790600401611f37565b5f604051808303815f87803b1580156114b8575f80fd5b505af11580156114ca573d5f803e3d5ffd5b509699349950975050505050505050565b6002546001600160a81b90910460ff16111561150a576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f90819081906115389060209086018101908601611ffd565b5f81815260036020526040902054929550909350915060ff161561158b576040517f56bc34a1000000000000000000000000000000000000000000000000000000008152600481018290526024016101d9565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015611a70575f8682815181106115ce576115ce6120c4565b602002602001015190505f8683815181106115eb576115eb6120c4565b602002602001015190505f8260405160240161161691906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906116ac9085906120d8565b5f604051808303815f865af19150503d805f81146116e5576040519150601f19603f3d011682016040523d82523d5f602084013e6116ea565b606091505b50915091505f8280156116fe575081516020145b1561171a57818060200190518101906117179190611ea6565b90505b805f0361177b5761172b858a611e93565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161176891815260200190565b60405180910390a2505050505050611a68565b808511156117e4575f61178e8287611e3d565b905061179a818b611e93565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516117da91815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611848573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186c9190611ea6565b905085811015801561187e5750886001145b156119b25760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156118ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119139190611ebd565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015611953575f80fd5b505af1158015611965573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c321980886040516119a591815260200190565b60405180910390a3611a60565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b6001016115b2565b508115610de157815f80828254611a879190611e93565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611b45576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611be3576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611c5e9291906120ee565b60405180910390a2611c6f816114db565b505050565b5f60208284031215611c84575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cc857611cc8611c8b565b604052919050565b5f6020808385031215611ce1575f80fd5b823567ffffffffffffffff80821115611cf8575f80fd5b818501915085601f830112611d0b575f80fd5b813581811115611d1d57611d1d611c8b565b611d2f601f8201601f19168501611c9f565b91508082528684828501011115611d44575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114610f26575f80fd5b5f805f60608486031215611d85575f80fd5b8335611d9081611d5f565b95602085013595506040909401359392505050565b5f60208284031215611db5575f80fd5b8135611dc081611d5f565b9392505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611e0957611e09611dc7565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611e3657611e36611ddb565b5092915050565b81810381811115611e5057611e50611ddb565b92915050565b80851115611e8b57815f1904821115611e7157611e71611ddb565b80851615611e7e57918102915b93841c9390800290611e56565b509250929050565b80820180821115611e5057611e50611ddb565b5f60208284031215611eb6575f80fd5b5051919050565b5f60208284031215611ecd575f80fd5b81518015158114611dc0575f80fd5b5f60208284031215611eec575f80fd5b8151611dc081611d5f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611dc06020830184611ef7565b6001600160a01b0384168152606060208201525f611f586060830185611ef7565b905063ffffffff83166040830152949350505050565b5f67ffffffffffffffff821115611f8757611f87611c8b565b5060051b60200190565b5f82601f830112611fa0575f80fd5b81516020611fb5611fb083611f6e565b611c9f565b8083825260208201915060208460051b870101935086841115611fd6575f80fd5b602086015b84811015611ff25780518352918301918301611fdb565b509695505050505050565b5f805f6060848603121561200f575f80fd5b835167ffffffffffffffff80821115612026575f80fd5b818601915086601f830112612039575f80fd5b81516020612049611fb083611f6e565b82815260059290921b8401810191818101908a841115612067575f80fd5b948201945b8386101561208e57855161207f81611d5f565b8252948201949082019061206c565b918901519197509093505050808211156120a6575f80fd5b506120b386828701611f91565b925050604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b828152604060208201525f6121066040830184611ef7565b94935050505056fea2646970667358221220fb65460817b16b27799592346bcd2f07d6b9fd8f2e5d7c5c5094c28c4bb3ed0564736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/PolygonDepositProcessorL1.json b/abis/0.8.25/PolygonDepositProcessorL1.json index 8bce4515..f07b509d 100644 --- a/abis/0.8.25/PolygonDepositProcessorL1.json +++ b/abis/0.8.25/PolygonDepositProcessorL1.json @@ -174,9 +174,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -340,6 +340,25 @@ "name": "L2TargetDispenserUpdated", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "leftovers", + "type": "uint256" + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -366,6 +385,12 @@ "internalType": "uint256", "name": "transferAmount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -636,6 +661,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -743,10 +787,23 @@ ], "stateMutability": "view", "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + } + ], + "name": "updateHashMaintenance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ], - "bytecode": "0x610140604052348015610010575f80fd5b5060405161305738038061305783398101604081905261002f916101df565b818488888883886001600160a01b038416158061005357506001600160a01b038316155b8061006557506001600160a01b038216155b156100835760405163d92e233d60e01b815260040160405180910390fd5b805f036100a357604051637c946ed760e01b815260040160405180910390fd5b60246100b760026001600160401b03610259565b6100c1919061028a565b6001600160401b031681111561011f578060246100e660026001600160401b03610259565b6100f0919061028a565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e0526101005260018054336001600160a01b0319918216179091556004805482169483169490941790935560038054909316918116919091179091558216158061018d57506001600160a01b038116155b156101ab5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b031661012052506102bd945050505050565b80516001600160a01b03811681146101da575f80fd5b919050565b5f805f805f805f60e0888a0312156101f5575f80fd5b6101fe886101c4565b965061020c602089016101c4565b955061021a604089016101c4565b9450610228606089016101c4565b93506080880151925061023d60a089016101c4565b915061024b60c089016101c4565b905092959891949750929550565b5f6001600160401b038381168061027e57634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b038281168282160390808211156102b657634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161012051612cf16103665f395f81816104d50152610a8a01525f818161046501528181611afd0152611b9901525f818161022801528181610f6a01528181611a000152611a6d01525f818161037d0152610b3b01525f8181610508015281816106bf01528181610714015281816108490152818161089e0152611bc901525f818161019701528181610ab90152610b680152612cf15ff3fe608060405260043610610182575f3560e01c8063aea4e49e116100d1578063e309fb771161007c578063f4427c2c11610057578063f4427c2c1461052a578063f953cec71461053f578063f9fc3c211461055e575f80fd5b8063e309fb77146104a6578063e6198705146104c4578063f2541c35146104f7575f80fd5b8063c0857ba0116100ac578063c0857ba014610435578063c23cc3ff14610454578063de9b771f14610487575f80fd5b8063aea4e49e146103f0578063b2267a7b1461040f578063bde5266114610422575f80fd5b80635bc105c0116101315780638da5cb5b1161010c5780638da5cb5b1461039f578063972c4928146103be578063a8b2ae02146103dd575f80fd5b80635bc105c01461031a578063607f2d421461032e5780636143fe931461036c575f80fd5b80634c1c6cbf116101615780634c1c6cbf1461024a57806354d20cc21461026057806354e4bbf4146102f9575f80fd5b806231d115146101865780630e387de6146101d65780633d1f867914610217575b5f80fd5b348015610191575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101e1575f80fd5b506102097f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681565b6040519081526020016101cd565b348015610222575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610255575f80fd5b50610209620493e081565b34801561026b575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102c87ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101cd565b348015610304575f80fd5b506103186103133660046124bc565b610574565b005b348015610325575f80fd5b50610209610589565b348015610339575f80fd5b5061035c6103483660046124d7565b60066020525f908152604090205460ff1681565b60405190151581526020016101cd565b348015610377575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103aa575f80fd5b506001546101b9906001600160a01b031681565b3480156103c9575f80fd5b506005546101b9906001600160a01b031681565b3480156103e8575f80fd5b506012610209565b3480156103fb575f80fd5b5061031861040a3660046124bc565b6105b5565b61031861041d3660046125c5565b6106b4565b6103186104303660046126ac565b61083e565b348015610440575f80fd5b506004546101b9906001600160a01b031681565b34801561045f575f80fd5b506102097f000000000000000000000000000000000000000000000000000000000000000081565b348015610492575f80fd5b506003546101b9906001600160a01b031681565b3480156104b1575f80fd5b505f546101b9906001600160a01b031681565b3480156104cf575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610502575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610535575f80fd5b5061020960025481565b34801561054a575f80fd5b50610318610559366004612781565b610937565b348015610569575f80fd5b50610209621e848081565b61057d816105b5565b61058681610950565b50565b602461059e600267ffffffffffffffff61280d565b6105a89190612833565b67ffffffffffffffff1681565b6001546001600160a01b03163314610613576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b6001600160a01b038116610653576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fa9bdbd6b528cbfc0588f52c3a4ec11bc3f60d0113e60e778f5c42ff7599eef9c905f90a250565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610747576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015233602482015260440161060a565b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061077b5761077b612854565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f815181106107ca576107ca612854565b6020026020010181815250505f6107e383838787610a53565b600280549192505f6107f483612881565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe3284848760405161082d9392919061290b565b60405180910390a250505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108d1576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015233602482015260440161060a565b5f6108de85858585610a53565b600280549192505f6108ef83612881565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328686856040516109289392919061290b565b60405180910390a25050505050565b5f61094182610c1f565b905061094c81610f62565b5050565b6001546001600160a01b031633146109a9576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015233602482015260440161060a565b6001600160a01b0381166109e9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f8115610be4576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b239190612940565b505f5460408051602081018590526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169363e3dec8fb939116917f000000000000000000000000000000000000000000000000000000000000000091016040516020818303038152906040526040518463ffffffff1660e01b8152600401610bb69392919061298d565b5f604051808303815f87803b158015610bcd575f80fd5b505af1158015610bdf573d5f803e3d5ffd5b505050505b5f8585604051602001610bf89291906129c1565b6040516020818303038152906040529050610c1281610f99565b5050600254949350505050565b60605f610c2b83611018565b90505f610c3782611075565b90505f610c43836110a3565b90505f81610c50846110ca565b610c59866112a6565b604051602001610c6b939291906129e5565b60408051601f1981840301815291815281516020928301205f818152600690935291205490915060ff1615610d075760405162461bcd60e51b8152602060048201526024808201527f4678526f6f7454756e6e656c3a20455849545f414c52454144595f50524f434560448201527f5353454400000000000000000000000000000000000000000000000000000000606482015260840161060a565b5f81815260066020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d46856112c0565b90505f610d5282611404565b9050610d5d81611491565b6005546001600160a01b03908116911614610de05760405162461bcd60e51b815260206004820152602560248201527f4678526f6f7454756e6e656c3a20494e56414c49445f46585f4348494c445f5460448201527f554e4e454c000000000000000000000000000000000000000000000000000000606482015260840161060a565b5f610dea876114b8565b9050610e0a610dfa846020015190565b87610e048a6114d2565b846114ed565b610e7c5760405162461bcd60e51b815260206004820152602360248201527f4678526f6f7454756e6e656c3a20494e56414c49445f524543454950545f505260448201527f4f4f460000000000000000000000000000000000000000000000000000000000606482015260840161060a565b610eaa85610e8989611785565b610e928a61179f565b84610e9c8c6117b9565b610ea58d6117d2565b6117ed565b5f610eb483611925565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036610ee9610ee4835f611961565b611998565b14610f365760405162461bcd60e51b815260206004820152601f60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f5349474e415455524500604482015260640161060a565b5f610f40846119e2565b806020019051810190610f539190612a0a565b9b9a5050505050505050505050565b5f54610586907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b0316836119fe565b6003546005546040517fb47204770000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263b472047792610fe8929116908590600401612a7f565b5f604051808303815f87803b158015610fff575f80fd5b505af1158015611011573d5f803e3d5ffd5b5050505050565b6040805160208101909152606081525f61106061105b846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b611c2e565b60408051602081019091529081529392505050565b606061109d825f015160088151811061109057611090612854565b6020026020010151611d34565b92915050565b5f61109d825f01516002815181106110bd576110bd612854565b6020026020010151611998565b60408051602081019091525f81528151606091901561109d575f806110ef5f86611daf565b60f81c9050600181148061110657508060ff166003145b156111c35760018551600261111b9190612aa0565b6111259190612ab7565b67ffffffffffffffff81111561113d5761113d6124ee565b6040519080825280601f01601f191660200182016040528015611167576020820181803683370190505b5092505f611176600187611daf565b905080845f8151811061118b5761118b612854565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001925050611226565b6002855160026111d39190612aa0565b6111dd9190612ab7565b67ffffffffffffffff8111156111f5576111f56124ee565b6040519080825280601f01601f19166020018201604052801561121f576020820181803683370190505b5092505f91505b60ff82165b835181101561129d5761125561124460ff851683612ab7565b61124f906002612aca565b87611daf565b84828151811061126757611267612854565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161122b565b50505092915050565b5f61109d825f01516009815181106110bd576110bd612854565b6112e3604051806060016040528060608152602001606081526020015f81525090565b6112fc825f015160068151811061109057611090612854565b60208281018290526040805180820182525f808252908301528051808201909152825181529181019082015261133181611e2f565b156113465761133f81611c2e565b82526113f0565b602082015180515f9061135b90600190612ab7565b67ffffffffffffffff811115611373576113736124ee565b6040519080825280601f01601f19166020018201604052801561139d576020820181803683370190505b5090505f808360210191508260200190506113ba82828551611e66565b6040805180820182525f808252602091820152815180830190925284518252808501908201526113e990611c2e565b8652505050505b6113f9836112a6565b604083015250919050565b604080516080810182525f918101828152606080830193909352815260208101919091525f61144f835f015160038151811061144257611442612854565b6020026020010151611c2e565b83604001518151811061146457611464612854565b60200260200101519050604051806040016040528082815260200161148883611c2e565b90529392505050565b5f61109d82602001515f815181106114ab576114ab612854565b6020026020010151611eee565b5f61109d825f01516005815181106110bd576110bd612854565b606061109d825f015160078151811061109057611090612854565b5f8061151f846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b90505f61152b82611c2e565b9050606080855f8061153c8b6110ca565b905080515f03611555575f97505050505050505061177d565b5f5b8651811015611774578151831115611579575f9850505050505050505061177d565b61159b87828151811061158e5761158e612854565b6020026020010151611f06565b9550858051906020012084146115bb575f9850505050505050505061177d565b6115d087828151811061144257611442612854565b9450845160110361169f578151830361162e578c805190602001206116018660108151811061109057611090612854565b805190602001200361161e5760019850505050505050505061177d565b5f9850505050505050505061177d565b5f82848151811061164157611641612854565b016020015160f81c90506010811115611665575f995050505050505050505061177d565b61168a868260ff168151811061167d5761167d612854565b6020026020010151611f80565b9450611697600185612aca565b93505061176c565b845160020361161e575f6116c86116c1875f8151811061109057611090612854565b8486611fab565b83519091506116d78286612aca565b03611729578d805190602001206116fa8760018151811061109057611090612854565b8051906020012003611718576001995050505050505050505061177d565b5f995050505050505050505061177d565b805f03611741575f995050505050505050505061177d565b61174b8185612aca565b93506117638660018151811061167d5761167d612854565b945061176c9050565b600101611557565b50505050505050505b949350505050565b5f61109d825f01516003815181106110bd576110bd612854565b5f61109d825f01516004815181106110bd576110bd612854565b5f61109d825f01515f815181106110bd576110bd612854565b606061109d825f015160018151811061109057611090612854565b600480546040517f41539d4a0000000000000000000000000000000000000000000000000000000081529182018490525f91829182916001600160a01b03909116906341539d4a9060240160a060405180830381865afa158015611853573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118779190612add565b50935050925092506118ce828a61188e9190612ab7565b6040805160208082018e90528183018d9052606082018c905260808083018c90528351808403909101815260a090920190925280519101209085876120d3565b61191a5760405162461bcd60e51b815260206004820152601c60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f48454144455200000000604482015260640161060a565b505050505050505050565b6040805160208101909152606081526040518060200160405280611959846020015160018151811061144257611442612854565b905292915050565b604080518082019091525f8082526020820152825180518390811061198857611988612854565b6020026020010151905092915050565b80515f90158015906119ac57508151602110155b6119b4575f80fd5b5f806119bf84612248565b81519193509150602082101561177d5760208290036101000a9004949350505050565b606061109d826020015160028151811061109057611090612854565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611a9a576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260440161060a565b5f546001600160a01b03838116911614611af6575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152909116602482015260440161060a565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390611b54908590612b26565b60405180910390a35f81806020019051810190611b719190612b38565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b158015611c12575f80fd5b505af1158015611c24573d5f803e3d5ffd5b5050505050505050565b6060611c3982611e2f565b611c41575f80fd5b5f611c4b8361228a565b90505f8167ffffffffffffffff811115611c6757611c676124ee565b604051908082528060200260200182016040528015611cab57816020015b604080518082019091525f8082526020820152815260200190600190039081611c855790505b5090505f611cbc856020015161230a565b8560200151611ccb9190612aca565b90505f805b84811015611d2957611ce18361238a565b9150604051806040016040528083815260200184815250848281518110611d0a57611d0a612854565b6020908102919091010152611d1f8284612aca565b9250600101611cd0565b509195945050505050565b8051606090611d41575f80fd5b5f80611d4c84612248565b915091505f8167ffffffffffffffff811115611d6a57611d6a6124ee565b6040519080825280601f01601f191660200182016040528015611d94576020820181803683370190505b50905060208101611da684828561244b565b50949350505050565b5f611dbb600284612b4f565b15611df557601082611dce600286612b62565b81518110611dde57611dde612854565b0160200151611df0919060f81c612b75565b611e25565b601082611e03600286612b62565b81518110611e1357611e13612854565b0160200151611e25919060f81c612b96565b60f81b9392505050565b80515f908103611e4057505f919050565b602082015180515f1a9060c0821015611e5c57505f9392505050565b5060019392505050565b805f03611e7257505050565b60208110611eaa5782518252611e89602084612aca565b9250611e96602083612aca565b9150611ea3602082612ab7565b9050611e72565b805f03611eb657505050565b5f6001611ec4836020612ab7565b611ed090610100612c97565b611eda9190612ab7565b935183518516941916939093179091525050565b80515f90601514611efd575f80fd5b61109d82611998565b60605f825f015167ffffffffffffffff811115611f2557611f256124ee565b6040519080825280601f01601f191660200182016040528015611f4f576020820181803683370190505b50905080515f03611f605792915050565b5f816020019050611f79846020015182865f015161244b565b5092915050565b80515f90602114611f8f575f80fd5b5f8083602001516001611fa29190612aca565b51949350505050565b5f8080611fb7866110ca565b90505f815167ffffffffffffffff811115611fd457611fd46124ee565b6040519080825280601f01601f191660200182016040528015611ffe576020820181803683370190505b509050845b825161200f9087612aca565b8110156120a5575f87828151811061202957612029612854565b01602001517fff00000000000000000000000000000000000000000000000000000000000000169050808361205e8985612ab7565b8151811061206e5761206e612854565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535050600101612003565b5080805190602001208280519060200120036120c457815192506120c8565b5f92505b509095945050505050565b5f602082516120e29190612b4f565b1561212f5760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640161060a565b5f6020835161213e9190612b62565b905061214b816002612c97565b85106121995760405162461bcd60e51b815260206004820152601560248201527f4c65616620696e64657820697320746f6f206269670000000000000000000000604482015260640161060a565b5f8660205b8551811161223a578581015192506121b7600289612b4f565b5f036121ee57604080516020810184905290810184905260600160405160208183030381529060405280519060200120915061221b565b60408051602081018590529081018390526060016040516020818303038152906040528051906020012091505b612226600289612b62565b9750612233602082612aca565b905061219e565b509094149695505050505050565b5f805f612258846020015161230a565b90505f81856020015161226b9190612aca565b90505f82865f015161227d9190612ab7565b9196919550909350505050565b80515f90810361229b57505f919050565b5f806122aa846020015161230a565b84602001516122b99190612aca565b90505f845f015185602001516122cf9190612aca565b90505b80821015612301576122e38261238a565b6122ed9083612aca565b9150826122f981612881565b9350506122d2565b50909392505050565b80515f90811a608081101561232157505f92915050565b60b881108061233c575060c0811080159061233c575060f881105b1561234a5750600192915050565b60c081101561237e5761235f600160b8612ca2565b61236c9060ff1682612ab7565b612377906001612aca565b9392505050565b61235f600160f8612ca2565b80515f908190811a60808110156123a45760019150611f79565b60b88110156123ca576123b8608082612ab7565b6123c3906001612aca565b9150611f79565b60c08110156123f75760b78103600185019450806020036101000a85510460018201810193505050611f79565b60f881101561240b576123b860c082612ab7565b60019390930151602084900360f7016101000a90049092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0192915050565b805f0361245757505050565b6020811061248f578251825261246e602084612aca565b925061247b602083612aca565b9150612488602082612ab7565b9050612457565b80156124a3575f6001611ec4836020612ab7565b505050565b6001600160a01b0381168114610586575f80fd5b5f602082840312156124cc575f80fd5b8135612377816124a8565b5f602082840312156124e7575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612544576125446124ee565b604052919050565b5f67ffffffffffffffff821115612565576125656124ee565b50601f01601f191660200190565b5f82601f830112612582575f80fd5b81356125956125908261254c565b61251b565b8181528460208386010111156125a9575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156125d8575f80fd5b84356125e3816124a8565b935060208501359250604085013567ffffffffffffffff811115612605575f80fd5b61261187828801612573565b949793965093946060013593505050565b5f67ffffffffffffffff82111561263b5761263b6124ee565b5060051b60200190565b5f82601f830112612654575f80fd5b8135602061266461259083612622565b8083825260208201915060208460051b870101935086841115612685575f80fd5b602086015b848110156126a1578035835291830191830161268a565b509695505050505050565b5f805f80608085870312156126bf575f80fd5b843567ffffffffffffffff808211156126d6575f80fd5b818701915087601f8301126126e9575f80fd5b813560206126f961259083612622565b82815260059290921b8401810191818101908b841115612717575f80fd5b948201945b8386101561273e57853561272f816124a8565b8252948201949082019061271c565b98505088013592505080821115612753575f80fd5b61275f88838901612645565b94506040870135915080821115612774575f80fd5b5061261187828801612573565b5f60208284031215612791575f80fd5b813567ffffffffffffffff8111156127a7575f80fd5b61177d84828501612573565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680612827576128276127b3565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611f7957611f796127e0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f198203612892576128926127e0565b5060010190565b5f815180845260208085019450602084015f5b838110156128d15781516001600160a01b0316875295820195908201906001016128ac565b509495945050505050565b5f815180845260208085019450602084015f5b838110156128d1578151875295820195908201906001016128ef565b606081525f61291d6060830186612899565b828103602084015261292f81866128dc565b915050826040830152949350505050565b5f60208284031215612950575f80fd5b81518015158114612377575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038086168352808516602084015250606060408301526129b8606083018461295f565b95945050505050565b604081525f6129d36040830185612899565b82810360208401526129b881856128dc565b8381525f83518060208601602085015e60209201918201929092526040019392505050565b5f60208284031215612a1a575f80fd5b815167ffffffffffffffff811115612a30575f80fd5b8201601f81018413612a40575f80fd5b8051612a4e6125908261254c565b818152856020838501011115612a62575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b6001600160a01b0383168152604060208201525f61177d604083018461295f565b808202811582820484141761109d5761109d6127e0565b8181038181111561109d5761109d6127e0565b8082018082111561109d5761109d6127e0565b5f805f805f60a08688031215612af1575f80fd5b855194506020860151935060408601519250606086015191506080860151612b18816124a8565b809150509295509295909350565b602081525f612377602083018461295f565b5f60208284031215612b48575f80fd5b5051919050565b5f82612b5d57612b5d6127b3565b500690565b5f82612b7057612b706127b3565b500490565b5f60ff831680612b8757612b876127b3565b8060ff84160691505092915050565b5f60ff831680612ba857612ba86127b3565b8060ff84160491505092915050565b600181815b80851115612bf157815f1904821115612bd757612bd76127e0565b80851615612be457918102915b93841c9390800290612bbc565b509250929050565b5f82612c075750600161109d565b81612c1357505f61109d565b8160018114612c295760028114612c3357612c4f565b600191505061109d565b60ff841115612c4457612c446127e0565b50506001821b61109d565b5060208310610133831016604e8410600b8410161715612c72575081810a61109d565b612c7c8383612bb7565b805f1904821115612c8f57612c8f6127e0565b029392505050565b5f6123778383612bf9565b60ff828116828216039081111561109d5761109d6127e056fea26469706673582212206ebbbc74d1021fc5996ebcb6a2c396e9ddafb06f617fae0200e53a72111c93cb64736f6c63430008190033", - "deployedBytecode": "0x608060405260043610610182575f3560e01c8063aea4e49e116100d1578063e309fb771161007c578063f4427c2c11610057578063f4427c2c1461052a578063f953cec71461053f578063f9fc3c211461055e575f80fd5b8063e309fb77146104a6578063e6198705146104c4578063f2541c35146104f7575f80fd5b8063c0857ba0116100ac578063c0857ba014610435578063c23cc3ff14610454578063de9b771f14610487575f80fd5b8063aea4e49e146103f0578063b2267a7b1461040f578063bde5266114610422575f80fd5b80635bc105c0116101315780638da5cb5b1161010c5780638da5cb5b1461039f578063972c4928146103be578063a8b2ae02146103dd575f80fd5b80635bc105c01461031a578063607f2d421461032e5780636143fe931461036c575f80fd5b80634c1c6cbf116101615780634c1c6cbf1461024a57806354d20cc21461026057806354e4bbf4146102f9575f80fd5b806231d115146101865780630e387de6146101d65780633d1f867914610217575b5f80fd5b348015610191575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101e1575f80fd5b506102097f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681565b6040519081526020016101cd565b348015610222575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610255575f80fd5b50610209620493e081565b34801561026b575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526102c87ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101cd565b348015610304575f80fd5b506103186103133660046124bc565b610574565b005b348015610325575f80fd5b50610209610589565b348015610339575f80fd5b5061035c6103483660046124d7565b60066020525f908152604090205460ff1681565b60405190151581526020016101cd565b348015610377575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103aa575f80fd5b506001546101b9906001600160a01b031681565b3480156103c9575f80fd5b506005546101b9906001600160a01b031681565b3480156103e8575f80fd5b506012610209565b3480156103fb575f80fd5b5061031861040a3660046124bc565b6105b5565b61031861041d3660046125c5565b6106b4565b6103186104303660046126ac565b61083e565b348015610440575f80fd5b506004546101b9906001600160a01b031681565b34801561045f575f80fd5b506102097f000000000000000000000000000000000000000000000000000000000000000081565b348015610492575f80fd5b506003546101b9906001600160a01b031681565b3480156104b1575f80fd5b505f546101b9906001600160a01b031681565b3480156104cf575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610502575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610535575f80fd5b5061020960025481565b34801561054a575f80fd5b50610318610559366004612781565b610937565b348015610569575f80fd5b50610209621e848081565b61057d816105b5565b61058681610950565b50565b602461059e600267ffffffffffffffff61280d565b6105a89190612833565b67ffffffffffffffff1681565b6001546001600160a01b03163314610613576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911660248201526044015b60405180910390fd5b6001600160a01b038116610653576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fa9bdbd6b528cbfc0588f52c3a4ec11bc3f60d0113e60e778f5c42ff7599eef9c905f90a250565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610747576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015233602482015260440161060a565b6040805160018082528183019092525f916020808301908036833701905050905084815f8151811061077b5761077b612854565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f815181106107ca576107ca612854565b6020026020010181815250505f6107e383838787610a53565b600280549192505f6107f483612881565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe3284848760405161082d9392919061290b565b60405180910390a250505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108d1576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015233602482015260440161060a565b5f6108de85858585610a53565b600280549192505f6108ef83612881565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe328686856040516109289392919061290b565b60405180910390a25050505050565b5f61094182610c1f565b905061094c81610f62565b5050565b6001546001600160a01b031633146109a9576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015233602482015260440161060a565b6001600160a01b0381166109e9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f8115610be4576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b239190612940565b505f5460408051602081018590526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169363e3dec8fb939116917f000000000000000000000000000000000000000000000000000000000000000091016040516020818303038152906040526040518463ffffffff1660e01b8152600401610bb69392919061298d565b5f604051808303815f87803b158015610bcd575f80fd5b505af1158015610bdf573d5f803e3d5ffd5b505050505b5f8585604051602001610bf89291906129c1565b6040516020818303038152906040529050610c1281610f99565b5050600254949350505050565b60605f610c2b83611018565b90505f610c3782611075565b90505f610c43836110a3565b90505f81610c50846110ca565b610c59866112a6565b604051602001610c6b939291906129e5565b60408051601f1981840301815291815281516020928301205f818152600690935291205490915060ff1615610d075760405162461bcd60e51b8152602060048201526024808201527f4678526f6f7454756e6e656c3a20455849545f414c52454144595f50524f434560448201527f5353454400000000000000000000000000000000000000000000000000000000606482015260840161060a565b5f81815260066020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d46856112c0565b90505f610d5282611404565b9050610d5d81611491565b6005546001600160a01b03908116911614610de05760405162461bcd60e51b815260206004820152602560248201527f4678526f6f7454756e6e656c3a20494e56414c49445f46585f4348494c445f5460448201527f554e4e454c000000000000000000000000000000000000000000000000000000606482015260840161060a565b5f610dea876114b8565b9050610e0a610dfa846020015190565b87610e048a6114d2565b846114ed565b610e7c5760405162461bcd60e51b815260206004820152602360248201527f4678526f6f7454756e6e656c3a20494e56414c49445f524543454950545f505260448201527f4f4f460000000000000000000000000000000000000000000000000000000000606482015260840161060a565b610eaa85610e8989611785565b610e928a61179f565b84610e9c8c6117b9565b610ea58d6117d2565b6117ed565b5f610eb483611925565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036610ee9610ee4835f611961565b611998565b14610f365760405162461bcd60e51b815260206004820152601f60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f5349474e415455524500604482015260640161060a565b5f610f40846119e2565b806020019051810190610f539190612a0a565b9b9a5050505050505050505050565b5f54610586907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b0316836119fe565b6003546005546040517fb47204770000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263b472047792610fe8929116908590600401612a7f565b5f604051808303815f87803b158015610fff575f80fd5b505af1158015611011573d5f803e3d5ffd5b5050505050565b6040805160208101909152606081525f61106061105b846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b611c2e565b60408051602081019091529081529392505050565b606061109d825f015160088151811061109057611090612854565b6020026020010151611d34565b92915050565b5f61109d825f01516002815181106110bd576110bd612854565b6020026020010151611998565b60408051602081019091525f81528151606091901561109d575f806110ef5f86611daf565b60f81c9050600181148061110657508060ff166003145b156111c35760018551600261111b9190612aa0565b6111259190612ab7565b67ffffffffffffffff81111561113d5761113d6124ee565b6040519080825280601f01601f191660200182016040528015611167576020820181803683370190505b5092505f611176600187611daf565b905080845f8151811061118b5761118b612854565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001925050611226565b6002855160026111d39190612aa0565b6111dd9190612ab7565b67ffffffffffffffff8111156111f5576111f56124ee565b6040519080825280601f01601f19166020018201604052801561121f576020820181803683370190505b5092505f91505b60ff82165b835181101561129d5761125561124460ff851683612ab7565b61124f906002612aca565b87611daf565b84828151811061126757611267612854565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060010161122b565b50505092915050565b5f61109d825f01516009815181106110bd576110bd612854565b6112e3604051806060016040528060608152602001606081526020015f81525090565b6112fc825f015160068151811061109057611090612854565b60208281018290526040805180820182525f808252908301528051808201909152825181529181019082015261133181611e2f565b156113465761133f81611c2e565b82526113f0565b602082015180515f9061135b90600190612ab7565b67ffffffffffffffff811115611373576113736124ee565b6040519080825280601f01601f19166020018201604052801561139d576020820181803683370190505b5090505f808360210191508260200190506113ba82828551611e66565b6040805180820182525f808252602091820152815180830190925284518252808501908201526113e990611c2e565b8652505050505b6113f9836112a6565b604083015250919050565b604080516080810182525f918101828152606080830193909352815260208101919091525f61144f835f015160038151811061144257611442612854565b6020026020010151611c2e565b83604001518151811061146457611464612854565b60200260200101519050604051806040016040528082815260200161148883611c2e565b90529392505050565b5f61109d82602001515f815181106114ab576114ab612854565b6020026020010151611eee565b5f61109d825f01516005815181106110bd576110bd612854565b606061109d825f015160078151811061109057611090612854565b5f8061151f846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b90505f61152b82611c2e565b9050606080855f8061153c8b6110ca565b905080515f03611555575f97505050505050505061177d565b5f5b8651811015611774578151831115611579575f9850505050505050505061177d565b61159b87828151811061158e5761158e612854565b6020026020010151611f06565b9550858051906020012084146115bb575f9850505050505050505061177d565b6115d087828151811061144257611442612854565b9450845160110361169f578151830361162e578c805190602001206116018660108151811061109057611090612854565b805190602001200361161e5760019850505050505050505061177d565b5f9850505050505050505061177d565b5f82848151811061164157611641612854565b016020015160f81c90506010811115611665575f995050505050505050505061177d565b61168a868260ff168151811061167d5761167d612854565b6020026020010151611f80565b9450611697600185612aca565b93505061176c565b845160020361161e575f6116c86116c1875f8151811061109057611090612854565b8486611fab565b83519091506116d78286612aca565b03611729578d805190602001206116fa8760018151811061109057611090612854565b8051906020012003611718576001995050505050505050505061177d565b5f995050505050505050505061177d565b805f03611741575f995050505050505050505061177d565b61174b8185612aca565b93506117638660018151811061167d5761167d612854565b945061176c9050565b600101611557565b50505050505050505b949350505050565b5f61109d825f01516003815181106110bd576110bd612854565b5f61109d825f01516004815181106110bd576110bd612854565b5f61109d825f01515f815181106110bd576110bd612854565b606061109d825f015160018151811061109057611090612854565b600480546040517f41539d4a0000000000000000000000000000000000000000000000000000000081529182018490525f91829182916001600160a01b03909116906341539d4a9060240160a060405180830381865afa158015611853573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118779190612add565b50935050925092506118ce828a61188e9190612ab7565b6040805160208082018e90528183018d9052606082018c905260808083018c90528351808403909101815260a090920190925280519101209085876120d3565b61191a5760405162461bcd60e51b815260206004820152601c60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f48454144455200000000604482015260640161060a565b505050505050505050565b6040805160208101909152606081526040518060200160405280611959846020015160018151811061144257611442612854565b905292915050565b604080518082019091525f8082526020820152825180518390811061198857611988612854565b6020026020010151905092915050565b80515f90158015906119ac57508151602110155b6119b4575f80fd5b5f806119bf84612248565b81519193509150602082101561177d5760208290036101000a9004949350505050565b606061109d826020015160028151811061109057611090612854565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611a9a576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260440161060a565b5f546001600160a01b03838116911614611af6575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b038085166004830152909116602482015260440161060a565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390611b54908590612b26565b60405180910390a35f81806020019051810190611b719190612b38565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b158015611c12575f80fd5b505af1158015611c24573d5f803e3d5ffd5b5050505050505050565b6060611c3982611e2f565b611c41575f80fd5b5f611c4b8361228a565b90505f8167ffffffffffffffff811115611c6757611c676124ee565b604051908082528060200260200182016040528015611cab57816020015b604080518082019091525f8082526020820152815260200190600190039081611c855790505b5090505f611cbc856020015161230a565b8560200151611ccb9190612aca565b90505f805b84811015611d2957611ce18361238a565b9150604051806040016040528083815260200184815250848281518110611d0a57611d0a612854565b6020908102919091010152611d1f8284612aca565b9250600101611cd0565b509195945050505050565b8051606090611d41575f80fd5b5f80611d4c84612248565b915091505f8167ffffffffffffffff811115611d6a57611d6a6124ee565b6040519080825280601f01601f191660200182016040528015611d94576020820181803683370190505b50905060208101611da684828561244b565b50949350505050565b5f611dbb600284612b4f565b15611df557601082611dce600286612b62565b81518110611dde57611dde612854565b0160200151611df0919060f81c612b75565b611e25565b601082611e03600286612b62565b81518110611e1357611e13612854565b0160200151611e25919060f81c612b96565b60f81b9392505050565b80515f908103611e4057505f919050565b602082015180515f1a9060c0821015611e5c57505f9392505050565b5060019392505050565b805f03611e7257505050565b60208110611eaa5782518252611e89602084612aca565b9250611e96602083612aca565b9150611ea3602082612ab7565b9050611e72565b805f03611eb657505050565b5f6001611ec4836020612ab7565b611ed090610100612c97565b611eda9190612ab7565b935183518516941916939093179091525050565b80515f90601514611efd575f80fd5b61109d82611998565b60605f825f015167ffffffffffffffff811115611f2557611f256124ee565b6040519080825280601f01601f191660200182016040528015611f4f576020820181803683370190505b50905080515f03611f605792915050565b5f816020019050611f79846020015182865f015161244b565b5092915050565b80515f90602114611f8f575f80fd5b5f8083602001516001611fa29190612aca565b51949350505050565b5f8080611fb7866110ca565b90505f815167ffffffffffffffff811115611fd457611fd46124ee565b6040519080825280601f01601f191660200182016040528015611ffe576020820181803683370190505b509050845b825161200f9087612aca565b8110156120a5575f87828151811061202957612029612854565b01602001517fff00000000000000000000000000000000000000000000000000000000000000169050808361205e8985612ab7565b8151811061206e5761206e612854565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535050600101612003565b5080805190602001208280519060200120036120c457815192506120c8565b5f92505b509095945050505050565b5f602082516120e29190612b4f565b1561212f5760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e677468000000000000000000000000604482015260640161060a565b5f6020835161213e9190612b62565b905061214b816002612c97565b85106121995760405162461bcd60e51b815260206004820152601560248201527f4c65616620696e64657820697320746f6f206269670000000000000000000000604482015260640161060a565b5f8660205b8551811161223a578581015192506121b7600289612b4f565b5f036121ee57604080516020810184905290810184905260600160405160208183030381529060405280519060200120915061221b565b60408051602081018590529081018390526060016040516020818303038152906040528051906020012091505b612226600289612b62565b9750612233602082612aca565b905061219e565b509094149695505050505050565b5f805f612258846020015161230a565b90505f81856020015161226b9190612aca565b90505f82865f015161227d9190612ab7565b9196919550909350505050565b80515f90810361229b57505f919050565b5f806122aa846020015161230a565b84602001516122b99190612aca565b90505f845f015185602001516122cf9190612aca565b90505b80821015612301576122e38261238a565b6122ed9083612aca565b9150826122f981612881565b9350506122d2565b50909392505050565b80515f90811a608081101561232157505f92915050565b60b881108061233c575060c0811080159061233c575060f881105b1561234a5750600192915050565b60c081101561237e5761235f600160b8612ca2565b61236c9060ff1682612ab7565b612377906001612aca565b9392505050565b61235f600160f8612ca2565b80515f908190811a60808110156123a45760019150611f79565b60b88110156123ca576123b8608082612ab7565b6123c3906001612aca565b9150611f79565b60c08110156123f75760b78103600185019450806020036101000a85510460018201810193505050611f79565b60f881101561240b576123b860c082612ab7565b60019390930151602084900360f7016101000a90049092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0192915050565b805f0361245757505050565b6020811061248f578251825261246e602084612aca565b925061247b602083612aca565b9150612488602082612ab7565b9050612457565b80156124a3575f6001611ec4836020612ab7565b505050565b6001600160a01b0381168114610586575f80fd5b5f602082840312156124cc575f80fd5b8135612377816124a8565b5f602082840312156124e7575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612544576125446124ee565b604052919050565b5f67ffffffffffffffff821115612565576125656124ee565b50601f01601f191660200190565b5f82601f830112612582575f80fd5b81356125956125908261254c565b61251b565b8181528460208386010111156125a9575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156125d8575f80fd5b84356125e3816124a8565b935060208501359250604085013567ffffffffffffffff811115612605575f80fd5b61261187828801612573565b949793965093946060013593505050565b5f67ffffffffffffffff82111561263b5761263b6124ee565b5060051b60200190565b5f82601f830112612654575f80fd5b8135602061266461259083612622565b8083825260208201915060208460051b870101935086841115612685575f80fd5b602086015b848110156126a1578035835291830191830161268a565b509695505050505050565b5f805f80608085870312156126bf575f80fd5b843567ffffffffffffffff808211156126d6575f80fd5b818701915087601f8301126126e9575f80fd5b813560206126f961259083612622565b82815260059290921b8401810191818101908b841115612717575f80fd5b948201945b8386101561273e57853561272f816124a8565b8252948201949082019061271c565b98505088013592505080821115612753575f80fd5b61275f88838901612645565b94506040870135915080821115612774575f80fd5b5061261187828801612573565b5f60208284031215612791575f80fd5b813567ffffffffffffffff8111156127a7575f80fd5b61177d84828501612573565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680612827576128276127b3565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611f7957611f796127e0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5f198203612892576128926127e0565b5060010190565b5f815180845260208085019450602084015f5b838110156128d15781516001600160a01b0316875295820195908201906001016128ac565b509495945050505050565b5f815180845260208085019450602084015f5b838110156128d1578151875295820195908201906001016128ef565b606081525f61291d6060830186612899565b828103602084015261292f81866128dc565b915050826040830152949350505050565b5f60208284031215612950575f80fd5b81518015158114612377575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b038086168352808516602084015250606060408301526129b8606083018461295f565b95945050505050565b604081525f6129d36040830185612899565b82810360208401526129b881856128dc565b8381525f83518060208601602085015e60209201918201929092526040019392505050565b5f60208284031215612a1a575f80fd5b815167ffffffffffffffff811115612a30575f80fd5b8201601f81018413612a40575f80fd5b8051612a4e6125908261254c565b818152856020838501011115612a62575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b6001600160a01b0383168152604060208201525f61177d604083018461295f565b808202811582820484141761109d5761109d6127e0565b8181038181111561109d5761109d6127e0565b8082018082111561109d5761109d6127e0565b5f805f805f60a08688031215612af1575f80fd5b855194506020860151935060408601519250606086015191506080860151612b18816124a8565b809150509295509295909350565b602081525f612377602083018461295f565b5f60208284031215612b48575f80fd5b5051919050565b5f82612b5d57612b5d6127b3565b500690565b5f82612b7057612b706127b3565b500490565b5f60ff831680612b8757612b876127b3565b8060ff84160691505092915050565b5f60ff831680612ba857612ba86127b3565b8060ff84160491505092915050565b600181815b80851115612bf157815f1904821115612bd757612bd76127e0565b80851615612be457918102915b93841c9390800290612bbc565b509250929050565b5f82612c075750600161109d565b81612c1357505f61109d565b8160018114612c295760028114612c3357612c4f565b600191505061109d565b60ff841115612c4457612c446127e0565b50506001821b61109d565b5060208310610133831016604e8410600b8410161715612c72575081810a61109d565b612c7c8383612bb7565b805f1904821115612c8f57612c8f6127e0565b029392505050565b5f6123778383612bf9565b60ff828116828216039081111561109d5761109d6127e056fea26469706673582212206ebbbc74d1021fc5996ebcb6a2c396e9ddafb06f617fae0200e53a72111c93cb64736f6c63430008190033", + "bytecode": "0x610140604052348015610010575f80fd5b506040516131dc3803806131dc83398101604081905261002f916101df565b818488888883886001600160a01b038416158061005357506001600160a01b038316155b8061006557506001600160a01b038216155b156100835760405163d92e233d60e01b815260040160405180910390fd5b805f036100a357604051637c946ed760e01b815260040160405180910390fd5b60246100b760026001600160401b03610259565b6100c1919061028a565b6001600160401b031681111561011f578060246100e660026001600160401b03610259565b6100f0919061028a565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e0526101005260018054336001600160a01b0319918216179091556005805482169483169490941790935560048054909316918116919091179091558216158061018d57506001600160a01b038116155b156101ab5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b031661012052506102bd945050505050565b80516001600160a01b03811681146101da575f80fd5b919050565b5f805f805f805f60e0888a0312156101f5575f80fd5b6101fe886101c4565b965061020c602089016101c4565b955061021a604089016101c4565b9450610228606089016101c4565b93506080880151925061023d60a089016101c4565b915061024b60c089016101c4565b905092959891949750929550565b5f6001600160401b038381168061027e57634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b038281168282160390808211156102b657634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161012051612e686103745f395f81816105380152610c7101525f81816104c801528181611cc50152611db101525f818161027c0152818161113601528181611bc80152611c3501525f81816103c10152610d2201525f818161056b0152818161061a01528181610656015281816107be015281816107fa015281816109ef01528181610a2b0152611ded01525f81816101ad01528181610ca00152610d4f0152612e685ff3fe608060405260043610610198575f3560e01c8063ac65ded2116100dc578063de9b771f11610087578063f2541c3511610062578063f2541c351461055a578063f4427c2c1461058d578063f953cec7146105a2578063f9fc3c21146105c1575f80fd5b8063de9b771f146104ea578063e309fb7714610509578063e619870514610527575f80fd5b8063bde52661116100b7578063bde5266114610485578063c0857ba014610498578063c23cc3ff146104b7575f80fd5b8063ac65ded214610434578063aea4e49e14610453578063b2267a7b14610472575f80fd5b806354e4bbf4116101475780636143fe93116101225780636143fe93146103b05780638da5cb5b146103e3578063972c492814610402578063a8b2ae0214610421575f80fd5b806354e4bbf41461034d5780635bc105c01461036e578063607f2d4214610382575f80fd5b80633d1f8679116101775780633d1f86791461026b5780634c1c6cbf1461029e57806354d20cc2146102b4575f80fd5b806231d1151461019c57806307d9c534146101ec5780630e387de61461022a575b5f80fd5b3480156101a7575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101f7575f80fd5b5061021a61020636600461269c565b60036020525f908152604090205460ff1681565b60405190151581526020016101e3565b348015610235575f80fd5b5061025d7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681565b6040519081526020016101e3565b348015610276575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102a9575f80fd5b5061025d620493e081565b3480156102bf575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261031c7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101e3565b348015610358575f80fd5b5061036c6103673660046126c7565b6105d7565b005b348015610379575f80fd5b5061025d6105e3565b34801561038d575f80fd5b5061021a61039c36600461269c565b60076020525f908152604090205460ff1681565b3480156103bb575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ee575f80fd5b506001546101cf906001600160a01b031681565b34801561040d575f80fd5b506006546101cf906001600160a01b031681565b34801561042c575f80fd5b50601261025d565b34801561043f575f80fd5b5061036c61044e36600461269c565b61060f565b34801561045e575f80fd5b5061036c61046d3660046126c7565b6106da565b61036c6104803660046127a0565b6107b3565b61036c610493366004612887565b6109e4565b3480156104a3575f80fd5b506005546101cf906001600160a01b031681565b3480156104c2575f80fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f5575f80fd5b506004546101cf906001600160a01b031681565b348015610514575f80fd5b505f546101cf906001600160a01b031681565b348015610532575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610565575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610598575f80fd5b5061025d60025481565b3480156105ad575f80fd5b5061036c6105bc36600461295c565b610b4f565b3480156105cc575f80fd5b5061025d621e848081565b6105e0816106da565b50565b60246105f8600267ffffffffffffffff6129b6565b61060291906129dc565b67ffffffffffffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461068e5760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b5f8181526003602052604090205460ff16156106c0576040516356bc34a160e01b815260048101829052602401610685565b5f908152600360205260409020805460ff19166001179055565b6001546001600160a01b0316331461071a5760015460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610685565b6001600160a01b0381166107415760405163d92e233d60e01b815260040160405180910390fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831617905561077d81610b68565b6040516001600160a01b038216907fa9bdbd6b528cbfc0588f52c3a4ec11bc3f60d0113e60e778f5c42ff7599eef9c905f90a250565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461082d5760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610685565b6040805160018082528183019092525f916020808301908036833701905050905084815f81518110610861576108616129fd565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f815181106108b0576108b06129fd565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f8061090486868a8a87610c39565b9092509050801561098a57604051329082905f81818185875af1925050503d805f811461094c576040519150601f19603f3d011682016040523d82523d5f602084013e610951565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610995846001612a11565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b6040516109d093929190612a96565b60405180910390a350505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a5e5760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610685565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f80610aa68888888887610c39565b90925090508015610af757604051329082905f81818185875af1925050503d805f8114610aee576040519150601f19603f3d011682016040523d82523d5f602084013e610af3565b606091505b5050505b610b02846001612a11565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a89604051610b3d93929190612a96565b60405180910390a35050505050505050565b5f610b5982610e09565b9050610b648161112e565b5050565b6001546001600160a01b03163314610ba85760015460405163521eb56d60e11b81526001600160a01b039091166004820152336024820152604401610685565b6001600160a01b038116610bcf5760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f808315610dcb576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610ce6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0a9190612acb565b505f5460408051602081018790526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169363e3dec8fb939116917f000000000000000000000000000000000000000000000000000000000000000091016040516020818303038152906040526040518463ffffffff1660e01b8152600401610d9d93929190612b18565b5f604051808303815f87803b158015610db4575f80fd5b505af1158015610dc6573d5f803e3d5ffd5b505050505b5f878785604051602001610de193929190612a96565b6040516020818303038152906040529050610dfb81611165565b509196349650945050505050565b60605f610e15836111e2565b90505f610e218261123f565b90505f610e2d8361126d565b90505f81610e3a84611294565b610e4386611470565b604051602001610e5593929190612b4c565b60408051601f1981840301815291815281516020928301205f818152600790935291205490915060ff1615610ef15760405162461bcd60e51b8152602060048201526024808201527f4678526f6f7454756e6e656c3a20455849545f414c52454144595f50524f434560448201527f53534544000000000000000000000000000000000000000000000000000000006064820152608401610685565b5f818152600760205260408120805460ff19166001179055610f128561148a565b90505f610f1e826115ce565b9050610f298161165b565b6006546001600160a01b03908116911614610fac5760405162461bcd60e51b815260206004820152602560248201527f4678526f6f7454756e6e656c3a20494e56414c49445f46585f4348494c445f5460448201527f554e4e454c0000000000000000000000000000000000000000000000000000006064820152608401610685565b5f610fb687611682565b9050610fd6610fc6846020015190565b87610fd08a61169c565b846116b7565b6110485760405162461bcd60e51b815260206004820152602360248201527f4678526f6f7454756e6e656c3a20494e56414c49445f524543454950545f505260448201527f4f4f4600000000000000000000000000000000000000000000000000000000006064820152608401610685565b611076856110558961194f565b61105e8a611969565b846110688c611983565b6110718d61199c565b6119b7565b5f61108083611aed565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b0366110b56110b0835f611b29565b611b60565b146111025760405162461bcd60e51b815260206004820152601f60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f5349474e4154555245006044820152606401610685565b5f61110c84611baa565b80602001905181019061111f9190612b71565b9b9a5050505050505050505050565b5f546105e0907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031683611bc6565b600480546006546040517fb47204770000000000000000000000000000000000000000000000000000000081526001600160a01b039283169363b4720477936111b2931691869101612be6565b5f604051808303815f87803b1580156111c9575f80fd5b505af11580156111db573d5f803e3d5ffd5b5050505050565b6040805160208101909152606081525f61122a611225846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b611e40565b60408051602081019091529081529392505050565b6060611267825f015160088151811061125a5761125a6129fd565b6020026020010151611f46565b92915050565b5f611267825f0151600281518110611287576112876129fd565b6020026020010151611b60565b60408051602081019091525f815281516060919015611267575f806112b95f86611fc1565b60f81c905060018114806112d057508060ff166003145b1561138d576001855160026112e59190612c07565b6112ef9190612c1e565b67ffffffffffffffff811115611307576113076126e2565b6040519080825280601f01601f191660200182016040528015611331576020820181803683370190505b5092505f611340600187611fc1565b905080845f81518110611355576113556129fd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060019250506113f0565b60028551600261139d9190612c07565b6113a79190612c1e565b67ffffffffffffffff8111156113bf576113bf6126e2565b6040519080825280601f01601f1916602001820160405280156113e9576020820181803683370190505b5092505f91505b60ff82165b83518110156114675761141f61140e60ff851683612c1e565b611419906002612a11565b87611fc1565b848281518110611431576114316129fd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016113f5565b50505092915050565b5f611267825f0151600981518110611287576112876129fd565b6114ad604051806060016040528060608152602001606081526020015f81525090565b6114c6825f015160068151811061125a5761125a6129fd565b60208281018290526040805180820182525f80825290830152805180820190915282518152918101908201526114fb81612041565b156115105761150981611e40565b82526115ba565b602082015180515f9061152590600190612c1e565b67ffffffffffffffff81111561153d5761153d6126e2565b6040519080825280601f01601f191660200182016040528015611567576020820181803683370190505b5090505f8083602101915082602001905061158482828551612078565b6040805180820182525f808252602091820152815180830190925284518252808501908201526115b390611e40565b8652505050505b6115c383611470565b604083015250919050565b604080516080810182525f918101828152606080830193909352815260208101919091525f611619835f015160038151811061160c5761160c6129fd565b6020026020010151611e40565b83604001518151811061162e5761162e6129fd565b60200260200101519050604051806040016040528082815260200161165283611e40565b90529392505050565b5f61126782602001515f81518110611675576116756129fd565b6020026020010151612100565b5f611267825f0151600581518110611287576112876129fd565b6060611267825f015160078151811061125a5761125a6129fd565b5f806116e9846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b90505f6116f582611e40565b9050606080855f806117068b611294565b905080515f0361171f575f975050505050505050611947565b5f5b865181101561193e578151831115611743575f98505050505050505050611947565b611765878281518110611758576117586129fd565b6020026020010151612118565b955085805190602001208414611785575f98505050505050505050611947565b61179a87828151811061160c5761160c6129fd565b9450845160110361186957815183036117f8578c805190602001206117cb8660108151811061125a5761125a6129fd565b80519060200120036117e857600198505050505050505050611947565b5f98505050505050505050611947565b5f82848151811061180b5761180b6129fd565b016020015160f81c9050601081111561182f575f9950505050505050505050611947565b611854868260ff1681518110611847576118476129fd565b6020026020010151612192565b9450611861600185612a11565b935050611936565b84516002036117e8575f61189261188b875f8151811061125a5761125a6129fd565b84866121bd565b83519091506118a18286612a11565b036118f3578d805190602001206118c48760018151811061125a5761125a6129fd565b80519060200120036118e25760019950505050505050505050611947565b5f9950505050505050505050611947565b805f0361190b575f9950505050505050505050611947565b6119158185612a11565b935061192d86600181518110611847576118476129fd565b94506119369050565b600101611721565b50505050505050505b949350505050565b5f611267825f0151600381518110611287576112876129fd565b5f611267825f0151600481518110611287576112876129fd565b5f611267825f01515f81518110611287576112876129fd565b6060611267825f015160018151811061125a5761125a6129fd565b6005546040517f41539d4a000000000000000000000000000000000000000000000000000000008152600481018490525f91829182916001600160a01b0316906341539d4a9060240160a060405180830381865afa158015611a1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3f9190612c31565b5093505092509250611a96828a611a569190612c1e565b6040805160208082018e90528183018d9052606082018c905260808083018c90528351808403909101815260a090920190925280519101209085876122e5565b611ae25760405162461bcd60e51b815260206004820152601c60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f484541444552000000006044820152606401610685565b505050505050505050565b6040805160208101909152606081526040518060200160405280611b21846020015160018151811061160c5761160c6129fd565b905292915050565b604080518082019091525f80825260208201528251805183908110611b5057611b506129fd565b6020026020010151905092915050565b80515f9015801590611b7457508151602110155b611b7c575f80fd5b5f80611b878461245a565b8151919350915060208210156119475760208290036101000a9004949350505050565b6060611267826020015160028151811061125a5761125a6129fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611c62576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610685565b5f546001600160a01b03838116911614611cbe575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610685565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390611d1c908590612c7a565b60405180910390a35f8082806020019051810190611d3a9190612c8c565b5f81815260036020526040902054919350915060ff1615611d71576040516356bc34a160e01b815260048101829052602401610685565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b158015611e2e575f80fd5b505af1158015611ae2573d5f803e3d5ffd5b6060611e4b82612041565b611e53575f80fd5b5f611e5d8361249c565b90505f8167ffffffffffffffff811115611e7957611e796126e2565b604051908082528060200260200182016040528015611ebd57816020015b604080518082019091525f8082526020820152815260200190600190039081611e975790505b5090505f611ece856020015161251c565b8560200151611edd9190612a11565b90505f805b84811015611f3b57611ef38361259c565b9150604051806040016040528083815260200184815250848281518110611f1c57611f1c6129fd565b6020908102919091010152611f318284612a11565b9250600101611ee2565b509195945050505050565b8051606090611f53575f80fd5b5f80611f5e8461245a565b915091505f8167ffffffffffffffff811115611f7c57611f7c6126e2565b6040519080825280601f01601f191660200182016040528015611fa6576020820181803683370190505b50905060208101611fb884828561263f565b50949350505050565b5f611fcd600284612cae565b1561200757601082611fe0600286612cc1565b81518110611ff057611ff06129fd565b0160200151612002919060f81c612cd4565b612037565b601082612015600286612cc1565b81518110612025576120256129fd565b0160200151612037919060f81c612cf5565b60f81b9392505050565b80515f90810361205257505f919050565b602082015180515f1a9060c082101561206e57505f9392505050565b5060019392505050565b805f0361208457505050565b602081106120bc578251825261209b602084612a11565b92506120a8602083612a11565b91506120b5602082612c1e565b9050612084565b805f036120c857505050565b5f60016120d6836020612c1e565b6120e290610100612df6565b6120ec9190612c1e565b935183518516941916939093179091525050565b80515f9060151461210f575f80fd5b61126782611b60565b60605f825f015167ffffffffffffffff811115612137576121376126e2565b6040519080825280601f01601f191660200182016040528015612161576020820181803683370190505b50905080515f036121725792915050565b5f81602001905061218b846020015182865f015161263f565b5092915050565b80515f906021146121a1575f80fd5b5f80836020015160016121b49190612a11565b51949350505050565b5f80806121c986611294565b90505f815167ffffffffffffffff8111156121e6576121e66126e2565b6040519080825280601f01601f191660200182016040528015612210576020820181803683370190505b509050845b82516122219087612a11565b8110156122b7575f87828151811061223b5761223b6129fd565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016905080836122708985612c1e565b81518110612280576122806129fd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535050600101612215565b5080805190602001208280519060200120036122d657815192506122da565b5f92505b509095945050505050565b5f602082516122f49190612cae565b156123415760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e6774680000000000000000000000006044820152606401610685565b5f602083516123509190612cc1565b905061235d816002612df6565b85106123ab5760405162461bcd60e51b815260206004820152601560248201527f4c65616620696e64657820697320746f6f2062696700000000000000000000006044820152606401610685565b5f8660205b8551811161244c578581015192506123c9600289612cae565b5f0361240057604080516020810184905290810184905260600160405160208183030381529060405280519060200120915061242d565b60408051602081018590529081018390526060016040516020818303038152906040528051906020012091505b612438600289612cc1565b9750612445602082612a11565b90506123b0565b509094149695505050505050565b5f805f61246a846020015161251c565b90505f81856020015161247d9190612a11565b90505f82865f015161248f9190612c1e565b9196919550909350505050565b80515f9081036124ad57505f919050565b5f806124bc846020015161251c565b84602001516124cb9190612a11565b90505f845f015185602001516124e19190612a11565b90505b80821015612513576124f58261259c565b6124ff9083612a11565b91508261250b81612e01565b9350506124e4565b50909392505050565b80515f90811a608081101561253357505f92915050565b60b881108061254e575060c0811080159061254e575060f881105b1561255c5750600192915050565b60c081101561259057612571600160b8612e19565b61257e9060ff1682612c1e565b612589906001612a11565b9392505050565b612571600160f8612e19565b80515f908190811a60808110156125b6576001915061218b565b60b88110156125dc576125ca608082612c1e565b6125d5906001612a11565b915061218b565b60c08110156126095760b78103600185019450806020036101000a8551046001820181019350505061218b565b60f881101561261d576125ca60c082612c1e565b60019390930151602084900360f7016101000a900490920160f5190192915050565b805f0361264b57505050565b602081106126835782518252612662602084612a11565b925061266f602083612a11565b915061267c602082612c1e565b905061264b565b8015612697575f60016120d6836020612c1e565b505050565b5f602082840312156126ac575f80fd5b5035919050565b6001600160a01b03811681146105e0575f80fd5b5f602082840312156126d7575f80fd5b8135612589816126b3565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561271f5761271f6126e2565b604052919050565b5f67ffffffffffffffff821115612740576127406126e2565b50601f01601f191660200190565b5f82601f83011261275d575f80fd5b813561277061276b82612727565b6126f6565b818152846020838601011115612784575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156127b3575f80fd5b84356127be816126b3565b935060208501359250604085013567ffffffffffffffff8111156127e0575f80fd5b6127ec8782880161274e565b949793965093946060013593505050565b5f67ffffffffffffffff821115612816576128166126e2565b5060051b60200190565b5f82601f83011261282f575f80fd5b8135602061283f61276b836127fd565b8083825260208201915060208460051b870101935086841115612860575f80fd5b602086015b8481101561287c5780358352918301918301612865565b509695505050505050565b5f805f806080858703121561289a575f80fd5b843567ffffffffffffffff808211156128b1575f80fd5b818701915087601f8301126128c4575f80fd5b813560206128d461276b836127fd565b82815260059290921b8401810191818101908b8411156128f2575f80fd5b948201945b8386101561291957853561290a816126b3565b825294820194908201906128f7565b9850508801359250508082111561292e575f80fd5b61293a88838901612820565b9450604087013591508082111561294f575f80fd5b506127ec8782880161274e565b5f6020828403121561296c575f80fd5b813567ffffffffffffffff811115612982575f80fd5b6119478482850161274e565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff808416806129d0576129d061298e565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561218b5761218b6129a2565b634e487b7160e01b5f52603260045260245ffd5b80820180821115611267576112676129a2565b5f815180845260208085019450602084015f5b83811015612a5c5781516001600160a01b031687529582019590820190600101612a37565b509495945050505050565b5f815180845260208085019450602084015f5b83811015612a5c57815187529582019590820190600101612a7a565b606081525f612aa86060830186612a24565b8281036020840152612aba8186612a67565b915050826040830152949350505050565b5f60208284031215612adb575f80fd5b81518015158114612589575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b03808616835280851660208401525060606040830152612b436060830184612aea565b95945050505050565b8381525f83518060208601602085015e60209201918201929092526040019392505050565b5f60208284031215612b81575f80fd5b815167ffffffffffffffff811115612b97575f80fd5b8201601f81018413612ba7575f80fd5b8051612bb561276b82612727565b818152856020838501011115612bc9575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b6001600160a01b0383168152604060208201525f6119476040830184612aea565b8082028115828204841417611267576112676129a2565b81810381811115611267576112676129a2565b5f805f805f60a08688031215612c45575f80fd5b855194506020860151935060408601519250606086015191506080860151612c6c816126b3565b809150509295509295909350565b602081525f6125896020830184612aea565b5f8060408385031215612c9d575f80fd5b505080516020909101519092909150565b5f82612cbc57612cbc61298e565b500690565b5f82612ccf57612ccf61298e565b500490565b5f60ff831680612ce657612ce661298e565b8060ff84160691505092915050565b5f60ff831680612d0757612d0761298e565b8060ff84160491505092915050565b600181815b80851115612d5057815f1904821115612d3657612d366129a2565b80851615612d4357918102915b93841c9390800290612d1b565b509250929050565b5f82612d6657506001611267565b81612d7257505f611267565b8160018114612d885760028114612d9257612dae565b6001915050611267565b60ff841115612da357612da36129a2565b50506001821b611267565b5060208310610133831016604e8410600b8410161715612dd1575081810a611267565b612ddb8383612d16565b805f1904821115612dee57612dee6129a2565b029392505050565b5f6125898383612d58565b5f60018201612e1257612e126129a2565b5060010190565b60ff8281168282160390811115611267576112676129a256fea2646970667358221220774d582b0ef00b46367ce356a5feb1326ad8dea6cbb71ce5849c97caf11bb66564736f6c63430008190033", + "deployedBytecode": "0x608060405260043610610198575f3560e01c8063ac65ded2116100dc578063de9b771f11610087578063f2541c3511610062578063f2541c351461055a578063f4427c2c1461058d578063f953cec7146105a2578063f9fc3c21146105c1575f80fd5b8063de9b771f146104ea578063e309fb7714610509578063e619870514610527575f80fd5b8063bde52661116100b7578063bde5266114610485578063c0857ba014610498578063c23cc3ff146104b7575f80fd5b8063ac65ded214610434578063aea4e49e14610453578063b2267a7b14610472575f80fd5b806354e4bbf4116101475780636143fe93116101225780636143fe93146103b05780638da5cb5b146103e3578063972c492814610402578063a8b2ae0214610421575f80fd5b806354e4bbf41461034d5780635bc105c01461036e578063607f2d4214610382575f80fd5b80633d1f8679116101775780633d1f86791461026b5780634c1c6cbf1461029e57806354d20cc2146102b4575f80fd5b806231d1151461019c57806307d9c534146101ec5780630e387de61461022a575b5f80fd5b3480156101a7575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101f7575f80fd5b5061021a61020636600461269c565b60036020525f908152604090205460ff1681565b60405190151581526020016101e3565b348015610235575f80fd5b5061025d7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681565b6040519081526020016101e3565b348015610276575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102a9575f80fd5b5061025d620493e081565b3480156102bf575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261031c7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101e3565b348015610358575f80fd5b5061036c6103673660046126c7565b6105d7565b005b348015610379575f80fd5b5061025d6105e3565b34801561038d575f80fd5b5061021a61039c36600461269c565b60076020525f908152604090205460ff1681565b3480156103bb575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ee575f80fd5b506001546101cf906001600160a01b031681565b34801561040d575f80fd5b506006546101cf906001600160a01b031681565b34801561042c575f80fd5b50601261025d565b34801561043f575f80fd5b5061036c61044e36600461269c565b61060f565b34801561045e575f80fd5b5061036c61046d3660046126c7565b6106da565b61036c6104803660046127a0565b6107b3565b61036c610493366004612887565b6109e4565b3480156104a3575f80fd5b506005546101cf906001600160a01b031681565b3480156104c2575f80fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f5575f80fd5b506004546101cf906001600160a01b031681565b348015610514575f80fd5b505f546101cf906001600160a01b031681565b348015610532575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610565575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610598575f80fd5b5061025d60025481565b3480156105ad575f80fd5b5061036c6105bc36600461295c565b610b4f565b3480156105cc575f80fd5b5061025d621e848081565b6105e0816106da565b50565b60246105f8600267ffffffffffffffff6129b6565b61060291906129dc565b67ffffffffffffffff1681565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461068e5760405163312d21ff60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201523360248201526044015b60405180910390fd5b5f8181526003602052604090205460ff16156106c0576040516356bc34a160e01b815260048101829052602401610685565b5f908152600360205260409020805460ff19166001179055565b6001546001600160a01b0316331461071a5760015460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610685565b6001600160a01b0381166107415760405163d92e233d60e01b815260040160405180910390fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831617905561077d81610b68565b6040516001600160a01b038216907fa9bdbd6b528cbfc0588f52c3a4ec11bc3f60d0113e60e778f5c42ff7599eef9c905f90a250565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461082d5760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610685565b6040805160018082528183019092525f916020808301908036833701905050905084815f81518110610861576108616129fd565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f815181106108b0576108b06129fd565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f8061090486868a8a87610c39565b9092509050801561098a57604051329082905f81818185875af1925050503d805f811461094c576040519150601f19603f3d011682016040523d82523d5f602084013e610951565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610995846001612a11565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b6040516109d093929190612a96565b60405180910390a350505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a5e5760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610685565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f80610aa68888888887610c39565b90925090508015610af757604051329082905f81818185875af1925050503d805f8114610aee576040519150601f19603f3d011682016040523d82523d5f602084013e610af3565b606091505b5050505b610b02846001612a11565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a89604051610b3d93929190612a96565b60405180910390a35050505050505050565b5f610b5982610e09565b9050610b648161112e565b5050565b6001546001600160a01b03163314610ba85760015460405163521eb56d60e11b81526001600160a01b039091166004820152336024820152604401610685565b6001600160a01b038116610bcf5760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f808315610dcb576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610ce6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0a9190612acb565b505f5460408051602081018790526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169363e3dec8fb939116917f000000000000000000000000000000000000000000000000000000000000000091016040516020818303038152906040526040518463ffffffff1660e01b8152600401610d9d93929190612b18565b5f604051808303815f87803b158015610db4575f80fd5b505af1158015610dc6573d5f803e3d5ffd5b505050505b5f878785604051602001610de193929190612a96565b6040516020818303038152906040529050610dfb81611165565b509196349650945050505050565b60605f610e15836111e2565b90505f610e218261123f565b90505f610e2d8361126d565b90505f81610e3a84611294565b610e4386611470565b604051602001610e5593929190612b4c565b60408051601f1981840301815291815281516020928301205f818152600790935291205490915060ff1615610ef15760405162461bcd60e51b8152602060048201526024808201527f4678526f6f7454756e6e656c3a20455849545f414c52454144595f50524f434560448201527f53534544000000000000000000000000000000000000000000000000000000006064820152608401610685565b5f818152600760205260408120805460ff19166001179055610f128561148a565b90505f610f1e826115ce565b9050610f298161165b565b6006546001600160a01b03908116911614610fac5760405162461bcd60e51b815260206004820152602560248201527f4678526f6f7454756e6e656c3a20494e56414c49445f46585f4348494c445f5460448201527f554e4e454c0000000000000000000000000000000000000000000000000000006064820152608401610685565b5f610fb687611682565b9050610fd6610fc6846020015190565b87610fd08a61169c565b846116b7565b6110485760405162461bcd60e51b815260206004820152602360248201527f4678526f6f7454756e6e656c3a20494e56414c49445f524543454950545f505260448201527f4f4f4600000000000000000000000000000000000000000000000000000000006064820152608401610685565b611076856110558961194f565b61105e8a611969565b846110688c611983565b6110718d61199c565b6119b7565b5f61108083611aed565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b0366110b56110b0835f611b29565b611b60565b146111025760405162461bcd60e51b815260206004820152601f60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f5349474e4154555245006044820152606401610685565b5f61110c84611baa565b80602001905181019061111f9190612b71565b9b9a5050505050505050505050565b5f546105e0907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b031683611bc6565b600480546006546040517fb47204770000000000000000000000000000000000000000000000000000000081526001600160a01b039283169363b4720477936111b2931691869101612be6565b5f604051808303815f87803b1580156111c9575f80fd5b505af11580156111db573d5f803e3d5ffd5b5050505050565b6040805160208101909152606081525f61122a611225846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b611e40565b60408051602081019091529081529392505050565b6060611267825f015160088151811061125a5761125a6129fd565b6020026020010151611f46565b92915050565b5f611267825f0151600281518110611287576112876129fd565b6020026020010151611b60565b60408051602081019091525f815281516060919015611267575f806112b95f86611fc1565b60f81c905060018114806112d057508060ff166003145b1561138d576001855160026112e59190612c07565b6112ef9190612c1e565b67ffffffffffffffff811115611307576113076126e2565b6040519080825280601f01601f191660200182016040528015611331576020820181803683370190505b5092505f611340600187611fc1565b905080845f81518110611355576113556129fd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060019250506113f0565b60028551600261139d9190612c07565b6113a79190612c1e565b67ffffffffffffffff8111156113bf576113bf6126e2565b6040519080825280601f01601f1916602001820160405280156113e9576020820181803683370190505b5092505f91505b60ff82165b83518110156114675761141f61140e60ff851683612c1e565b611419906002612a11565b87611fc1565b848281518110611431576114316129fd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053506001016113f5565b50505092915050565b5f611267825f0151600981518110611287576112876129fd565b6114ad604051806060016040528060608152602001606081526020015f81525090565b6114c6825f015160068151811061125a5761125a6129fd565b60208281018290526040805180820182525f80825290830152805180820190915282518152918101908201526114fb81612041565b156115105761150981611e40565b82526115ba565b602082015180515f9061152590600190612c1e565b67ffffffffffffffff81111561153d5761153d6126e2565b6040519080825280601f01601f191660200182016040528015611567576020820181803683370190505b5090505f8083602101915082602001905061158482828551612078565b6040805180820182525f808252602091820152815180830190925284518252808501908201526115b390611e40565b8652505050505b6115c383611470565b604083015250919050565b604080516080810182525f918101828152606080830193909352815260208101919091525f611619835f015160038151811061160c5761160c6129fd565b6020026020010151611e40565b83604001518151811061162e5761162e6129fd565b60200260200101519050604051806040016040528082815260200161165283611e40565b90529392505050565b5f61126782602001515f81518110611675576116756129fd565b6020026020010151612100565b5f611267825f0151600581518110611287576112876129fd565b6060611267825f015160078151811061125a5761125a6129fd565b5f806116e9846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b90505f6116f582611e40565b9050606080855f806117068b611294565b905080515f0361171f575f975050505050505050611947565b5f5b865181101561193e578151831115611743575f98505050505050505050611947565b611765878281518110611758576117586129fd565b6020026020010151612118565b955085805190602001208414611785575f98505050505050505050611947565b61179a87828151811061160c5761160c6129fd565b9450845160110361186957815183036117f8578c805190602001206117cb8660108151811061125a5761125a6129fd565b80519060200120036117e857600198505050505050505050611947565b5f98505050505050505050611947565b5f82848151811061180b5761180b6129fd565b016020015160f81c9050601081111561182f575f9950505050505050505050611947565b611854868260ff1681518110611847576118476129fd565b6020026020010151612192565b9450611861600185612a11565b935050611936565b84516002036117e8575f61189261188b875f8151811061125a5761125a6129fd565b84866121bd565b83519091506118a18286612a11565b036118f3578d805190602001206118c48760018151811061125a5761125a6129fd565b80519060200120036118e25760019950505050505050505050611947565b5f9950505050505050505050611947565b805f0361190b575f9950505050505050505050611947565b6119158185612a11565b935061192d86600181518110611847576118476129fd565b94506119369050565b600101611721565b50505050505050505b949350505050565b5f611267825f0151600381518110611287576112876129fd565b5f611267825f0151600481518110611287576112876129fd565b5f611267825f01515f81518110611287576112876129fd565b6060611267825f015160018151811061125a5761125a6129fd565b6005546040517f41539d4a000000000000000000000000000000000000000000000000000000008152600481018490525f91829182916001600160a01b0316906341539d4a9060240160a060405180830381865afa158015611a1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3f9190612c31565b5093505092509250611a96828a611a569190612c1e565b6040805160208082018e90528183018d9052606082018c905260808083018c90528351808403909101815260a090920190925280519101209085876122e5565b611ae25760405162461bcd60e51b815260206004820152601c60248201527f4678526f6f7454756e6e656c3a20494e56414c49445f484541444552000000006044820152606401610685565b505050505050505050565b6040805160208101909152606081526040518060200160405280611b21846020015160018151811061160c5761160c6129fd565b905292915050565b604080518082019091525f80825260208201528251805183908110611b5057611b506129fd565b6020026020010151905092915050565b80515f9015801590611b7457508151602110155b611b7c575f80fd5b5f80611b878461245a565b8151919350915060208210156119475760208290036101000a9004949350505050565b6060611267826020015160028151811061125a5761125a6129fd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611c62576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610685565b5f546001600160a01b03838116911614611cbe575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610685565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390611d1c908590612c7a565b60405180910390a35f8082806020019051810190611d3a9190612c8c565b5f81815260036020526040902054919350915060ff1615611d71576040516356bc34a160e01b815260048101829052602401610685565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b158015611e2e575f80fd5b505af1158015611ae2573d5f803e3d5ffd5b6060611e4b82612041565b611e53575f80fd5b5f611e5d8361249c565b90505f8167ffffffffffffffff811115611e7957611e796126e2565b604051908082528060200260200182016040528015611ebd57816020015b604080518082019091525f8082526020820152815260200190600190039081611e975790505b5090505f611ece856020015161251c565b8560200151611edd9190612a11565b90505f805b84811015611f3b57611ef38361259c565b9150604051806040016040528083815260200184815250848281518110611f1c57611f1c6129fd565b6020908102919091010152611f318284612a11565b9250600101611ee2565b509195945050505050565b8051606090611f53575f80fd5b5f80611f5e8461245a565b915091505f8167ffffffffffffffff811115611f7c57611f7c6126e2565b6040519080825280601f01601f191660200182016040528015611fa6576020820181803683370190505b50905060208101611fb884828561263f565b50949350505050565b5f611fcd600284612cae565b1561200757601082611fe0600286612cc1565b81518110611ff057611ff06129fd565b0160200151612002919060f81c612cd4565b612037565b601082612015600286612cc1565b81518110612025576120256129fd565b0160200151612037919060f81c612cf5565b60f81b9392505050565b80515f90810361205257505f919050565b602082015180515f1a9060c082101561206e57505f9392505050565b5060019392505050565b805f0361208457505050565b602081106120bc578251825261209b602084612a11565b92506120a8602083612a11565b91506120b5602082612c1e565b9050612084565b805f036120c857505050565b5f60016120d6836020612c1e565b6120e290610100612df6565b6120ec9190612c1e565b935183518516941916939093179091525050565b80515f9060151461210f575f80fd5b61126782611b60565b60605f825f015167ffffffffffffffff811115612137576121376126e2565b6040519080825280601f01601f191660200182016040528015612161576020820181803683370190505b50905080515f036121725792915050565b5f81602001905061218b846020015182865f015161263f565b5092915050565b80515f906021146121a1575f80fd5b5f80836020015160016121b49190612a11565b51949350505050565b5f80806121c986611294565b90505f815167ffffffffffffffff8111156121e6576121e66126e2565b6040519080825280601f01601f191660200182016040528015612210576020820181803683370190505b509050845b82516122219087612a11565b8110156122b7575f87828151811061223b5761223b6129fd565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016905080836122708985612c1e565b81518110612280576122806129fd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535050600101612215565b5080805190602001208280519060200120036122d657815192506122da565b5f92505b509095945050505050565b5f602082516122f49190612cae565b156123415760405162461bcd60e51b815260206004820152601460248201527f496e76616c69642070726f6f66206c656e6774680000000000000000000000006044820152606401610685565b5f602083516123509190612cc1565b905061235d816002612df6565b85106123ab5760405162461bcd60e51b815260206004820152601560248201527f4c65616620696e64657820697320746f6f2062696700000000000000000000006044820152606401610685565b5f8660205b8551811161244c578581015192506123c9600289612cae565b5f0361240057604080516020810184905290810184905260600160405160208183030381529060405280519060200120915061242d565b60408051602081018590529081018390526060016040516020818303038152906040528051906020012091505b612438600289612cc1565b9750612445602082612a11565b90506123b0565b509094149695505050505050565b5f805f61246a846020015161251c565b90505f81856020015161247d9190612a11565b90505f82865f015161248f9190612c1e565b9196919550909350505050565b80515f9081036124ad57505f919050565b5f806124bc846020015161251c565b84602001516124cb9190612a11565b90505f845f015185602001516124e19190612a11565b90505b80821015612513576124f58261259c565b6124ff9083612a11565b91508261250b81612e01565b9350506124e4565b50909392505050565b80515f90811a608081101561253357505f92915050565b60b881108061254e575060c0811080159061254e575060f881105b1561255c5750600192915050565b60c081101561259057612571600160b8612e19565b61257e9060ff1682612c1e565b612589906001612a11565b9392505050565b612571600160f8612e19565b80515f908190811a60808110156125b6576001915061218b565b60b88110156125dc576125ca608082612c1e565b6125d5906001612a11565b915061218b565b60c08110156126095760b78103600185019450806020036101000a8551046001820181019350505061218b565b60f881101561261d576125ca60c082612c1e565b60019390930151602084900360f7016101000a900490920160f5190192915050565b805f0361264b57505050565b602081106126835782518252612662602084612a11565b925061266f602083612a11565b915061267c602082612c1e565b905061264b565b8015612697575f60016120d6836020612c1e565b505050565b5f602082840312156126ac575f80fd5b5035919050565b6001600160a01b03811681146105e0575f80fd5b5f602082840312156126d7575f80fd5b8135612589816126b3565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561271f5761271f6126e2565b604052919050565b5f67ffffffffffffffff821115612740576127406126e2565b50601f01601f191660200190565b5f82601f83011261275d575f80fd5b813561277061276b82612727565b6126f6565b818152846020838601011115612784575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156127b3575f80fd5b84356127be816126b3565b935060208501359250604085013567ffffffffffffffff8111156127e0575f80fd5b6127ec8782880161274e565b949793965093946060013593505050565b5f67ffffffffffffffff821115612816576128166126e2565b5060051b60200190565b5f82601f83011261282f575f80fd5b8135602061283f61276b836127fd565b8083825260208201915060208460051b870101935086841115612860575f80fd5b602086015b8481101561287c5780358352918301918301612865565b509695505050505050565b5f805f806080858703121561289a575f80fd5b843567ffffffffffffffff808211156128b1575f80fd5b818701915087601f8301126128c4575f80fd5b813560206128d461276b836127fd565b82815260059290921b8401810191818101908b8411156128f2575f80fd5b948201945b8386101561291957853561290a816126b3565b825294820194908201906128f7565b9850508801359250508082111561292e575f80fd5b61293a88838901612820565b9450604087013591508082111561294f575f80fd5b506127ec8782880161274e565b5f6020828403121561296c575f80fd5b813567ffffffffffffffff811115612982575f80fd5b6119478482850161274e565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff808416806129d0576129d061298e565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561218b5761218b6129a2565b634e487b7160e01b5f52603260045260245ffd5b80820180821115611267576112676129a2565b5f815180845260208085019450602084015f5b83811015612a5c5781516001600160a01b031687529582019590820190600101612a37565b509495945050505050565b5f815180845260208085019450602084015f5b83811015612a5c57815187529582019590820190600101612a7a565b606081525f612aa86060830186612a24565b8281036020840152612aba8186612a67565b915050826040830152949350505050565b5f60208284031215612adb575f80fd5b81518015158114612589575f80fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6001600160a01b03808616835280851660208401525060606040830152612b436060830184612aea565b95945050505050565b8381525f83518060208601602085015e60209201918201929092526040019392505050565b5f60208284031215612b81575f80fd5b815167ffffffffffffffff811115612b97575f80fd5b8201601f81018413612ba7575f80fd5b8051612bb561276b82612727565b818152856020838501011115612bc9575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b6001600160a01b0383168152604060208201525f6119476040830184612aea565b8082028115828204841417611267576112676129a2565b81810381811115611267576112676129a2565b5f805f805f60a08688031215612c45575f80fd5b855194506020860151935060408601519250606086015191506080860151612c6c816126b3565b809150509295509295909350565b602081525f6125896020830184612aea565b5f8060408385031215612c9d575f80fd5b505080516020909101519092909150565b5f82612cbc57612cbc61298e565b500690565b5f82612ccf57612ccf61298e565b500490565b5f60ff831680612ce657612ce661298e565b8060ff84160691505092915050565b5f60ff831680612d0757612d0761298e565b8060ff84160491505092915050565b600181815b80851115612d5057815f1904821115612d3657612d366129a2565b80851615612d4357918102915b93841c9390800290612d1b565b509250929050565b5f82612d6657506001611267565b81612d7257505f611267565b8160018114612d885760028114612d9257612dae565b6001915050611267565b60ff841115612da357612da36129a2565b50506001821b611267565b5060208310610133831016604e8410600b8410161715612dd1575081810a611267565b612ddb8383612d16565b805f1904821115612dee57612dee6129a2565b029392505050565b5f6125898383612d58565b5f60018201612e1257612e126129a2565b5060010190565b60ff8281168282160390811115611267576112676129a256fea2646970667358221220774d582b0ef00b46367ce356a5feb1326ad8dea6cbb71ce5849c97caf11bb66564736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/PolygonTargetDispenserL2.json b/abis/0.8.25/PolygonTargetDispenserL2.json index 7e01616a..ae150cf9 100644 --- a/abis/0.8.25/PolygonTargetDispenserL2.json +++ b/abis/0.8.25/PolygonTargetDispenserL2.json @@ -164,9 +164,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -379,20 +379,33 @@ "inputs": [ { "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, "internalType": "uint256", - "name": "sequence", + "name": "leftovers", "type": "uint256" - }, + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": true, - "internalType": "address", - "name": "messageSender", - "type": "address" + "internalType": "uint256", + "name": "sequence", + "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "l1Processor", + "name": "messageSender", "type": "address" }, { @@ -400,6 +413,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -502,10 +521,16 @@ "name": "amount", "type": "uint256" }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, { "indexed": false, "internalType": "uint256", - "name": "batchNonce", + "name": "olasBalance", "type": "uint256" }, { @@ -532,6 +557,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "StakingTargetDeposited", @@ -549,28 +580,9 @@ "name": "TargetDispenserUnpaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithheldAmountSynced", - "type": "event" - }, { "inputs": [], - "name": "GAS_LIMIT", + "name": "MAX_CHAIN_ID", "outputs": [ { "internalType": "uint256", @@ -583,7 +595,7 @@ }, { "inputs": [], - "name": "MAX_CHAIN_ID", + "name": "MAX_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -596,7 +608,7 @@ }, { "inputs": [], - "name": "MAX_GAS_LIMIT", + "name": "MIN_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -672,6 +684,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "getBridgingDecimals", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, { "inputs": [], "name": "l1DepositProcessor", @@ -806,6 +831,44 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "queuedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -819,9 +882,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "redeem", @@ -868,25 +931,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "stakingQueueingNonces", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -895,7 +939,7 @@ "type": "bytes" } ], - "name": "syncWithheldTokens", + "name": "syncWithheldAmount", "outputs": [], "stateMutability": "payable", "type": "function" @@ -925,8 +969,8 @@ "type": "receive" } ], - "bytecode": "0x610120604052348015610010575f80fd5b5060405161264438038061264483398101604081905261002f916101c2565b8285858285856001600160a01b038516158061005257506001600160a01b038416155b8061006457506001600160a01b038316155b8061007657506001600160a01b038216155b156100945760405163d92e233d60e01b815260040160405180910390fd5b805f036100b457604051637c946ed760e01b815260040160405180910390fd5b60246100c860026001600160401b0361021c565b6100d2919061024d565b6001600160401b0316811115610130578060246100f760026001600160401b0361021c565b610101919061024d565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e0526101005260028054600160a81b600160a01b6001600160a81b03199092163360ff60a01b1916179190911760ff60a81b1916179055600480546001600160a01b03191692909116919091179055506102809350505050565b80516001600160a01b03811681146101bd575f80fd5b919050565b5f805f805f60a086880312156101d6575f80fd5b6101df866101a7565b94506101ed602087016101a7565b93506101fb604087016101a7565b9250610209606087016101a7565b9150608086015190509295509295909350565b5f6001600160401b038381168061024157634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561027957634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161231761032d5f395f81816105a10152611dc101525f81816102ee0152818161156c01528181611cd801528181611d470152611d7601525f81816102bb015281816115e201528181611c3a0152611ca901525f8181610321015261177401525f818161024701528181610902015281816109bb0152818161132f015281816113e90152818161148c0152818161190801526119cb01526123175ff3fe60806040526004361061019b575f3560e01c8063713d1a4e116100dc5780639a7c4b7111610087578063bddc966e11610062578063bddc966e146105e2578063ce5494bb14610601578063e3f5aa5114610620578063f4427c2c14610636575f80fd5b80639a7c4b71146105715780639b7bb84714610590578063a6f9dae1146105c3575f80fd5b806388837094116100b7578063888370941461051f5780638da5cb5b1461053e5780639890220b1461055d575f80fd5b8063713d1a4e146104ae5780637f1e9cb0146104ec5780638456cb591461050b575f80fd5b80632b83cccd1161014757806354d20cc21161012257806354d20cc2146103aa5780635a7287cf146104435780635bc105c0146104575780635c975abb1461046b575f80fd5b80632b83cccd146103585780633f4ba83a14610377578063450d11f01461038b575f80fd5b8063256359a811610177578063256359a8146102dd578063291347681461031057806329f404cd14610343575f80fd5b806231d11514610236578063091d2788146102865780631bad5957146102aa575f80fd5b36610232576002546001600160a01b03166101fb576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610241575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610291575f80fd5b5061029c620493e081565b60405190815260200161027d565b3480156102b5575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e8575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b34801561031b575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b610356610351366004611e5e565b61064b565b005b348015610363575f80fd5b50610356610372366004611f01565b61078a565b348015610382575f80fd5b50610356610b66565b348015610396575f80fd5b50600454610269906001600160a01b031681565b3480156103b5575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104127ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161027d565b34801561044e575f80fd5b5061029c5f5481565b348015610462575f80fd5b5061029c610c0f565b348015610476575f80fd5b5060025461049c9074010000000000000000000000000000000000000000900460ff1681565b60405160ff909116815260200161027d565b3480156104b9575f80fd5b506104dc6104c8366004611f33565b60036020525f908152604090205460ff1681565b604051901515815260200161027d565b3480156104f7575f80fd5b50600554610269906001600160a01b031681565b348015610516575f80fd5b50610356610c3b565b34801561052a575f80fd5b50610356610539366004611f4a565b610ce4565b348015610549575f80fd5b50600254610269906001600160a01b031681565b348015610568575f80fd5b5061029c610dc5565b34801561057c575f80fd5b5061035661058b366004611f6c565b610f76565b34801561059b575f80fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ce575f80fd5b506103566105dd366004611f4a565b611056565b3480156105ed575f80fd5b506103566105fc366004611e5e565b611137565b34801561060c575f80fd5b5061035661061b366004611f4a565b611183565b34801561062b575f80fd5b5061029c621e848081565b348015610641575f80fd5b5061029c60015481565b6002546001600160a81b90910460ff16111561067a576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036106f4576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805490819003610731576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805561073e818361153c565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff1611156107b9576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff74010000000000000000000000000000000000000000909104169003610833576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff16806108d2576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101f2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561094f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109739190611fee565b9050848110610b0f576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610a01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a259190612005565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610a7e575f80fd5b505af1158015610a90573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610acf91815260200190565b60405180910390a25f83815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610b4b565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101f2565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610ba65760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610c24600267ffffffffffffffff612051565b610c2e919061209c565b67ffffffffffffffff1681565b6002546001600160a01b03163314610c7b5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002546001600160a01b03163314610d245760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b6001600160a01b038116610d64576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f0dbabd9a07143f72b3cba582b51cec1eec13510cdd081ebf1f160e27268d5ca3905f90a250565b6002545f906001600160a81b90910460ff161115610df6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610e5a5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b479050805f03610e96576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610ed5576040519150601f19603f3d011682016040523d82523d5f602084013e610eda565b606091505b5050905080610f2a576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f6004820152306024820152336044820152606481018390526084016101f2565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6004546001600160a01b03163314611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560448201527f520000000000000000000000000000000000000000000000000000000000000060648201526084016101f2565b611050848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506115dd92505050565b50505050565b6002546001600160a01b031633146110965760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b6001600160a01b0381166110d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146111775760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b6111808161160d565b50565b6002546001600160a81b90910460ff1611156111b2576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b031633146112165760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b60025474010000000000000000000000000000000000000000900460ff1660010361126d576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f036112bb576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016101f2565b306001600160a01b038216036112ff576040517f38e04bf20000000000000000000000000000000000000000000000000000000081523060048201526024016101f2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561137c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a09190611fee565b905080156114d0576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611431573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114559190612005565b9050806114ce576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101f2565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f8260405160200161155091815260200190565b604051602081830303815290604052905061156a81611bfe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03165f7fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e470866040516115d091815260200190565b60405180910390a4505050565b6116087f00000000000000000000000000000000000000000000000000000000000000008383611c38565b505050565b6002546001600160a81b90910460ff16111561163c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f90819061167a9060209085018101908501612153565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b8551811015611bb9575f8682815181106116c2576116c2612212565b602002602001015190505f8683815181106116df576116df612212565b602002602001015190505f8260405160240161170a91906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906117a090859061223f565b5f604051808303815f865af19150503d805f81146117d9576040519150601f19603f3d011682016040523d82523d5f602084013e6117de565b606091505b50915091505f8280156117f2575081516020145b1561180e578180602001905181019061180b9190611fee565b90505b805f0361186f5761181f858a612255565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161185c91815260200190565b60405180910390a2505050505050611bb1565b808511156118d8575f611882828761226e565b905061188e818b612255565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516118ce91815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611955573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119799190611fee565b101580156119875750876001145b15611aec576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611a11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a359190612005565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015611a8e575f80fd5b505af1158015611aa0573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051611adf91815260200190565b60405180910390a2611baa565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f8181526003835283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b6001016116a6565b50611bc5836001612255565b6001558115610b4b57815f80828254611bde9190612255565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051611c2d91906122af565b60405180910390a150565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611cd6576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d74576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611def9291906122c1565b60405180910390a26116088161160d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e5657611e56611e00565b604052919050565b5f6020808385031215611e6f575f80fd5b823567ffffffffffffffff80821115611e86575f80fd5b818501915085601f830112611e99575f80fd5b813581811115611eab57611eab611e00565b611ebd84601f19601f84011601611e2d565b91508082528684828501011115611ed2575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114611180575f80fd5b5f805f60608486031215611f13575f80fd5b8335611f1e81611eed565b95602085013595506040909401359392505050565b5f60208284031215611f43575f80fd5b5035919050565b5f60208284031215611f5a575f80fd5b8135611f6581611eed565b9392505050565b5f805f8060608587031215611f7f575f80fd5b843593506020850135611f9181611eed565b9250604085013567ffffffffffffffff80821115611fad575f80fd5b818701915087601f830112611fc0575f80fd5b813581811115611fce575f80fd5b886020828501011115611fdf575f80fd5b95989497505060200194505050565b5f60208284031215611ffe575f80fd5b5051919050565b5f60208284031215612015575f80fd5b81518015158114611f65575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680612090577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156120bd576120bd612024565b5092915050565b5f67ffffffffffffffff8211156120dd576120dd611e00565b5060051b60200190565b5f82601f8301126120f6575f80fd5b8151602061210b612106836120c4565b611e2d565b8083825260208201915060208460051b87010193508684111561212c575f80fd5b602086015b848110156121485780518352918301918301612131565b509695505050505050565b5f8060408385031215612164575f80fd5b825167ffffffffffffffff8082111561217b575f80fd5b818501915085601f83011261218e575f80fd5b8151602061219e612106836120c4565b82815260059290921b840181019181810190898411156121bc575f80fd5b948201945b838610156121e35785516121d481611eed565b825294820194908201906121c1565b918801519196509093505050808211156121fb575f80fd5b50612208858286016120e7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b8082018082111561226857612268612024565b92915050565b8181038181111561226857612268612024565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611f656020830184612281565b828152604060208201525f6122d96040830184612281565b94935050505056fea264697066735822122056a0626a63289fb45be437cf23822b49bfd1f643809a4c1a373095caf2a6d35a64736f6c63430008190033", - "deployedBytecode": "0x60806040526004361061019b575f3560e01c8063713d1a4e116100dc5780639a7c4b7111610087578063bddc966e11610062578063bddc966e146105e2578063ce5494bb14610601578063e3f5aa5114610620578063f4427c2c14610636575f80fd5b80639a7c4b71146105715780639b7bb84714610590578063a6f9dae1146105c3575f80fd5b806388837094116100b7578063888370941461051f5780638da5cb5b1461053e5780639890220b1461055d575f80fd5b8063713d1a4e146104ae5780637f1e9cb0146104ec5780638456cb591461050b575f80fd5b80632b83cccd1161014757806354d20cc21161012257806354d20cc2146103aa5780635a7287cf146104435780635bc105c0146104575780635c975abb1461046b575f80fd5b80632b83cccd146103585780633f4ba83a14610377578063450d11f01461038b575f80fd5b8063256359a811610177578063256359a8146102dd578063291347681461031057806329f404cd14610343575f80fd5b806231d11514610236578063091d2788146102865780631bad5957146102aa575f80fd5b36610232576002546001600160a01b03166101fb576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610241575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610291575f80fd5b5061029c620493e081565b60405190815260200161027d565b3480156102b5575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e8575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b34801561031b575f80fd5b506102697f000000000000000000000000000000000000000000000000000000000000000081565b610356610351366004611e5e565b61064b565b005b348015610363575f80fd5b50610356610372366004611f01565b61078a565b348015610382575f80fd5b50610356610b66565b348015610396575f80fd5b50600454610269906001600160a01b031681565b3480156103b5575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104127ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161027d565b34801561044e575f80fd5b5061029c5f5481565b348015610462575f80fd5b5061029c610c0f565b348015610476575f80fd5b5060025461049c9074010000000000000000000000000000000000000000900460ff1681565b60405160ff909116815260200161027d565b3480156104b9575f80fd5b506104dc6104c8366004611f33565b60036020525f908152604090205460ff1681565b604051901515815260200161027d565b3480156104f7575f80fd5b50600554610269906001600160a01b031681565b348015610516575f80fd5b50610356610c3b565b34801561052a575f80fd5b50610356610539366004611f4a565b610ce4565b348015610549575f80fd5b50600254610269906001600160a01b031681565b348015610568575f80fd5b5061029c610dc5565b34801561057c575f80fd5b5061035661058b366004611f6c565b610f76565b34801561059b575f80fd5b5061029c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ce575f80fd5b506103566105dd366004611f4a565b611056565b3480156105ed575f80fd5b506103566105fc366004611e5e565b611137565b34801561060c575f80fd5b5061035661061b366004611f4a565b611183565b34801561062b575f80fd5b5061029c621e848081565b348015610641575f80fd5b5061029c60015481565b6002546001600160a81b90910460ff16111561067a576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036106f4576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805490819003610731576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805561073e818361153c565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff1611156107b9576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff74010000000000000000000000000000000000000000909104169003610833576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff16806108d2576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101f2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561094f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109739190611fee565b9050848110610b0f576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610a01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a259190612005565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610a7e575f80fd5b505af1158015610a90573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610acf91815260200190565b60405180910390a25f83815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610b4b565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101f2565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610ba65760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610c24600267ffffffffffffffff612051565b610c2e919061209c565b67ffffffffffffffff1681565b6002546001600160a01b03163314610c7b5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002546001600160a01b03163314610d245760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b6001600160a01b038116610d64576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f0dbabd9a07143f72b3cba582b51cec1eec13510cdd081ebf1f160e27268d5ca3905f90a250565b6002545f906001600160a81b90910460ff161115610df6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b03163314610e5a5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b479050805f03610e96576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610ed5576040519150601f19603f3d011682016040523d82523d5f602084013e610eda565b606091505b5050905080610f2a576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f6004820152306024820152336044820152606481018390526084016101f2565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6004546001600160a01b03163314611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560448201527f520000000000000000000000000000000000000000000000000000000000000060648201526084016101f2565b611050848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506115dd92505050565b50505050565b6002546001600160a01b031633146110965760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b6001600160a01b0381166110d6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146111775760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b6111808161160d565b50565b6002546001600160a81b90910460ff1611156111b2576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b031633146112165760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101f2565b60025474010000000000000000000000000000000000000000900460ff1660010361126d576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f036112bb576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016101f2565b306001600160a01b038216036112ff576040517f38e04bf20000000000000000000000000000000000000000000000000000000081523060048201526024016101f2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561137c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a09190611fee565b905080156114d0576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611431573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114559190612005565b9050806114ce576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101f2565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f8260405160200161155091815260200190565b604051602081830303815290604052905061156a81611bfe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03165f7fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e470866040516115d091815260200190565b60405180910390a4505050565b6116087f00000000000000000000000000000000000000000000000000000000000000008383611c38565b505050565b6002546001600160a81b90910460ff16111561163c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f90819061167a9060209085018101908501612153565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b8551811015611bb9575f8682815181106116c2576116c2612212565b602002602001015190505f8683815181106116df576116df612212565b602002602001015190505f8260405160240161170a91906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906117a090859061223f565b5f604051808303815f865af19150503d805f81146117d9576040519150601f19603f3d011682016040523d82523d5f602084013e6117de565b606091505b50915091505f8280156117f2575081516020145b1561180e578180602001905181019061180b9190611fee565b90505b805f0361186f5761181f858a612255565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161185c91815260200190565b60405180910390a2505050505050611bb1565b808511156118d8575f611882828761226e565b905061188e818b612255565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516118ce91815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611955573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119799190611fee565b101580156119875750876001145b15611aec576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611a11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a359190612005565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015611a8e575f80fd5b505af1158015611aa0573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051611adf91815260200190565b60405180910390a2611baa565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f8181526003835283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b6001016116a6565b50611bc5836001612255565b6001558115610b4b57815f80828254611bde9190612255565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051611c2d91906122af565b60405180910390a150565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611cd6576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611d74576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101f2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611def9291906122c1565b60405180910390a26116088161160d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e5657611e56611e00565b604052919050565b5f6020808385031215611e6f575f80fd5b823567ffffffffffffffff80821115611e86575f80fd5b818501915085601f830112611e99575f80fd5b813581811115611eab57611eab611e00565b611ebd84601f19601f84011601611e2d565b91508082528684828501011115611ed2575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b0381168114611180575f80fd5b5f805f60608486031215611f13575f80fd5b8335611f1e81611eed565b95602085013595506040909401359392505050565b5f60208284031215611f43575f80fd5b5035919050565b5f60208284031215611f5a575f80fd5b8135611f6581611eed565b9392505050565b5f805f8060608587031215611f7f575f80fd5b843593506020850135611f9181611eed565b9250604085013567ffffffffffffffff80821115611fad575f80fd5b818701915087601f830112611fc0575f80fd5b813581811115611fce575f80fd5b886020828501011115611fdf575f80fd5b95989497505060200194505050565b5f60208284031215611ffe575f80fd5b5051919050565b5f60208284031215612015575f80fd5b81518015158114611f65575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff80841680612090577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156120bd576120bd612024565b5092915050565b5f67ffffffffffffffff8211156120dd576120dd611e00565b5060051b60200190565b5f82601f8301126120f6575f80fd5b8151602061210b612106836120c4565b611e2d565b8083825260208201915060208460051b87010193508684111561212c575f80fd5b602086015b848110156121485780518352918301918301612131565b509695505050505050565b5f8060408385031215612164575f80fd5b825167ffffffffffffffff8082111561217b575f80fd5b818501915085601f83011261218e575f80fd5b8151602061219e612106836120c4565b82815260059290921b840181019181810190898411156121bc575f80fd5b948201945b838610156121e35785516121d481611eed565b825294820194908201906121c1565b918801519196509093505050808211156121fb575f80fd5b50612208858286016120e7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b8082018082111561226857612268612024565b92915050565b8181038181111561226857612268612024565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611f656020830184612281565b828152604060208201525f6122d96040830184612281565b94935050505056fea264697066735822122056a0626a63289fb45be437cf23822b49bfd1f643809a4c1a373095caf2a6d35a64736f6c63430008190033", + "bytecode": "0x610120604052348015610010575f80fd5b5060405161249d38038061249d83398101604081905261002f916101c2565b8285858285856001600160a01b038516158061005257506001600160a01b038416155b8061006457506001600160a01b038316155b8061007657506001600160a01b038216155b156100945760405163d92e233d60e01b815260040160405180910390fd5b805f036100b457604051637c946ed760e01b815260040160405180910390fd5b60246100c860026001600160401b0361021c565b6100d2919061024d565b6001600160401b0316811115610130578060246100f760026001600160401b0361021c565b610101919061024d565b604051637ae5968560e01b815260048101929092526001600160401b0316602482015260440160405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e0526101005260028054600160a81b600160a01b6001600160a81b03199092163360ff60a01b1916179190911760ff60a81b1916179055600580546001600160a01b03191692909116919091179055506102809350505050565b80516001600160a01b03811681146101bd575f80fd5b919050565b5f805f805f60a086880312156101d6575f80fd5b6101df866101a7565b94506101ed602087016101a7565b93506101fb604087016101a7565b9250610209606087016101a7565b9150608086015190509295509295909350565b5f6001600160401b038381168061024157634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561027957634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e051610100516121776103265f395f81816105bb0152611c3801525f818161033301528181611b4f01528181611bbe0152611bed01525f81816103000152818161147e01528181611ab10152611b2001525f8181610366015261164e01525f818161024401528181610d0f01528181610daf0152818161124b015281816113050152818161138f015281816117c9015261187701526121775ff3fe6080604052600436106101b1575f3560e01c80637f1e9cb0116100e75780639b7bb84711610087578063bddc966e11610062578063bddc966e1461060f578063ce5494bb1461062e578063e3f5aa511461064d578063f4427c2c14610663575f80fd5b80639b7bb847146105aa578063a6f9dae1146105dd578063a8b2ae02146105fc575f80fd5b80638da5cb5b116100c25780638da5cb5b146105395780639890220b14610558578063992c3e4b1461056c5780639a7c4b711461058b575f80fd5b80637f1e9cb0146104e75780638456cb5914610506578063888370941461051a575f80fd5b8063450d11f0116101525780635bc105c01161012d5780635bc105c0146104785780635c975abb1461048c5780637424ddc8146104be5780637ce1ffeb146104d1575f80fd5b8063450d11f01461039e57806354d20cc2146103bd5780635a7287cf14610456575f80fd5b80631bad59571161018d5780631bad5957146102ef578063256359a81461032257806329134768146103555780633f4ba83a14610388575f80fd5b806231d1151461023357806307d9c534146102835780631b2e7f0a146102c1575f80fd5b3661022f576002546001600160a01b03166101f85760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b34801561023e575f80fd5b506102667f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561028e575f80fd5b506102b161029d366004611c77565b60036020525f908152604090205460ff1681565b604051901515815260200161027a565b3480156102cc575f80fd5b506102b16102db366004611c77565b60046020525f908152604090205460ff1681565b3480156102fa575f80fd5b506102667f000000000000000000000000000000000000000000000000000000000000000081565b34801561032d575f80fd5b506102667f000000000000000000000000000000000000000000000000000000000000000081565b348015610360575f80fd5b506102667f000000000000000000000000000000000000000000000000000000000000000081565b348015610393575f80fd5b5061039c610678565b005b3480156103a9575f80fd5b50600554610266906001600160a01b031681565b3480156103c8575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104257ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161027a565b348015610461575f80fd5b5061046a5f5481565b60405190815260200161027a565b348015610483575f80fd5b5061046a610710565b348015610497575f80fd5b506002546104ac90600160a01b900460ff1681565b60405160ff909116815260200161027a565b61039c6104cc366004611cd3565b61073c565b3480156104dc575f80fd5b5061046a620493e081565b3480156104f2575f80fd5b50600654610266906001600160a01b031681565b348015610511575f80fd5b5061039c61090d565b348015610525575f80fd5b5061039c610534366004611d76565b6109b6565b348015610544575f80fd5b50600254610266906001600160a01b031681565b348015610563575f80fd5b5061046a610a73565b348015610577575f80fd5b5061039c610586366004611d98565b610be0565b348015610596575f80fd5b5061039c6105a5366004611dca565b610f24565b3480156105b5575f80fd5b5061046a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e8575f80fd5b5061039c6105f7366004611d76565b611004565b348015610607575f80fd5b50601261046a565b34801561061a575f80fd5b5061039c610629366004611cd3565b6110c1565b348015610639575f80fd5b5061039c610648366004611d76565b61110d565b348015610658575f80fd5b5061046a621e848081565b34801561066e575f80fd5b5061046a60015481565b6002546001600160a01b031633146106b85760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610725600267ffffffffffffffff611e74565b61072f9190611e9a565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff16111561076b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b9091041690036107a9576040516313d0ff5960e31b815260040160405180910390fd5b5f54601281805f036107ce57604051637c946ed760e01b815260040160405180910390fd5b6107d88184611ec2565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f80610823858985611434565b909250905080156108a957604051339082905f81818185875af1925050503d805f811461086b576040519150601f19603f3d011682016040523d82523d5f602084013e610870565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b6108b4846001611f18565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b0316331461094d5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002546001600160a01b031633146109f65760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b6001600160a01b038116610a1d5760405163d92e233d60e01b815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f0dbabd9a07143f72b3cba582b51cec1eec13510cdd081ebf1f160e27268d5ca3905f90a250565b6002545f906001600160a81b90910460ff161115610aa4576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b03163314610af65760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b479050805f03610b1957604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610b58576040519150601f19603f3d011682016040523d82523d5f602084013e610b5d565b606091505b5050905080610b945760405163cd3f165960e01b81525f6004820152306024820152336044820152606481018390526084016101ef565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff161115610c0f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610c4d576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680610cf8576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101ef565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610d5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d809190611f2b565b9050848110610ecd5760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610df5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e199190611f42565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610e59575f80fd5b505af1158015610e6b573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c32198087604051610eab91815260200190565b60405180910390a35f838152600460205260409020805460ff19169055610f09565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101ef565b50506002805460ff60a81b1916600160a81b17905550505050565b6005546001600160a01b03163314610fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560448201527f520000000000000000000000000000000000000000000000000000000000000060648201526084016101ef565b610ffe848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061147992505050565b50505050565b6002546001600160a01b031633146110445760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b6001600160a01b03811661106b5760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146111015760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b61110a816114a9565b50565b6002546001600160a81b90910460ff16111561113c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b0316331461118e5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b600254600160a01b900460ff166001036111d4576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361120957604051631c7025f960e11b81526001600160a01b03821660048201526024016101ef565b306001600160a01b0382160361123457604051631c7025f960e11b81523060048201526024016101ef565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611298573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bc9190611f2b565b905080156113d3576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af115801561134d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113719190611f42565b9050806113d15760405163cd3f165960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101ef565b505b6002805473ffffffffffffffffffffffffffffffffffffffff191690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f805f8584604051602001611453929190918252602082015260400190565b604051602081830303815290604052905061146d81611a75565b50919434945092505050565b6114a47f00000000000000000000000000000000000000000000000000000000000000008383611aaf565b505050565b6002546001600160a81b90910460ff1611156114d8576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f90819081906115069060209086018101908601611ff0565b5f81815260036020526040902054929550909350915060ff1615611559576040517f56bc34a1000000000000000000000000000000000000000000000000000000008152600481018290526024016101ef565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015611a3e575f86828151811061159c5761159c6120b7565b602002602001015190505f8683815181106115b9576115b96120b7565b602002602001015190505f826040516024016115e491906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061167a9085906120cb565b5f604051808303815f865af19150503d805f81146116b3576040519150601f19603f3d011682016040523d82523d5f602084013e6116b8565b606091505b50915091505f8280156116cc575081516020145b156116e857818060200190518101906116e59190611f2b565b90505b805f03611749576116f9858a611f18565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161173691815260200190565b60405180910390a2505050505050611a36565b808511156117b2575f61175c8287611ec2565b9050611768818b611f18565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516117a891815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183a9190611f2b565b905085811015801561184c5750886001145b156119805760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156118bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e19190611f42565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015611921575f80fd5b505af1158015611933573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c3219808860405161197391815260200190565b60405180910390a3611a2e565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b600101611580565b508115610f0957815f80828254611a559190611f18565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051611aa4919061210f565b60405180910390a150565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611b4d576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611beb576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611c66929190612121565b60405180910390a26114a4816114a9565b5f60208284031215611c87575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ccb57611ccb611c8e565b604052919050565b5f6020808385031215611ce4575f80fd5b823567ffffffffffffffff80821115611cfb575f80fd5b818501915085601f830112611d0e575f80fd5b813581811115611d2057611d20611c8e565b611d32601f8201601f19168501611ca2565b91508082528684828501011115611d47575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b038116811461110a575f80fd5b5f60208284031215611d86575f80fd5b8135611d9181611d62565b9392505050565b5f805f60608486031215611daa575f80fd5b8335611db581611d62565b95602085013595506040909401359392505050565b5f805f8060608587031215611ddd575f80fd5b843593506020850135611def81611d62565b9250604085013567ffffffffffffffff80821115611e0b575f80fd5b818701915087601f830112611e1e575f80fd5b813581811115611e2c575f80fd5b886020828501011115611e3d575f80fd5b95989497505060200194505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611e8e57611e8e611e4c565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611ebb57611ebb611e60565b5092915050565b81810381811115611ed557611ed5611e60565b92915050565b80851115611f1057815f1904821115611ef657611ef6611e60565b80851615611f0357918102915b93841c9390800290611edb565b509250929050565b80820180821115611ed557611ed5611e60565b5f60208284031215611f3b575f80fd5b5051919050565b5f60208284031215611f52575f80fd5b81518015158114611d91575f80fd5b5f67ffffffffffffffff821115611f7a57611f7a611c8e565b5060051b60200190565b5f82601f830112611f93575f80fd5b81516020611fa8611fa383611f61565b611ca2565b8083825260208201915060208460051b870101935086841115611fc9575f80fd5b602086015b84811015611fe55780518352918301918301611fce565b509695505050505050565b5f805f60608486031215612002575f80fd5b835167ffffffffffffffff80821115612019575f80fd5b818601915086601f83011261202c575f80fd5b8151602061203c611fa383611f61565b82815260059290921b8401810191818101908a84111561205a575f80fd5b948201945b8386101561208157855161207281611d62565b8252948201949082019061205f565b91890151919750909350505080821115612099575f80fd5b506120a686828701611f84565b925050604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611d9160208301846120e1565b828152604060208201525f61213960408301846120e1565b94935050505056fea2646970667358221220e0db306b1626f4b7b25536ea8abbd12743d1c044d2c91d2562bec3012b8f25b464736f6c63430008190033", + "deployedBytecode": "0x6080604052600436106101b1575f3560e01c80637f1e9cb0116100e75780639b7bb84711610087578063bddc966e11610062578063bddc966e1461060f578063ce5494bb1461062e578063e3f5aa511461064d578063f4427c2c14610663575f80fd5b80639b7bb847146105aa578063a6f9dae1146105dd578063a8b2ae02146105fc575f80fd5b80638da5cb5b116100c25780638da5cb5b146105395780639890220b14610558578063992c3e4b1461056c5780639a7c4b711461058b575f80fd5b80637f1e9cb0146104e75780638456cb5914610506578063888370941461051a575f80fd5b8063450d11f0116101525780635bc105c01161012d5780635bc105c0146104785780635c975abb1461048c5780637424ddc8146104be5780637ce1ffeb146104d1575f80fd5b8063450d11f01461039e57806354d20cc2146103bd5780635a7287cf14610456575f80fd5b80631bad59571161018d5780631bad5957146102ef578063256359a81461032257806329134768146103555780633f4ba83a14610388575f80fd5b806231d1151461023357806307d9c534146102835780631b2e7f0a146102c1575f80fd5b3661022f576002546001600160a01b03166101f85760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b34801561023e575f80fd5b506102667f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561028e575f80fd5b506102b161029d366004611c77565b60036020525f908152604090205460ff1681565b604051901515815260200161027a565b3480156102cc575f80fd5b506102b16102db366004611c77565b60046020525f908152604090205460ff1681565b3480156102fa575f80fd5b506102667f000000000000000000000000000000000000000000000000000000000000000081565b34801561032d575f80fd5b506102667f000000000000000000000000000000000000000000000000000000000000000081565b348015610360575f80fd5b506102667f000000000000000000000000000000000000000000000000000000000000000081565b348015610393575f80fd5b5061039c610678565b005b3480156103a9575f80fd5b50600554610266906001600160a01b031681565b3480156103c8575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104257ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161027a565b348015610461575f80fd5b5061046a5f5481565b60405190815260200161027a565b348015610483575f80fd5b5061046a610710565b348015610497575f80fd5b506002546104ac90600160a01b900460ff1681565b60405160ff909116815260200161027a565b61039c6104cc366004611cd3565b61073c565b3480156104dc575f80fd5b5061046a620493e081565b3480156104f2575f80fd5b50600654610266906001600160a01b031681565b348015610511575f80fd5b5061039c61090d565b348015610525575f80fd5b5061039c610534366004611d76565b6109b6565b348015610544575f80fd5b50600254610266906001600160a01b031681565b348015610563575f80fd5b5061046a610a73565b348015610577575f80fd5b5061039c610586366004611d98565b610be0565b348015610596575f80fd5b5061039c6105a5366004611dca565b610f24565b3480156105b5575f80fd5b5061046a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105e8575f80fd5b5061039c6105f7366004611d76565b611004565b348015610607575f80fd5b50601261046a565b34801561061a575f80fd5b5061039c610629366004611cd3565b6110c1565b348015610639575f80fd5b5061039c610648366004611d76565b61110d565b348015610658575f80fd5b5061046a621e848081565b34801561066e575f80fd5b5061046a60015481565b6002546001600160a01b031633146106b85760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b6024610725600267ffffffffffffffff611e74565b61072f9190611e9a565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff16111561076b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b9091041690036107a9576040516313d0ff5960e31b815260040160405180910390fd5b5f54601281805f036107ce57604051637c946ed760e01b815260040160405180910390fd5b6107d88184611ec2565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f80610823858985611434565b909250905080156108a957604051339082905f81818185875af1925050503d805f811461086b576040519150601f19603f3d011682016040523d82523d5f602084013e610870565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b6108b4846001611f18565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b0316331461094d5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002546001600160a01b031633146109f65760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b6001600160a01b038116610a1d5760405163d92e233d60e01b815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f0dbabd9a07143f72b3cba582b51cec1eec13510cdd081ebf1f160e27268d5ca3905f90a250565b6002545f906001600160a81b90910460ff161115610aa4576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b03163314610af65760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b479050805f03610b1957604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f8114610b58576040519150601f19603f3d011682016040523d82523d5f602084013e610b5d565b606091505b5050905080610b945760405163cd3f165960e01b81525f6004820152306024820152336044820152606481018390526084016101ef565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff161115610c0f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610c4d576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680610cf8576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b038616600482015260248101859052604481018490526064016101ef565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610d5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d809190611f2b565b9050848110610ecd5760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610df5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e199190611f42565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610e59575f80fd5b505af1158015610e6b573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c32198087604051610eab91815260200190565b60405180910390a35f838152600460205260409020805460ff19169055610f09565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260048101829052602481018690526044016101ef565b50506002805460ff60a81b1916600160a81b17905550505050565b6005546001600160a01b03163314610fbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4678426173654368696c6454756e6e656c3a20494e56414c49445f53454e444560448201527f520000000000000000000000000000000000000000000000000000000000000060648201526084016101ef565b610ffe848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061147992505050565b50505050565b6002546001600160a01b031633146110445760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b6001600160a01b03811661106b5760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146111015760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b61110a816114a9565b50565b6002546001600160a81b90910460ff16111561113c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b0316331461118e5760025460405163521eb56d60e11b81523360048201526001600160a01b0390911660248201526044016101ef565b600254600160a01b900460ff166001036111d4576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f0361120957604051631c7025f960e11b81526001600160a01b03821660048201526024016101ef565b306001600160a01b0382160361123457604051631c7025f960e11b81523060048201526024016101ef565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611298573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bc9190611f2b565b905080156113d3576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af115801561134d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113719190611f42565b9050806113d15760405163cd3f165960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015230602483015284166044820152606481018390526084016101ef565b505b6002805473ffffffffffffffffffffffffffffffffffffffff191690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b5f805f8584604051602001611453929190918252602082015260400190565b604051602081830303815290604052905061146d81611a75565b50919434945092505050565b6114a47f00000000000000000000000000000000000000000000000000000000000000008383611aaf565b505050565b6002546001600160a81b90910460ff1611156114d8576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f90819081906115069060209086018101908601611ff0565b5f81815260036020526040902054929550909350915060ff1615611559576040517f56bc34a1000000000000000000000000000000000000000000000000000000008152600481018290526024016101ef565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015611a3e575f86828151811061159c5761159c6120b7565b602002602001015190505f8683815181106115b9576115b96120b7565b602002602001015190505f826040516024016115e491906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061167a9085906120cb565b5f604051808303815f865af19150503d805f81146116b3576040519150601f19603f3d011682016040523d82523d5f602084013e6116b8565b606091505b50915091505f8280156116cc575081516020145b156116e857818060200190518101906116e59190611f2b565b90505b805f03611749576116f9858a611f18565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161173691815260200190565b60405180910390a2505050505050611a36565b808511156117b2575f61175c8287611ec2565b9050611768818b611f18565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516117a891815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183a9190611f2b565b905085811015801561184c5750886001145b156119805760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156118bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e19190611f42565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015611921575f80fd5b505af1158015611933573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c3219808860405161197391815260200190565b60405180910390a3611a2e565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b600101611580565b508115610f0957815f80828254611a559190611f18565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b7f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b03681604051611aa4919061210f565b60405180910390a150565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611b4d576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611beb576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044016101ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f000000000000000000000000000000000000000000000000000000000000000083604051611c66929190612121565b60405180910390a26114a4816114a9565b5f60208284031215611c87575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ccb57611ccb611c8e565b604052919050565b5f6020808385031215611ce4575f80fd5b823567ffffffffffffffff80821115611cfb575f80fd5b818501915085601f830112611d0e575f80fd5b813581811115611d2057611d20611c8e565b611d32601f8201601f19168501611ca2565b91508082528684828501011115611d47575f80fd5b80848401858401375f90820190930192909252509392505050565b6001600160a01b038116811461110a575f80fd5b5f60208284031215611d86575f80fd5b8135611d9181611d62565b9392505050565b5f805f60608486031215611daa575f80fd5b8335611db581611d62565b95602085013595506040909401359392505050565b5f805f8060608587031215611ddd575f80fd5b843593506020850135611def81611d62565b9250604085013567ffffffffffffffff80821115611e0b575f80fd5b818701915087601f830112611e1e575f80fd5b813581811115611e2c575f80fd5b886020828501011115611e3d575f80fd5b95989497505060200194505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611e8e57611e8e611e4c565b92169190910492915050565b67ffffffffffffffff828116828216039080821115611ebb57611ebb611e60565b5092915050565b81810381811115611ed557611ed5611e60565b92915050565b80851115611f1057815f1904821115611ef657611ef6611e60565b80851615611f0357918102915b93841c9390800290611edb565b509250929050565b80820180821115611ed557611ed5611e60565b5f60208284031215611f3b575f80fd5b5051919050565b5f60208284031215611f52575f80fd5b81518015158114611d91575f80fd5b5f67ffffffffffffffff821115611f7a57611f7a611c8e565b5060051b60200190565b5f82601f830112611f93575f80fd5b81516020611fa8611fa383611f61565b611ca2565b8083825260208201915060208460051b870101935086841115611fc9575f80fd5b602086015b84811015611fe55780518352918301918301611fce565b509695505050505050565b5f805f60608486031215612002575f80fd5b835167ffffffffffffffff80821115612019575f80fd5b818601915086601f83011261202c575f80fd5b8151602061203c611fa383611f61565b82815260059290921b8401810191818101908a84111561205a575f80fd5b948201945b8386101561208157855161207281611d62565b8252948201949082019061205f565b91890151919750909350505080821115612099575f80fd5b506120a686828701611f84565b925050604084015190509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f82518060208501845e5f920191825250919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611d9160208301846120e1565b828152604060208201525f61213960408301846120e1565b94935050505056fea2646970667358221220e0db306b1626f4b7b25536ea8abbd12743d1c044d2c91d2562bec3012b8f25b464736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/WormholeDepositProcessorL1.json b/abis/0.8.25/WormholeDepositProcessorL1.json index 47872e7c..397caa43 100644 --- a/abis/0.8.25/WormholeDepositProcessorL1.json +++ b/abis/0.8.25/WormholeDepositProcessorL1.json @@ -174,9 +174,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -327,6 +327,25 @@ "name": "L2TargetDispenserUpdated", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "leftovers", + "type": "uint256" + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -353,6 +372,12 @@ "internalType": "uint256", "name": "transferAmount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -571,6 +596,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -717,6 +761,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + } + ], + "name": "updateHashMaintenance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "wormhole", @@ -757,8 +814,8 @@ "type": "function" } ], - "bytecode": "0x6101a0604052348015610010575f80fd5b5060405161204038038061204083398101604081905261002f91610219565b83858382818b8b85848b6001600160a01b038416158061005657506001600160a01b038316155b8061006857506001600160a01b038216155b156100865760405163d92e233d60e01b815260040160405180910390fd5b805f036100a657604051637c946ed760e01b815260040160405180910390fd5b60246100ba60026001600160401b0361028c565b6100c491906102bd565b6001600160401b0316811115610123578060246100e960026001600160401b0361028c565b6100f391906102bd565b604051637ae5968560e01b815260048101929092526001600160401b031660248201526044015b60405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e0526101005260018054336001600160a01b031991821681179092559382166101205291811661014052600380549093169091179091559182166101605250831690506101a05760405163d92e233d60e01b815260040160405180910390fd5b805f036101c057604051637c946ed760e01b815260040160405180910390fd5b61ffff8111156101ee57604051637ae5968560e01b81526004810182905261ffff602482015260440161011a565b61018052506102f0945050505050565b80516001600160a01b0381168114610214575f80fd5b919050565b5f805f805f805f60e0888a03121561022f575f80fd5b610238886101fe565b9650610246602089016101fe565b9550610254604089016101fe565b9450610262606089016101fe565b93506080880151925061027760a089016101fe565b915060c0880151905092959891949750929550565b5f6001600160401b03838116806102b157634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b038281168282160390808211156102e957634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161012051610140516101605161018051611c516103ef5f395f818161025801528181610593015281816105ee015281816106b90152610ea501525f81816104a1015281816111b20152818161122f01526113ed01525f81816103e30152818161125e015261135c01525f81816104d401528181611011015261107e01525f818161046e01528181610b5001528181610bec0152610efe01525f81816101e701528181610a530152610ac001525f6103b001525f81816105440152818161072a0152818161077f015281816108b4015281816109090152610c1c01525f81816101970152610edc0152611c515ff3fe608060405260043610610182575f3560e01c80638da5cb5b116100d1578063da25b7251161007c578063f2541c3511610057578063f2541c3514610533578063f4427c2c14610566578063f9fc3c211461057b575f80fd5b8063da25b725146104c3578063dd12d68b146104f6578063e309fb7714610515575f80fd5b8063bde52661116100ac578063bde526611461044a578063c23cc3ff1461045d578063c6328a4614610490575f80fd5b80638da5cb5b14610405578063a8b2ae0214610424578063b2267a7b14610437575f80fd5b8063529dca32116101315780635bc105c01161010c5780635bc105c01461038b5780636143fe931461039f57806384acd1bb146103d2575f80fd5b8063529dca32146102b257806354d20cc2146102d357806354e4bbf41461036c575f80fd5b8063468b9dab11610161578063468b9dab146102475780634c1c6cbf146102885780634ece6b171461029e575f80fd5b806231d115146101865780633d1f8679146101d6578063446a969514610209575b5f80fd5b348015610191575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101e1575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610214575f80fd5b5061023761022336600461142c565b60056020525f908152604090205460ff1681565b60405190151581526020016101cd565b348015610252575f80fd5b5061027a7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101cd565b348015610293575f80fd5b5061027a620493e081565b3480156102a9575f80fd5b5061027a604081565b3480156102bd575f80fd5b506102d16102cc36600461154f565b610591565b005b3480156102de575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261033b7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101cd565b348015610377575f80fd5b506102d1610386366004611654565b6106b4565b348015610396575f80fd5b5061027a6106f3565b3480156103aa575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610410575f80fd5b506001546101b9906001600160a01b031681565b34801561042f575f80fd5b50600861027a565b6102d1610445366004611676565b61071f565b6102d161045836600461173a565b6108a9565b348015610468575f80fd5b5061027a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561049b575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ce575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610501575f80fd5b506102d161051036600461180f565b6109a2565b348015610520575f80fd5b505f546101b9906001600160a01b031681565b34801561053e575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610571575f80fd5b5061027a60025481565b348015610586575f80fd5b5061027a621e848081565b7f00000000000000000000000000000000000000000000000000000000000000008261ffff161461061f576040517f857c0bad00000000000000000000000000000000000000000000000000000000815261ffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526044015b60405180910390fd5b5f8181526005602052604090205460ff161561066a576040517f56bc34a100000000000000000000000000000000000000000000000000000000815260048101829052602401610616565b5f81815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055826106ac338288610a51565b505050505050565b6106e77f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0383166109a2565b6106f081610c81565b50565b6024610708600267ffffffffffffffff611866565b61071291906118b1565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107b2576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610616565b6040805160018082528183019092525f916020808301908036833701905050905084815f815181106107e6576107e66118d9565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f81518110610835576108356118d9565b6020026020010181815250505f61084e83838787610d84565b600280549192505f61085f83611906565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe32848487604051610898939291906119af565b60405180910390a250505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461093c576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610616565b5f61094985858585610d84565b600280549192505f61095a83611906565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe32868685604051610993939291906119af565b60405180910390a25050505050565b6003546001600160a01b03163314610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e6f7420616c6c6f77656420746f20736574207265676973746572656420736560448201527f6e646572000000000000000000000000000000000000000000000000000000006064820152608401610616565b61ffff9091165f90815260046020526040902055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610aed576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610616565b5f546001600160a01b03838116911614610b49575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610616565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610ba7908590611a12565b60405180910390a35f81806020019051810190610bc49190611a24565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b158015610c65575f80fd5b505af1158015610c77573d5f803e3d5ffd5b5050505050505050565b6001546001600160a01b03163314610cda576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610616565b6001600160a01b038116610d1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f6040835114610dcd578251604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526106169290600401918252602082015260400190565b5f8084806020019051810190610de39190611a3b565b91509150805f03610e20576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b621e8480811115610e69576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052621e84806024820152604401610616565b6001600160a01b038216610e7b573391505b5f8787604051602001610e8f929190611a67565b6040516020818303038152906040529050610f237f00000000000000000000000000000000000000000000000000000000000000005f8054906101000a90046001600160a01b0316835f867f00000000000000000000000000000000000000000000000000000000000000008b7f00000000000000000000000000000000000000000000000000000000000000008b610f39565b67ffffffffffffffff1698975050505050505050565b6040805160018082528183019092525f91829190816020015b604080516060810182525f80825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610f52579050509050610faa86868d8d61112a565b815f81518110610fbc57610fbc6118d9565b60209081029190910101526040517fc23ee3c300000000000000000000000000000000000000000000000000000000815261ffff8c16600482015260248101899052604481018890525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c23ee3c3906064016040805180830381865afa158015611055573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110799190611a8b565b5090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332b2fc0e828e8e8e8e8e898d8d6040518a63ffffffff1660e01b81526004016110d7989796959493929190611aad565b60206040518083038185885af11580156110f3573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111189190611b6b565b925050505b9998505050505050505050565b604080516060810182525f80825260208201819052918101919091526111618585858560405180602001604052805f81525061116a565b95945050505050565b604080516060810182525f808252602082018190528183015290517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905287169063095ea7b3906044016020604051808303815f875af1158015611207573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122b9190611b92565b505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c5a5ebda7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631a90a2196040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112dc9190611a24565b8989896001600160a01b038a165f8a6040518863ffffffff1660e01b815260040161130c96959493929190611bb1565b60206040518083038185885af1158015611328573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061134d9190611b6b565b905060405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113da9190611c00565b61ffff1681526020016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681526020018267ffffffffffffffff1681525091505095945050505050565b5f6020828403121561143c575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561149957611499611443565b604052919050565b5f82601f8301126114b0575f80fd5b813567ffffffffffffffff8111156114ca576114ca611443565b6114dd6020601f19601f84011601611470565b8181528460208386010111156114f1575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff82111561152657611526611443565b5060051b60200190565b61ffff811681146106f0575f80fd5b803561154a81611530565b919050565b5f805f805f60a08688031215611563575f80fd5b853567ffffffffffffffff8082111561157a575f80fd5b61158689838a016114a1565b965060209150818801358181111561159c575f80fd5b8801601f81018a136115ac575f80fd5b80356115bf6115ba8261150d565b611470565b81815260059190911b8201840190848101908c8311156115dd575f80fd5b8584015b83811015611613578035868111156115f7575f80fd5b6116058f89838901016114a1565b8452509186019186016115e1565b5098505050506040880135945061162f9150506060870161153f565b949793965091946080013592915050565b6001600160a01b03811681146106f0575f80fd5b5f60208284031215611664575f80fd5b813561166f81611640565b9392505050565b5f805f8060808587031215611689575f80fd5b843561169481611640565b935060208501359250604085013567ffffffffffffffff8111156116b6575f80fd5b6116c2878288016114a1565b949793965093946060013593505050565b5f82601f8301126116e2575f80fd5b813560206116f26115ba8361150d565b8083825260208201915060208460051b870101935086841115611713575f80fd5b602086015b8481101561172f5780358352918301918301611718565b509695505050505050565b5f805f806080858703121561174d575f80fd5b843567ffffffffffffffff80821115611764575f80fd5b818701915087601f830112611777575f80fd5b813560206117876115ba8361150d565b82815260059290921b8401810191818101908b8411156117a5575f80fd5b948201945b838610156117cc5785356117bd81611640565b825294820194908201906117aa565b985050880135925050808211156117e1575f80fd5b6117ed888389016116d3565b94506040870135915080821115611802575f80fd5b506116c2878288016114a1565b5f8060408385031215611820575f80fd5b823561182b81611530565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff808416806118a5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156118d2576118d2611839565b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361193657611936611839565b5060010190565b5f815180845260208085019450602084015f5b838110156119755781516001600160a01b031687529582019590820190600101611950565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561197557815187529582019590820190600101611993565b606081525f6119c1606083018661193d565b82810360208401526119d38186611980565b915050826040830152949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61166f60208301846119e4565b5f60208284031215611a34575f80fd5b5051919050565b5f8060408385031215611a4c575f80fd5b8251611a5781611640565b6020939093015192949293505050565b604081525f611a79604083018561193d565b82810360208401526111618185611980565b5f8060408385031215611a9c575f80fd5b505080516020909101519092909150565b5f61010061ffff808c16845260206001600160a01b038c16818601526040836040870152611add8487018d6119e4565b60608781018d9052608088018c905287820360a08901528a51808352848c01965090918401905f5b81811015611b3e578751805188168452868101518785015285015167ffffffffffffffff16858401529685019691830191600101611b05565b505061ffff8a1660c08901529550611b57945050505050565b6001600160a01b03831660e083015261111d565b5f60208284031215611b7b575f80fd5b815167ffffffffffffffff8116811461166f575f80fd5b5f60208284031215611ba2575f80fd5b8151801515811461166f575f80fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201525f611bf460c08301846119e4565b98975050505050505050565b5f60208284031215611c10575f80fd5b815161166f8161153056fea26469706673582212205c312023cd1aeefd6036e7702e4755264b78fe85ed15ca3eca87b386bb111f8864736f6c63430008190033", - "deployedBytecode": "0x608060405260043610610182575f3560e01c80638da5cb5b116100d1578063da25b7251161007c578063f2541c3511610057578063f2541c3514610533578063f4427c2c14610566578063f9fc3c211461057b575f80fd5b8063da25b725146104c3578063dd12d68b146104f6578063e309fb7714610515575f80fd5b8063bde52661116100ac578063bde526611461044a578063c23cc3ff1461045d578063c6328a4614610490575f80fd5b80638da5cb5b14610405578063a8b2ae0214610424578063b2267a7b14610437575f80fd5b8063529dca32116101315780635bc105c01161010c5780635bc105c01461038b5780636143fe931461039f57806384acd1bb146103d2575f80fd5b8063529dca32146102b257806354d20cc2146102d357806354e4bbf41461036c575f80fd5b8063468b9dab11610161578063468b9dab146102475780634c1c6cbf146102885780634ece6b171461029e575f80fd5b806231d115146101865780633d1f8679146101d6578063446a969514610209575b5f80fd5b348015610191575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101e1575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610214575f80fd5b5061023761022336600461142c565b60056020525f908152604090205460ff1681565b60405190151581526020016101cd565b348015610252575f80fd5b5061027a7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101cd565b348015610293575f80fd5b5061027a620493e081565b3480156102a9575f80fd5b5061027a604081565b3480156102bd575f80fd5b506102d16102cc36600461154f565b610591565b005b3480156102de575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261033b7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101cd565b348015610377575f80fd5b506102d1610386366004611654565b6106b4565b348015610396575f80fd5b5061027a6106f3565b3480156103aa575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103dd575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610410575f80fd5b506001546101b9906001600160a01b031681565b34801561042f575f80fd5b50600861027a565b6102d1610445366004611676565b61071f565b6102d161045836600461173a565b6108a9565b348015610468575f80fd5b5061027a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561049b575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ce575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610501575f80fd5b506102d161051036600461180f565b6109a2565b348015610520575f80fd5b505f546101b9906001600160a01b031681565b34801561053e575f80fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b348015610571575f80fd5b5061027a60025481565b348015610586575f80fd5b5061027a621e848081565b7f00000000000000000000000000000000000000000000000000000000000000008261ffff161461061f576040517f857c0bad00000000000000000000000000000000000000000000000000000000815261ffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526044015b60405180910390fd5b5f8181526005602052604090205460ff161561066a576040517f56bc34a100000000000000000000000000000000000000000000000000000000815260048101829052602401610616565b5f81815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055826106ac338288610a51565b505050505050565b6106e77f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0383166109a2565b6106f081610c81565b50565b6024610708600267ffffffffffffffff611866565b61071291906118b1565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107b2576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610616565b6040805160018082528183019092525f916020808301908036833701905050905084815f815181106107e6576107e66118d9565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f81518110610835576108356118d9565b6020026020010181815250505f61084e83838787610d84565b600280549192505f61085f83611906565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe32848487604051610898939291906119af565b60405180910390a250505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461093c576040517f625a43fe0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610616565b5f61094985858585610d84565b600280549192505f61095a83611906565b9190505550807f9a5db7eed66b0161b9861a53b42de123e042dbe1f1734a7d032402926063fe32868685604051610993939291906119af565b60405180910390a25050505050565b6003546001600160a01b03163314610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e6f7420616c6c6f77656420746f20736574207265676973746572656420736560448201527f6e646572000000000000000000000000000000000000000000000000000000006064820152608401610616565b61ffff9091165f90815260046020526040902055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610aed576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610616565b5f546001600160a01b03838116911614610b49575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610616565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610ba7908590611a12565b60405180910390a35f81806020019051810190610bc49190611a24565b6040517f59a8dfb90000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906359a8dfb9906044015f604051808303815f87803b158015610c65575f80fd5b505af1158015610c77573d5f803e3d5ffd5b5050505050505050565b6001546001600160a01b03163314610cda576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610616565b6001600160a01b038116610d1a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f6040835114610dcd578251604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526106169290600401918252602082015260400190565b5f8084806020019051810190610de39190611a3b565b91509150805f03610e20576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b621e8480811115610e69576040517f7ae5968500000000000000000000000000000000000000000000000000000000815260048101829052621e84806024820152604401610616565b6001600160a01b038216610e7b573391505b5f8787604051602001610e8f929190611a67565b6040516020818303038152906040529050610f237f00000000000000000000000000000000000000000000000000000000000000005f8054906101000a90046001600160a01b0316835f867f00000000000000000000000000000000000000000000000000000000000000008b7f00000000000000000000000000000000000000000000000000000000000000008b610f39565b67ffffffffffffffff1698975050505050505050565b6040805160018082528183019092525f91829190816020015b604080516060810182525f80825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610f52579050509050610faa86868d8d61112a565b815f81518110610fbc57610fbc6118d9565b60209081029190910101526040517fc23ee3c300000000000000000000000000000000000000000000000000000000815261ffff8c16600482015260248101899052604481018890525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c23ee3c3906064016040805180830381865afa158015611055573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110799190611a8b565b5090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332b2fc0e828e8e8e8e8e898d8d6040518a63ffffffff1660e01b81526004016110d7989796959493929190611aad565b60206040518083038185885af11580156110f3573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111189190611b6b565b925050505b9998505050505050505050565b604080516060810182525f80825260208201819052918101919091526111618585858560405180602001604052805f81525061116a565b95945050505050565b604080516060810182525f808252602082018190528183015290517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905287169063095ea7b3906044016020604051808303815f875af1158015611207573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122b9190611b92565b505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c5a5ebda7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631a90a2196040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112dc9190611a24565b8989896001600160a01b038a165f8a6040518863ffffffff1660e01b815260040161130c96959493929190611bb1565b60206040518083038185885af1158015611328573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061134d9190611b6b565b905060405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113da9190611c00565b61ffff1681526020016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681526020018267ffffffffffffffff1681525091505095945050505050565b5f6020828403121561143c575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561149957611499611443565b604052919050565b5f82601f8301126114b0575f80fd5b813567ffffffffffffffff8111156114ca576114ca611443565b6114dd6020601f19601f84011601611470565b8181528460208386010111156114f1575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff82111561152657611526611443565b5060051b60200190565b61ffff811681146106f0575f80fd5b803561154a81611530565b919050565b5f805f805f60a08688031215611563575f80fd5b853567ffffffffffffffff8082111561157a575f80fd5b61158689838a016114a1565b965060209150818801358181111561159c575f80fd5b8801601f81018a136115ac575f80fd5b80356115bf6115ba8261150d565b611470565b81815260059190911b8201840190848101908c8311156115dd575f80fd5b8584015b83811015611613578035868111156115f7575f80fd5b6116058f89838901016114a1565b8452509186019186016115e1565b5098505050506040880135945061162f9150506060870161153f565b949793965091946080013592915050565b6001600160a01b03811681146106f0575f80fd5b5f60208284031215611664575f80fd5b813561166f81611640565b9392505050565b5f805f8060808587031215611689575f80fd5b843561169481611640565b935060208501359250604085013567ffffffffffffffff8111156116b6575f80fd5b6116c2878288016114a1565b949793965093946060013593505050565b5f82601f8301126116e2575f80fd5b813560206116f26115ba8361150d565b8083825260208201915060208460051b870101935086841115611713575f80fd5b602086015b8481101561172f5780358352918301918301611718565b509695505050505050565b5f805f806080858703121561174d575f80fd5b843567ffffffffffffffff80821115611764575f80fd5b818701915087601f830112611777575f80fd5b813560206117876115ba8361150d565b82815260059290921b8401810191818101908b8411156117a5575f80fd5b948201945b838610156117cc5785356117bd81611640565b825294820194908201906117aa565b985050880135925050808211156117e1575f80fd5b6117ed888389016116d3565b94506040870135915080821115611802575f80fd5b506116c2878288016114a1565b5f8060408385031215611820575f80fd5b823561182b81611530565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f67ffffffffffffffff808416806118a5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156118d2576118d2611839565b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361193657611936611839565b5060010190565b5f815180845260208085019450602084015f5b838110156119755781516001600160a01b031687529582019590820190600101611950565b509495945050505050565b5f815180845260208085019450602084015f5b8381101561197557815187529582019590820190600101611993565b606081525f6119c1606083018661193d565b82810360208401526119d38186611980565b915050826040830152949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61166f60208301846119e4565b5f60208284031215611a34575f80fd5b5051919050565b5f8060408385031215611a4c575f80fd5b8251611a5781611640565b6020939093015192949293505050565b604081525f611a79604083018561193d565b82810360208401526111618185611980565b5f8060408385031215611a9c575f80fd5b505080516020909101519092909150565b5f61010061ffff808c16845260206001600160a01b038c16818601526040836040870152611add8487018d6119e4565b60608781018d9052608088018c905287820360a08901528a51808352848c01965090918401905f5b81811015611b3e578751805188168452868101518785015285015167ffffffffffffffff16858401529685019691830191600101611b05565b505061ffff8a1660c08901529550611b57945050505050565b6001600160a01b03831660e083015261111d565b5f60208284031215611b7b575f80fd5b815167ffffffffffffffff8116811461166f575f80fd5b5f60208284031215611ba2575f80fd5b8151801515811461166f575f80fd5b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201525f611bf460c08301846119e4565b98975050505050505050565b5f60208284031215611c10575f80fd5b815161166f8161153056fea26469706673582212205c312023cd1aeefd6036e7702e4755264b78fe85ed15ca3eca87b386bb111f8864736f6c63430008190033", + "bytecode": "0x6101a0604052348015610010575f80fd5b5060405161226538038061226583398101604081905261002f91610219565b83858382818b8b85848b6001600160a01b038416158061005657506001600160a01b038316155b8061006857506001600160a01b038216155b156100865760405163d92e233d60e01b815260040160405180910390fd5b805f036100a657604051637c946ed760e01b815260040160405180910390fd5b60246100ba60026001600160401b0361028c565b6100c491906102bd565b6001600160401b0316811115610123578060246100e960026001600160401b0361028c565b6100f391906102bd565b604051637ae5968560e01b815260048101929092526001600160401b031660248201526044015b60405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e0526101005260018054336001600160a01b031991821681179092559382166101205291811661014052600480549093169091179091559182166101605250831690506101a05760405163d92e233d60e01b815260040160405180910390fd5b805f036101c057604051637c946ed760e01b815260040160405180910390fd5b61ffff8111156101ee57604051637ae5968560e01b81526004810182905261ffff602482015260440161011a565b61018052506102f0945050505050565b80516001600160a01b0381168114610214575f80fd5b919050565b5f805f805f805f60e0888a03121561022f575f80fd5b610238886101fe565b9650610246602089016101fe565b9550610254604089016101fe565b9450610262606089016101fe565b93506080880151925061027760a089016101fe565b915060c0880151905092959891949750929550565b5f6001600160401b03838116806102b157634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b038281168282160390808211156102e957634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161012051610140516101605161018051611e616104045f395f818161029c015281816105f601528181610651015281816106e50152818161109e015261119801525f818161050401528181611455015281816114d2015261169001525f81816104270152818161150101526115ff01525f8181610537015281816112b4015261132101525f81816104d101528181610d5b0152610e4701525f818161023b01528181610c5e01528181610ccb01526110d801525f6103f401525f81816105a701528181610756015281816107920152818161081c0152818161085801528181610a4d01528181610a890152610e8301525f81816101ad01526111c70152611e615ff3fe608060405260043610610198575f3560e01c80638da5cb5b116100dc578063c6328a4611610087578063e309fb7711610062578063e309fb7714610578578063f2541c3514610596578063f4427c2c146105c9578063f9fc3c21146105de575f80fd5b8063c6328a46146104f3578063da25b72514610526578063dd12d68b14610559575f80fd5b8063b2267a7b116100b7578063b2267a7b1461049a578063bde52661146104ad578063c23cc3ff146104c0575f80fd5b80638da5cb5b14610449578063a8b2ae0214610468578063ac65ded21461047b575f80fd5b80634ece6b171161014757806354e4bbf41161012257806354e4bbf4146103b05780635bc105c0146103cf5780636143fe93146103e357806384acd1bb14610416575f80fd5b80634ece6b17146102e2578063529dca32146102f657806354d20cc214610317575f80fd5b8063446a969511610177578063446a96951461025d578063468b9dab1461028b5780634c1c6cbf146102cc575f80fd5b806231d1151461019c57806307d9c534146101ec5780633d1f86791461022a575b5f80fd5b3480156101a7575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101f7575f80fd5b5061021a6102063660046116cf565b60036020525f908152604090205460ff1681565b60405190151581526020016101e3565b348015610235575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610268575f80fd5b5061021a6102773660046116cf565b60066020525f908152604090205460ff1681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101e3565b3480156102d7575f80fd5b506102be620493e081565b3480156102ed575f80fd5b506102be604081565b348015610301575f80fd5b506103156103103660046117d9565b6105f4565b005b348015610322575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261037f7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101e3565b3480156103bb575f80fd5b506103156103ca3660046118de565b6106e0565b3480156103da575f80fd5b506102be61071f565b3480156103ee575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610421575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610454575f80fd5b506001546101cf906001600160a01b031681565b348015610473575f80fd5b5060086102be565b348015610486575f80fd5b506103156104953660046116cf565b61074b565b6103156104a8366004611900565b610811565b6103156104bb3660046119c4565b610a42565b3480156104cb575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fe575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610531575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610564575f80fd5b50610315610573366004611a99565b610bad565b348015610583575f80fd5b505f546101cf906001600160a01b031681565b3480156105a1575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d4575f80fd5b506102be60025481565b3480156105e9575f80fd5b506102be621e848081565b7f00000000000000000000000000000000000000000000000000000000000000008261ffff1614610682576040517f857c0bad00000000000000000000000000000000000000000000000000000000815261ffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526044015b60405180910390fd5b5f8181526006602052604090205460ff16156106b4576040516356bc34a160e01b815260048101829052602401610679565b5f818152600660205260409020805460ff19166001179055826106d8338288610c5c565b505050505050565b6107137f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038316610bad565b61071c81610ee1565b50565b6024610734600267ffffffffffffffff611ad7565b61073e9190611b09565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107c55760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610679565b5f8181526003602052604090205460ff16156107f7576040516356bc34a160e01b815260048101829052602401610679565b5f908152600360205260409020805460ff19166001179055565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088b5760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610679565b6040805160018082528183019092525f916020808301908036833701905050905084815f815181106108bf576108bf611b31565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061090e5761090e611b31565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f8061096286868a8a87610fcb565b909250905080156109e857604051329082905f81818185875af1925050503d805f81146109aa576040519150601f19603f3d011682016040523d82523d5f602084013e6109af565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b6109f3846001611b45565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b604051610a2e93929190611bd0565b60405180910390a350505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610abc5760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610679565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f80610b048888888887610fcb565b90925090508015610b5557604051329082905f81818185875af1925050503d805f8114610b4c576040519150601f19603f3d011682016040523d82523d5f602084013e610b51565b606091505b5050505b610b60846001611b45565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a89604051610b9b93929190611bd0565b60405180910390a35050505050505050565b6004546001600160a01b03163314610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e6f7420616c6c6f77656420746f20736574207265676973746572656420736560448201527f6e646572000000000000000000000000000000000000000000000000000000006064820152608401610679565b61ffff9091165f90815260056020526040902055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610cf8576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610679565b5f546001600160a01b03838116911614610d54575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610679565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610db2908590611c33565b60405180910390a35f8082806020019051810190610dd09190611c45565b5f81815260036020526040902054919350915060ff1615610e07576040516356bc34a160e01b815260048101829052602401610679565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b158015610ec4575f80fd5b505af1158015610ed6573d5f803e3d5ffd5b505050505050505050565b6001546001600160a01b03163314610f3a576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610679565b6001600160a01b038116610f615760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f806040855114611015578451604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526106799290600401918252602082015260400190565b5f808680602001905181019061102b9190611c67565b90925090506001600160a01b0382166110575760405163d92e233d60e01b815260040160405180910390fd5b621e84808110156110685750621e84805b5f89898760405160200161107e93929190611bd0565b60408051808303601f190181529082905263c23ee3c360e01b825261ffff7f00000000000000000000000000000000000000000000000000000000000000001660048301525f6024830181905260448301859052909250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c23ee3c39060640160408051808303815f875af1158015611125573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111499190611c45565b5090503481111561118f576040517f491a2bb100000000000000000000000000000000000000000000000000000000815234600482015260248101829052604401610679565b5f80546111ee917f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316908590877f00000000000000000000000000000000000000000000000000000000000000008e868c611214565b67ffffffffffffffff1695506112048134611c93565b9450505050509550959350505050565b6040805160018082528183019092525f91829190816020015b604080516060810182525f80825260208083018290529282015282525f1990920191018161122d57905050905061126686868d8d6113cd565b815f8151811061127857611278611b31565b602090810291909101015260405163c23ee3c360e01b815261ffff8c16600482015260248101899052604481018890525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c23ee3c3906064016040805180830381865afa1580156112f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131c9190611c45565b5090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332b2fc0e828e8e8e8e8e898d8d6040518a63ffffffff1660e01b815260040161137a989796959493929190611ca6565b60206040518083038185885af1158015611396573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906113bb9190611d64565b925050505b9998505050505050505050565b604080516060810182525f80825260208201819052918101919091526114048585858560405180602001604052805f81525061140d565b95945050505050565b604080516060810182525f808252602082018190528183015290517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905287169063095ea7b3906044016020604051808303815f875af11580156114aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ce9190611d8b565b505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c5a5ebda7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631a90a2196040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157f9190611daa565b8989896001600160a01b038a165f8a6040518863ffffffff1660e01b81526004016115af96959493929190611dc1565b60206040518083038185885af11580156115cb573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115f09190611d64565b905060405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611659573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167d9190611e10565b61ffff1681526020016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681526020018267ffffffffffffffff1681525091505095945050505050565b5f602082840312156116df575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611723576117236116e6565b604052919050565b5f82601f83011261173a575f80fd5b813567ffffffffffffffff811115611754576117546116e6565b611767601f8201601f19166020016116fa565b81815284602083860101111561177b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156117b0576117b06116e6565b5060051b60200190565b61ffff8116811461071c575f80fd5b80356117d4816117ba565b919050565b5f805f805f60a086880312156117ed575f80fd5b853567ffffffffffffffff80821115611804575f80fd5b61181089838a0161172b565b9650602091508188013581811115611826575f80fd5b8801601f81018a13611836575f80fd5b803561184961184482611797565b6116fa565b81815260059190911b8201840190848101908c831115611867575f80fd5b8584015b8381101561189d57803586811115611881575f80fd5b61188f8f898389010161172b565b84525091860191860161186b565b509850505050604088013594506118b9915050606087016117c9565b949793965091946080013592915050565b6001600160a01b038116811461071c575f80fd5b5f602082840312156118ee575f80fd5b81356118f9816118ca565b9392505050565b5f805f8060808587031215611913575f80fd5b843561191e816118ca565b935060208501359250604085013567ffffffffffffffff811115611940575f80fd5b61194c8782880161172b565b949793965093946060013593505050565b5f82601f83011261196c575f80fd5b8135602061197c61184483611797565b8083825260208201915060208460051b87010193508684111561199d575f80fd5b602086015b848110156119b957803583529183019183016119a2565b509695505050505050565b5f805f80608085870312156119d7575f80fd5b843567ffffffffffffffff808211156119ee575f80fd5b818701915087601f830112611a01575f80fd5b81356020611a1161184483611797565b82815260059290921b8401810191818101908b841115611a2f575f80fd5b948201945b83861015611a56578535611a47816118ca565b82529482019490820190611a34565b98505088013592505080821115611a6b575f80fd5b611a778883890161195d565b94506040870135915080821115611a8c575f80fd5b5061194c8782880161172b565b5f8060408385031215611aaa575f80fd5b8235611ab5816117ba565b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611afd57634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff828116828216039080821115611b2a57611b2a611ac3565b5092915050565b634e487b7160e01b5f52603260045260245ffd5b80820180821115611b5857611b58611ac3565b92915050565b5f815180845260208085019450602084015f5b83811015611b965781516001600160a01b031687529582019590820190600101611b71565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611b9657815187529582019590820190600101611bb4565b606081525f611be26060830186611b5e565b8281036020840152611bf48186611ba1565b915050826040830152949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6118f96020830184611c05565b5f8060408385031215611c56575f80fd5b505080516020909101519092909150565b5f8060408385031215611c78575f80fd5b8251611c83816118ca565b6020939093015192949293505050565b81810381811115611b5857611b58611ac3565b5f61010061ffff808c16845260206001600160a01b038c16818601526040836040870152611cd68487018d611c05565b60608781018d9052608088018c905287820360a08901528a51808352848c01965090918401905f5b81811015611d37578751805188168452868101518785015285015167ffffffffffffffff16858401529685019691830191600101611cfe565b505061ffff8a1660c08901529550611d50945050505050565b6001600160a01b03831660e08301526113c0565b5f60208284031215611d74575f80fd5b815167ffffffffffffffff811681146118f9575f80fd5b5f60208284031215611d9b575f80fd5b815180151581146118f9575f80fd5b5f60208284031215611dba575f80fd5b5051919050565b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201525f611e0460c0830184611c05565b98975050505050505050565b5f60208284031215611e20575f80fd5b81516118f9816117ba56fea2646970667358221220d194ec593b444ca46af4e41459ef68ba8087995e3c3e5172cab7001c1fbb3b8f64736f6c63430008190033", + "deployedBytecode": "0x608060405260043610610198575f3560e01c80638da5cb5b116100dc578063c6328a4611610087578063e309fb7711610062578063e309fb7714610578578063f2541c3514610596578063f4427c2c146105c9578063f9fc3c21146105de575f80fd5b8063c6328a46146104f3578063da25b72514610526578063dd12d68b14610559575f80fd5b8063b2267a7b116100b7578063b2267a7b1461049a578063bde52661146104ad578063c23cc3ff146104c0575f80fd5b80638da5cb5b14610449578063a8b2ae0214610468578063ac65ded21461047b575f80fd5b80634ece6b171161014757806354e4bbf41161012257806354e4bbf4146103b05780635bc105c0146103cf5780636143fe93146103e357806384acd1bb14610416575f80fd5b80634ece6b17146102e2578063529dca32146102f657806354d20cc214610317575f80fd5b8063446a969511610177578063446a96951461025d578063468b9dab1461028b5780634c1c6cbf146102cc575f80fd5b806231d1151461019c57806307d9c534146101ec5780633d1f86791461022a575b5f80fd5b3480156101a7575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101f7575f80fd5b5061021a6102063660046116cf565b60036020525f908152604090205460ff1681565b60405190151581526020016101e3565b348015610235575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610268575f80fd5b5061021a6102773660046116cf565b60066020525f908152604090205460ff1681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101e3565b3480156102d7575f80fd5b506102be620493e081565b3480156102ed575f80fd5b506102be604081565b348015610301575f80fd5b506103156103103660046117d9565b6105f4565b005b348015610322575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261037f7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101e3565b3480156103bb575f80fd5b506103156103ca3660046118de565b6106e0565b3480156103da575f80fd5b506102be61071f565b3480156103ee575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610421575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610454575f80fd5b506001546101cf906001600160a01b031681565b348015610473575f80fd5b5060086102be565b348015610486575f80fd5b506103156104953660046116cf565b61074b565b6103156104a8366004611900565b610811565b6103156104bb3660046119c4565b610a42565b3480156104cb575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fe575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610531575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610564575f80fd5b50610315610573366004611a99565b610bad565b348015610583575f80fd5b505f546101cf906001600160a01b031681565b3480156105a1575f80fd5b506101cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d4575f80fd5b506102be60025481565b3480156105e9575f80fd5b506102be621e848081565b7f00000000000000000000000000000000000000000000000000000000000000008261ffff1614610682576040517f857c0bad00000000000000000000000000000000000000000000000000000000815261ffff831660048201527f000000000000000000000000000000000000000000000000000000000000000060248201526044015b60405180910390fd5b5f8181526006602052604090205460ff16156106b4576040516356bc34a160e01b815260048101829052602401610679565b5f818152600660205260409020805460ff19166001179055826106d8338288610c5c565b505050505050565b6107137f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038316610bad565b61071c81610ee1565b50565b6024610734600267ffffffffffffffff611ad7565b61073e9190611b09565b67ffffffffffffffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107c55760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610679565b5f8181526003602052604090205460ff16156107f7576040516356bc34a160e01b815260048101829052602401610679565b5f908152600360205260409020805460ff19166001179055565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088b5760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610679565b6040805160018082528183019092525f916020808301908036833701905050905084815f815181106108bf576108bf611b31565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f8151811061090e5761090e611b31565b602090810291909101810191909152600254604080519283018290524690830152306060830152905f906080016040516020818303038152906040528051906020012090505f8061096286868a8a87610fcb565b909250905080156109e857604051329082905f81818185875af1925050503d805f81146109aa576040519150601f19603f3d011682016040523d82523d5f602084013e6109af565b606091505b50506040518281523291507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b6109f3846001611b45565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d0485118788888b604051610a2e93929190611bd0565b60405180910390a350505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610abc5760405163312d21ff60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152336024820152604401610679565b600254604080516020810183905246918101919091523060608201525f906080016040516020818303038152906040528051906020012090505f80610b048888888887610fcb565b90925090508015610b5557604051329082905f81818185875af1925050503d805f8114610b4c576040519150601f19603f3d011682016040523d82523d5f602084013e610b51565b606091505b5050505b610b60846001611b45565b60028190555082827f621aece9999edf4d664a3855f668f6fc380937a42044234fd883b42d048511878a8a89604051610b9b93929190611bd0565b60405180910390a35050505050505050565b6004546001600160a01b03163314610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e6f7420616c6c6f77656420746f20736574207265676973746572656420736560448201527f6e646572000000000000000000000000000000000000000000000000000000006064820152608401610679565b61ffff9091165f90815260056020526040902055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610cf8576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610679565b5f546001600160a01b03838116911614610d54575f546040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301529091166024820152604401610679565b5f546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316907f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e3390610db2908590611c33565b60405180910390a35f8082806020019051810190610dd09190611c45565b5f81815260036020526040902054919350915060ff1615610e07576040516356bc34a160e01b815260048101829052602401610679565b5f8181526003602052604090819020805460ff19166001179055517f79bc81dd0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018290526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906379bc81dd906064015f604051808303815f87803b158015610ec4575f80fd5b505af1158015610ed6573d5f803e3d5ffd5b505050505050505050565b6001546001600160a01b03163314610f3a576001546040517fa43d6ada0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152336024820152604401610679565b6001600160a01b038116610f615760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811783556001805490921690915560405190917f991aa5c8f67a92f8feb202de828958c681966ae343fcf6db040f5f8099d547cf91a250565b5f806040855114611015578451604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526106799290600401918252602082015260400190565b5f808680602001905181019061102b9190611c67565b90925090506001600160a01b0382166110575760405163d92e233d60e01b815260040160405180910390fd5b621e84808110156110685750621e84805b5f89898760405160200161107e93929190611bd0565b60408051808303601f190181529082905263c23ee3c360e01b825261ffff7f00000000000000000000000000000000000000000000000000000000000000001660048301525f6024830181905260448301859052909250907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c23ee3c39060640160408051808303815f875af1158015611125573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111499190611c45565b5090503481111561118f576040517f491a2bb100000000000000000000000000000000000000000000000000000000815234600482015260248101829052604401610679565b5f80546111ee917f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316908590877f00000000000000000000000000000000000000000000000000000000000000008e868c611214565b67ffffffffffffffff1695506112048134611c93565b9450505050509550959350505050565b6040805160018082528183019092525f91829190816020015b604080516060810182525f80825260208083018290529282015282525f1990920191018161122d57905050905061126686868d8d6113cd565b815f8151811061127857611278611b31565b602090810291909101015260405163c23ee3c360e01b815261ffff8c16600482015260248101899052604481018890525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c23ee3c3906064016040805180830381865afa1580156112f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131c9190611c45565b5090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332b2fc0e828e8e8e8e8e898d8d6040518a63ffffffff1660e01b815260040161137a989796959493929190611ca6565b60206040518083038185885af1158015611396573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906113bb9190611d64565b925050505b9998505050505050505050565b604080516060810182525f80825260208201819052918101919091526114048585858560405180602001604052805f81525061140d565b95945050505050565b604080516060810182525f808252602082018190528183015290517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905287169063095ea7b3906044016020604051808303815f875af11580156114aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ce9190611d8b565b505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c5a5ebda7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631a90a2196040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157f9190611daa565b8989896001600160a01b038a165f8a6040518863ffffffff1660e01b81526004016115af96959493929190611dc1565b60206040518083038185885af11580156115cb573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115f09190611d64565b905060405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611659573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167d9190611e10565b61ffff1681526020016001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681526020018267ffffffffffffffff1681525091505095945050505050565b5f602082840312156116df575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611723576117236116e6565b604052919050565b5f82601f83011261173a575f80fd5b813567ffffffffffffffff811115611754576117546116e6565b611767601f8201601f19166020016116fa565b81815284602083860101111561177b575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156117b0576117b06116e6565b5060051b60200190565b61ffff8116811461071c575f80fd5b80356117d4816117ba565b919050565b5f805f805f60a086880312156117ed575f80fd5b853567ffffffffffffffff80821115611804575f80fd5b61181089838a0161172b565b9650602091508188013581811115611826575f80fd5b8801601f81018a13611836575f80fd5b803561184961184482611797565b6116fa565b81815260059190911b8201840190848101908c831115611867575f80fd5b8584015b8381101561189d57803586811115611881575f80fd5b61188f8f898389010161172b565b84525091860191860161186b565b509850505050604088013594506118b9915050606087016117c9565b949793965091946080013592915050565b6001600160a01b038116811461071c575f80fd5b5f602082840312156118ee575f80fd5b81356118f9816118ca565b9392505050565b5f805f8060808587031215611913575f80fd5b843561191e816118ca565b935060208501359250604085013567ffffffffffffffff811115611940575f80fd5b61194c8782880161172b565b949793965093946060013593505050565b5f82601f83011261196c575f80fd5b8135602061197c61184483611797565b8083825260208201915060208460051b87010193508684111561199d575f80fd5b602086015b848110156119b957803583529183019183016119a2565b509695505050505050565b5f805f80608085870312156119d7575f80fd5b843567ffffffffffffffff808211156119ee575f80fd5b818701915087601f830112611a01575f80fd5b81356020611a1161184483611797565b82815260059290921b8401810191818101908b841115611a2f575f80fd5b948201945b83861015611a56578535611a47816118ca565b82529482019490820190611a34565b98505088013592505080821115611a6b575f80fd5b611a778883890161195d565b94506040870135915080821115611a8c575f80fd5b5061194c8782880161172b565b5f8060408385031215611aaa575f80fd5b8235611ab5816117ba565b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b5f67ffffffffffffffff80841680611afd57634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff828116828216039080821115611b2a57611b2a611ac3565b5092915050565b634e487b7160e01b5f52603260045260245ffd5b80820180821115611b5857611b58611ac3565b92915050565b5f815180845260208085019450602084015f5b83811015611b965781516001600160a01b031687529582019590820190600101611b71565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611b9657815187529582019590820190600101611bb4565b606081525f611be26060830186611b5e565b8281036020840152611bf48186611ba1565b915050826040830152949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6118f96020830184611c05565b5f8060408385031215611c56575f80fd5b505080516020909101519092909150565b5f8060408385031215611c78575f80fd5b8251611c83816118ca565b6020939093015192949293505050565b81810381811115611b5857611b58611ac3565b5f61010061ffff808c16845260206001600160a01b038c16818601526040836040870152611cd68487018d611c05565b60608781018d9052608088018c905287820360a08901528a51808352848c01965090918401905f5b81811015611d37578751805188168452868101518785015285015167ffffffffffffffff16858401529685019691830191600101611cfe565b505061ffff8a1660c08901529550611d50945050505050565b6001600160a01b03831660e08301526113c0565b5f60208284031215611d74575f80fd5b815167ffffffffffffffff811681146118f9575f80fd5b5f60208284031215611d9b575f80fd5b815180151581146118f9575f80fd5b5f60208284031215611dba575f80fd5b5051919050565b6001600160a01b038716815285602082015261ffff8516604082015283606082015263ffffffff8316608082015260c060a08201525f611e0460c0830184611c05565b98975050505050505050565b5f60208284031215611e20575f80fd5b81516118f9816117ba56fea2646970667358221220d194ec593b444ca46af4e41459ef68ba8087995e3c3e5172cab7001c1fbb3b8f64736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/abis/0.8.25/WormholeTargetDispenserL2.json b/abis/0.8.25/WormholeTargetDispenserL2.json index f7642920..0aa4617d 100644 --- a/abis/0.8.25/WormholeTargetDispenserL2.json +++ b/abis/0.8.25/WormholeTargetDispenserL2.json @@ -185,9 +185,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "TargetAmountNotQueued", @@ -387,20 +387,33 @@ "inputs": [ { "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, "internalType": "uint256", - "name": "sequence", + "name": "leftovers", "type": "uint256" - }, + } + ], + "name": "LeftoversRefunded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": true, - "internalType": "address", - "name": "messageSender", - "type": "address" + "internalType": "uint256", + "name": "sequence", + "type": "uint256" }, { "indexed": true, "internalType": "address", - "name": "l1Processor", + "name": "messageSender", "type": "address" }, { @@ -408,6 +421,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "MessagePosted", @@ -497,10 +516,16 @@ "name": "amount", "type": "uint256" }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" + }, { "indexed": false, "internalType": "uint256", - "name": "batchNonce", + "name": "olasBalance", "type": "uint256" }, { @@ -527,6 +552,12 @@ "internalType": "uint256", "name": "amount", "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "StakingTargetDeposited", @@ -544,25 +575,6 @@ "name": "TargetDispenserUnpaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "WithheldAmountSynced", - "type": "event" - }, { "inputs": [], "name": "BRIDGE_PAYLOAD_LENGTH", @@ -578,7 +590,7 @@ }, { "inputs": [], - "name": "GAS_LIMIT", + "name": "MAX_CHAIN_ID", "outputs": [ { "internalType": "uint256", @@ -591,7 +603,7 @@ }, { "inputs": [], - "name": "MAX_CHAIN_ID", + "name": "MAX_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -604,7 +616,7 @@ }, { "inputs": [], - "name": "MAX_GAS_LIMIT", + "name": "MIN_GAS_LIMIT", "outputs": [ { "internalType": "uint256", @@ -654,6 +666,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "getBridgingDecimals", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, { "inputs": [], "name": "l1DepositProcessor", @@ -784,6 +809,44 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "queuedHashes", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -830,9 +893,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "batchNonce", - "type": "uint256" + "internalType": "bytes32", + "name": "batchHash", + "type": "bytes32" } ], "name": "redeem", @@ -884,25 +947,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "stakingQueueingNonces", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -911,7 +955,7 @@ "type": "bytes" } ], - "name": "syncWithheldTokens", + "name": "syncWithheldAmount", "outputs": [], "stateMutability": "payable", "type": "function" @@ -980,8 +1024,8 @@ "type": "receive" } ], - "bytecode": "0x610180604052348015610010575f80fd5b506040516139d23803806139d283398101604081905261002f91610244565b84818382818b8b838b8b6001600160a01b038516158061005657506001600160a01b038416155b8061006857506001600160a01b038316155b8061007a57506001600160a01b038216155b156100985760405163d92e233d60e01b815260040160405180910390fd5b805f036100b857604051637c946ed760e01b815260040160405180910390fd5b60246100cc60026001600160401b036102be565b6100d691906102ef565b6001600160401b0316811115610135578060246100fb60026001600160401b036102be565b61010591906102ef565b604051637ae5968560e01b815260048101929092526001600160401b031660248201526044015b60405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e052610100526002805460ff60a81b1960ff60a01b19339081166001600160a81b031990931692909217600160a01b1716600160a81b179091559281166101205290811661014052600480546001600160a01b03191690921790915591821661016052508316159050806101cd57506001600160a01b038116155b156101eb5760405163d92e233d60e01b815260040160405180910390fd5b61ffff83111561021957604051637ae5968560e01b81526004810184905261ffff602482015260440161012c565b5050610100525061032292505050565b80516001600160a01b038116811461023f575f80fd5b919050565b5f805f805f805f60e0888a03121561025a575f80fd5b61026388610229565b965061027160208901610229565b955061027f60408901610229565b945061028d60608901610229565b9350608088015192506102a260a08901610229565b91506102b060c08901610229565b905092959891949750929550565b5f6001600160401b03838116806102e357634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561031b57634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161012051610140516101605161357561045d5f395f818161063f01528181610e0501528181610f19015281816110ba0152611e6a01525f818161056801528181610d2601528181610f9f0152611da501525f61069101525f81816105ce01528181611b1601528181611c3701528181611c9d015281816120280152818161207e015261297c01525f818161030f01528181611c5801528181611d240152818161289301528181612902015261293101525f81816102dc01528181611b4d01528181611c07015281816127f5015261286401525f8181610342015261234301525f8181610268015281816109b401528181610a6d0152818161179801528181611852015281816118f5015281816120f401528181612168015281816124d7015261259a01526135755ff3fe6080604052600436106101bc575f3560e01c80635c975abb116100f2578063a6f9dae111610092578063da25b72511610062578063da25b72514610680578063dd12d68b146106b3578063e3f5aa51146106d2578063f4427c2c146106e8575f80fd5b8063a6f9dae1146105f0578063bddc966e1461060f578063c6328a461461062e578063ce5494bb14610661575f80fd5b806384acd1bb116100cd57806384acd1bb146105575780638da5cb5b1461058a5780639890220b146105a95780639b7bb847146105bd575f80fd5b80635c975abb146104d2578063713d1a4e146105155780638456cb5914610543575f80fd5b80633f4ba83a1161015d578063529dca3211610138578063529dca32146103fe57806354d20cc2146104115780635a7287cf146104aa5780635bc105c0146104be575f80fd5b80633f4ba83a14610398578063446a9695146103ac5780634ece6b17146103ea575f80fd5b8063256359a811610198578063256359a8146102fe578063291347681461033157806329f404cd146103645780632b83cccd14610379575f80fd5b806231d11514610257578063091d2788146102a75780631bad5957146102cb575f80fd5b36610253576002546001600160a01b031661021c576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610262575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b2575f80fd5b506102bd620493e081565b60405190815260200161029e565b3480156102d6575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610309575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033c575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b610377610372366004612b08565b6106fd565b005b348015610384575f80fd5b50610377610393366004612b56565b61083c565b3480156103a3575f80fd5b50610377610bfa565b3480156103b7575f80fd5b506103da6103c6366004612b88565b60066020525f908152604090205460ff1681565b604051901515815260200161029e565b3480156103f5575f80fd5b506102bd604081565b61037761040c366004612be1565b610ca3565b34801561041c575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104797ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161029e565b3480156104b5575f80fd5b506102bd5f5481565b3480156104c9575f80fd5b506102bd611239565b3480156104dd575f80fd5b506002546105039074010000000000000000000000000000000000000000900460ff1681565b60405160ff909116815260200161029e565b348015610520575f80fd5b506103da61052f366004612b88565b60036020525f908152604090205460ff1681565b34801561054e575f80fd5b50610377611265565b348015610562575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610595575f80fd5b5060025461028a906001600160a01b031681565b3480156105b4575f80fd5b506102bd61130e565b3480156105c8575f80fd5b506102bd7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105fb575f80fd5b5061037761060a366004612ccd565b6114bf565b34801561061a575f80fd5b50610377610629366004612b08565b6115a0565b348015610639575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066c575f80fd5b5061037761067b366004612ccd565b6115ec565b34801561068b575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106be575f80fd5b506103776106cd366004612ce8565b6119a5565b3480156106dd575f80fd5b506102bd621e848081565b3480156106f3575f80fd5b506102bd60015481565b6002546001600160a81b90910460ff16111561072c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036107a6576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054908190036107e3576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80556107f08183611a54565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff16111561086b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036108e5576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1680610984576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610213565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a259190612d12565b9050848110610ba3576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610ab3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad79190612d29565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610b30575f80fd5b505af1158015610b42573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610b8191815260200190565b60405180910390a25f838152600360205260409020805460ff19169055610bdf565b6040517fcf4791810000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610213565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610c3a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b5f845167ffffffffffffffff811115610cbe57610cbe6129c0565b604051908082528060200260200182016040528015610d1557816020015b6040805160a0810182525f808252602080830182905292820181905260608201819052608082015282525f19909201910181610cdc5790505b5090505f5b8551811015611223575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9e11893888481518110610d6557610d65612d48565b60200260200101516040518263ffffffff1660e01b8152600401610d899190612da3565b5f60405180830381865afa158015610da3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dca9190810190612eee565b60608101516040517fad66a5f100000000000000000000000000000000000000000000000000000000815261ffff90911660048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ad66a5f190602401602060405180830381865afa158015610e52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e769190612d12565b816080015114610ee2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f74206120546f6b656e2042726964676520564141000000000000000000006044820152606401610213565b60e08101516040517fea63738d0000000000000000000000000000000000000000000000000000000081525f916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ea63738d91610f4c91600401612da3565b5f60405180830381865afa158015610f66573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f8d919081019061300d565b905030816080015114801561102c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d91906130d1565b61ffff168160a0015161ffff16145b6110b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f546f6b656e20776173206e6f742073656e7420746f207468697320616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c3f511c18985815181106110f9576110f9612d48565b60200260200101516040518263ffffffff1660e01b815260040161111d9190612da3565b5f604051808303815f875af1158015611138573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261115f91908101906130ec565b505f61117382606001518360400151611da2565b90505f61117f82611ef2565b6020840151909150600860ff831611156111b65761119e60088361314b565b6111a990600a613244565b6111b39082613252565b90505b6040518060a0016040528085604001518152602001856060015161ffff168152602001846001600160a01b03168152602001828152602001856020015181525087878151811061120857611208612d48565b60200260200101819052505050505050806001019050610d1a565b506112318682868686611fbe565b505050505050565b602461124e600267ffffffffffffffff613269565b61125891906132b4565b67ffffffffffffffff1681565b6002546001600160a01b031633146112a55760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff16111561133f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b031633146113a35760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b479050805f036113df576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f811461141e576040519150601f19603f3d011682016040523d82523d5f602084013e611423565b606091505b5050905080611473576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f600482015230602482015233604482015260648101839052608401610213565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a01b031633146114ff5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b6001600160a01b03811661153f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146115e05760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b6115e9816121dc565b50565b6002546001600160a81b90910460ff16111561161b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b0316331461167f5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b60025474010000000000000000000000000000000000000000900460ff166001036116d6576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f03611724576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610213565b306001600160a01b03821603611768576040517f38e04bf2000000000000000000000000000000000000000000000000000000008152306004820152602401610213565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156117e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118099190612d12565b90508015611939576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af115801561189a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118be9190612d29565b905080611937576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301528416604482015260648101839052608401610213565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b6004546001600160a01b03163314611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e6f7420616c6c6f77656420746f20736574207265676973746572656420736560448201527f6e646572000000000000000000000000000000000000000000000000000000006064820152608401610213565b61ffff9091165f90815260056020526040902055565b6040815114611a9c578051604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526102139290600401918252602082015260400190565b5f8082806020019051810190611ab291906132dc565b90925090506001600160a01b038216611ac9573391505b620493e0811015611ada5750620493e05b621e8480811115611aeb5750621e84805b6040517fc23ee3c300000000000000000000000000000000000000000000000000000000815261ffff7f00000000000000000000000000000000000000000000000000000000000000001660048201525f6024820181905260448201839052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c23ee3c39060640160408051808303815f875af1158015611b9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bbe9190613308565b50905034811115611c04576040517f491a2bb100000000000000000000000000000000000000000000000000000000815234600482015260248101829052604401610213565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634b5ca6f4837f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008a604051602001611c8a91815260200190565b6040516020818303038152906040525f897f00000000000000000000000000000000000000000000000000000000000000008c6040518963ffffffff1660e01b8152600401611cdf979695949392919061332a565b60206040518083038185885af1158015611cfb573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611d209190613383565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03168267ffffffffffffffff167fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e47089604051611d9291815260200190565b60405180910390a4505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2391906130d1565b61ffff168361ffff1614611ee0576040517f1ff1e28600000000000000000000000000000000000000000000000000000000815261ffff84166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631ff1e28690604401602060405180830381865afa158015611eb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611edb919061339c565b611ee9565b611ee9826127af565b90505b92915050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290515f9182916001600160a01b03851691611f62916133b7565b5f60405180830381855afa9150503d805f8114611f9a576040519150601f19603f3d011682016040523d82523d5f602084013e611f9f565b606091505b5091505080806020019051810190611fb791906133cd565b9392505050565b5f8181526006602052604090205460ff1615612009576040517f56bc34a100000000000000000000000000000000000000000000000000000000815260048101829052602401610213565b5f818152600660205260409020805460ff1916600117905561ffff82167f0000000000000000000000000000000000000000000000000000000000000000146120aa576040517f857c0bad00000000000000000000000000000000000000000000000000000000815261ffff831660048201527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610213565b83516001146120f25783516040517f312b0033000000000000000000000000000000000000000000000000000000008152600481019190915260016024820152604401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316845f8151811061212e5761212e612d48565b6020026020010151604001516001600160a01b0316146121d057835f8151811061215a5761215a612d48565b6020026020010151604001517f00000000000000000000000000000000000000000000000000000000000000006040517f7674dcce0000000000000000000000000000000000000000000000000000000081526004016102139291906001600160a01b0392831681529116602082015260400190565b826112313382886127f3565b6002546001600160a81b90910460ff16111561220b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f9081906122499060209085018101908501613442565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b855181101561276a575f86828151811061229157612291612d48565b602002602001015190505f8683815181106122ae576122ae612d48565b602002602001015190505f826040516024016122d991906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061236f9085906133b7565b5f604051808303815f865af19150503d805f81146123a8576040519150601f19603f3d011682016040523d82523d5f602084013e6123ad565b606091505b50915091505f8280156123c1575081516020145b156123dd57818060200190518101906123da9190612d12565b90505b805f0361243e576123ee858a613501565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161242b91815260200190565b60405180910390a2505050505050612762565b808511156124a7575f6124518287613514565b905061245d818b613501565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8260405161249d91815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612524573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125489190612d12565b101580156125565750876001145b156126bb576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156125e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126049190612d29565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b15801561265d575f80fd5b505af115801561266f573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f3866040516126ae91815260200190565b60405180910390a261275b565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f81815260038352839020805460ff191660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b600101612275565b50612776836001613501565b6001558115610bdf57815f8082825461278f9190613501565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b5f60a082901c156127ef576040517f33b960d000000000000000000000000000000000000000000000000000000000815260048101839052602401610213565b5090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614612891576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461292f576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f0000000000000000000000000000000000000000000000000000000000000000836040516129aa929190613527565b60405180910390a26129bb816121dc565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff81118282101715612a1057612a106129c0565b60405290565b604051610160810167ffffffffffffffff81118282101715612a1057612a106129c0565b604051610100810167ffffffffffffffff81118282101715612a1057612a106129c0565b604051601f8201601f1916810167ffffffffffffffff81118282101715612a8757612a876129c0565b604052919050565b5f67ffffffffffffffff821115612aa857612aa86129c0565b50601f01601f191660200190565b5f82601f830112612ac5575f80fd5b8135612ad8612ad382612a8f565b612a5e565b818152846020838601011115612aec575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215612b18575f80fd5b813567ffffffffffffffff811115612b2e575f80fd5b612b3a84828501612ab6565b949350505050565b6001600160a01b03811681146115e9575f80fd5b5f805f60608486031215612b68575f80fd5b8335612b7381612b42565b95602085013595506040909401359392505050565b5f60208284031215612b98575f80fd5b5035919050565b5f67ffffffffffffffff821115612bb857612bb86129c0565b5060051b60200190565b61ffff811681146115e9575f80fd5b8035612bdc81612bc2565b919050565b5f805f805f60a08688031215612bf5575f80fd5b853567ffffffffffffffff80821115612c0c575f80fd5b612c1889838a01612ab6565b9650602091508188013581811115612c2e575f80fd5b8801601f81018a13612c3e575f80fd5b8035612c4c612ad382612b9f565b81815260059190911b8201840190848101908c831115612c6a575f80fd5b8584015b83811015612ca057803586811115612c84575f80fd5b612c928f8983890101612ab6565b845250918601918601612c6e565b50985050505060408801359450612cbc91505060608701612bd1565b949793965091946080013592915050565b5f60208284031215612cdd575f80fd5b8135611fb781612b42565b5f8060408385031215612cf9575f80fd5b8235612d0481612bc2565b946020939093013593505050565b5f60208284031215612d22575f80fd5b5051919050565b5f60208284031215612d39575f80fd5b81518015158114611fb7575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ee96020830184612d75565b805160ff81168114612bdc575f80fd5b805163ffffffff81168114612bdc575f80fd5b8051612bdc81612bc2565b805167ffffffffffffffff81168114612bdc575f80fd5b5f82601f830112612e09575f80fd5b8151612e17612ad382612a8f565b818152846020838601011115612e2b575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112612e56575f80fd5b81516020612e66612ad383612b9f565b82815260079290921b84018101918181019086841115612e84575f80fd5b8286015b84811015612ee35760808189031215612e9f575f80fd5b612ea76129ed565b8151815284820151858201526040612ec0818401612db5565b908201526060612ed1838201612db5565b90820152835291830191608001612e88565b509695505050505050565b5f60208284031215612efe575f80fd5b815167ffffffffffffffff80821115612f15575f80fd5b908301906101608286031215612f29575f80fd5b612f31612a16565b612f3a83612db5565b8152612f4860208401612dc5565b6020820152612f5960408401612dc5565b6040820152612f6a60608401612dd8565b606082015260808301516080820152612f8560a08401612de3565b60a0820152612f9660c08401612db5565b60c082015260e083015182811115612fac575f80fd5b612fb887828601612dfa565b60e083015250610100612fcc818501612dc5565b908201526101208381015183811115612fe3575f80fd5b612fef88828701612e47565b91830191909152506101409283015192810192909252509392505050565b5f6020828403121561301d575f80fd5b815167ffffffffffffffff80821115613034575f80fd5b908301906101008286031215613048575f80fd5b613050612a3a565b61305983612db5565b8152602083015160208201526040830151604082015261307b60608401612dd8565b60608201526080830151608082015261309660a08401612dd8565b60a082015260c083015160c082015260e0830151828111156130b6575f80fd5b6130c287828601612dfa565b60e08301525095945050505050565b5f602082840312156130e1575f80fd5b8151611fb781612bc2565b5f602082840312156130fc575f80fd5b815167ffffffffffffffff811115613112575f80fd5b612b3a84828501612dfa565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff8281168282160390811115611eec57611eec61311e565b600181815b8085111561319e57815f19048211156131845761318461311e565b8085161561319157918102915b93841c9390800290613169565b509250929050565b5f826131b457506001611eec565b816131c057505f611eec565b81600181146131d657600281146131e0576131fc565b6001915050611eec565b60ff8411156131f1576131f161311e565b50506001821b611eec565b5060208310610133831016604e8410600b841016171561321f575081810a611eec565b6132298383613164565b805f190482111561323c5761323c61311e565b029392505050565b5f611ee960ff8416836131a6565b8082028115828204841417611eec57611eec61311e565b5f67ffffffffffffffff808416806132a8577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156132d5576132d561311e565b5092915050565b5f80604083850312156132ed575f80fd5b82516132f881612b42565b6020939093015192949293505050565b5f8060408385031215613319575f80fd5b505080516020909101519092909150565b5f61ffff808a1683526001600160a01b03808a16602085015260e0604085015261335760e085018a612d75565b925087606085015286608085015281861660a085015280851660c0850152505098975050505050505050565b5f60208284031215613393575f80fd5b611ee982612de3565b5f602082840312156133ac575f80fd5b8151611fb781612b42565b5f82518060208501845e5f920191825250919050565b5f602082840312156133dd575f80fd5b611ee982612db5565b5f82601f8301126133f5575f80fd5b81516020613405612ad383612b9f565b8083825260208201915060208460051b870101935086841115613426575f80fd5b602086015b84811015612ee3578051835291830191830161342b565b5f8060408385031215613453575f80fd5b825167ffffffffffffffff8082111561346a575f80fd5b818501915085601f83011261347d575f80fd5b8151602061348d612ad383612b9f565b82815260059290921b840181019181810190898411156134ab575f80fd5b948201945b838610156134d25785516134c381612b42565b825294820194908201906134b0565b918801519196509093505050808211156134ea575f80fd5b506134f7858286016133e6565b9150509250929050565b80820180821115611eec57611eec61311e565b81810381811115611eec57611eec61311e565b828152604060208201525f612b3a6040830184612d7556fea2646970667358221220f717c572ffdbd845fa6d228cda93451562e002a575d37a71da4d2935f9bfee0564736f6c63430008190033", - "deployedBytecode": "0x6080604052600436106101bc575f3560e01c80635c975abb116100f2578063a6f9dae111610092578063da25b72511610062578063da25b72514610680578063dd12d68b146106b3578063e3f5aa51146106d2578063f4427c2c146106e8575f80fd5b8063a6f9dae1146105f0578063bddc966e1461060f578063c6328a461461062e578063ce5494bb14610661575f80fd5b806384acd1bb116100cd57806384acd1bb146105575780638da5cb5b1461058a5780639890220b146105a95780639b7bb847146105bd575f80fd5b80635c975abb146104d2578063713d1a4e146105155780638456cb5914610543575f80fd5b80633f4ba83a1161015d578063529dca3211610138578063529dca32146103fe57806354d20cc2146104115780635a7287cf146104aa5780635bc105c0146104be575f80fd5b80633f4ba83a14610398578063446a9695146103ac5780634ece6b17146103ea575f80fd5b8063256359a811610198578063256359a8146102fe578063291347681461033157806329f404cd146103645780632b83cccd14610379575f80fd5b806231d11514610257578063091d2788146102a75780631bad5957146102cb575f80fd5b36610253576002546001600160a01b031661021c576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b348015610262575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b2575f80fd5b506102bd620493e081565b60405190815260200161029e565b3480156102d6575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610309575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033c575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b610377610372366004612b08565b6106fd565b005b348015610384575f80fd5b50610377610393366004612b56565b61083c565b3480156103a3575f80fd5b50610377610bfa565b3480156103b7575f80fd5b506103da6103c6366004612b88565b60066020525f908152604090205460ff1681565b604051901515815260200161029e565b3480156103f5575f80fd5b506102bd604081565b61037761040c366004612be1565b610ca3565b34801561041c575f80fd5b5060408051808201909152601581527f726563656976654d6573736167652862797465732900000000000000000000006020909101526104797ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161029e565b3480156104b5575f80fd5b506102bd5f5481565b3480156104c9575f80fd5b506102bd611239565b3480156104dd575f80fd5b506002546105039074010000000000000000000000000000000000000000900460ff1681565b60405160ff909116815260200161029e565b348015610520575f80fd5b506103da61052f366004612b88565b60036020525f908152604090205460ff1681565b34801561054e575f80fd5b50610377611265565b348015610562575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b348015610595575f80fd5b5060025461028a906001600160a01b031681565b3480156105b4575f80fd5b506102bd61130e565b3480156105c8575f80fd5b506102bd7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105fb575f80fd5b5061037761060a366004612ccd565b6114bf565b34801561061a575f80fd5b50610377610629366004612b08565b6115a0565b348015610639575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066c575f80fd5b5061037761067b366004612ccd565b6115ec565b34801561068b575f80fd5b5061028a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106be575f80fd5b506103776106cd366004612ce8565b6119a5565b3480156106dd575f80fd5b506102bd621e848081565b3480156106f3575f80fd5b506102bd60015481565b6002546001600160a81b90910460ff16111561072c576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036107a6576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8054908190036107e3576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80556107f08183611a54565b60405181815233907f1f66db2d1b55aa051fdccd3766b268ce96758f0fd6741988a4ccf060e0e0a3999060200160405180910390a250506002805460ff60a81b1916600160a81b179055565b6002546001600160a81b90910460ff16111561086b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b191675020000000000000000000000000000000000000000001780825560ff740100000000000000000000000000000000000000009091041690036108e5576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290525f9060800160408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1680610984576040517f35433ff10000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610213565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a259190612d12565b9050848110610ba3576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610ab3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad79190612d29565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b158015610b30575f80fd5b505af1158015610b42573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f386604051610b8191815260200190565b60405180910390a25f838152600360205260409020805460ff19169055610bdf565b6040517fcf4791810000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610213565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b03163314610c3a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b5f845167ffffffffffffffff811115610cbe57610cbe6129c0565b604051908082528060200260200182016040528015610d1557816020015b6040805160a0810182525f808252602080830182905292820181905260608201819052608082015282525f19909201910181610cdc5790505b5090505f5b8551811015611223575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9e11893888481518110610d6557610d65612d48565b60200260200101516040518263ffffffff1660e01b8152600401610d899190612da3565b5f60405180830381865afa158015610da3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dca9190810190612eee565b60608101516040517fad66a5f100000000000000000000000000000000000000000000000000000000815261ffff90911660048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ad66a5f190602401602060405180830381865afa158015610e52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e769190612d12565b816080015114610ee2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f74206120546f6b656e2042726964676520564141000000000000000000006044820152606401610213565b60e08101516040517fea63738d0000000000000000000000000000000000000000000000000000000081525f916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ea63738d91610f4c91600401612da3565b5f60405180830381865afa158015610f66573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f8d919081019061300d565b905030816080015114801561102c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d91906130d1565b61ffff168160a0015161ffff16145b6110b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f546f6b656e20776173206e6f742073656e7420746f207468697320616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c3f511c18985815181106110f9576110f9612d48565b60200260200101516040518263ffffffff1660e01b815260040161111d9190612da3565b5f604051808303815f875af1158015611138573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261115f91908101906130ec565b505f61117382606001518360400151611da2565b90505f61117f82611ef2565b6020840151909150600860ff831611156111b65761119e60088361314b565b6111a990600a613244565b6111b39082613252565b90505b6040518060a0016040528085604001518152602001856060015161ffff168152602001846001600160a01b03168152602001828152602001856020015181525087878151811061120857611208612d48565b60200260200101819052505050505050806001019050610d1a565b506112318682868686611fbe565b505050505050565b602461124e600267ffffffffffffffff613269565b61125891906132b4565b67ffffffffffffffff1681565b6002546001600160a01b031633146112a55760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff16111561133f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b031633146113a35760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b479050805f036113df576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f811461141e576040519150601f19603f3d011682016040523d82523d5f602084013e611423565b606091505b5050905080611473576040517fcd3f16590000000000000000000000000000000000000000000000000000000081525f600482015230602482015233604482015260648101839052608401610213565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a01b031633146114ff5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b6001600160a01b03811661153f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146115e05760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b6115e9816121dc565b50565b6002546001600160a81b90910460ff16111561161b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1981167502000000000000000000000000000000000000000000179091556001600160a01b0316331461167f5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610213565b60025474010000000000000000000000000000000000000000900460ff166001036116d6576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f03611724576040517f38e04bf20000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610213565b306001600160a01b03821603611768576040517f38e04bf2000000000000000000000000000000000000000000000000000000008152306004820152602401610213565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156117e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118099190612d12565b90508015611939576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af115801561189a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118be9190612d29565b905080611937576040517fcd3f16590000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301528416604482015260648101839052608401610213565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b6004546001600160a01b03163314611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e6f7420616c6c6f77656420746f20736574207265676973746572656420736560448201527f6e646572000000000000000000000000000000000000000000000000000000006064820152608401610213565b61ffff9091165f90815260056020526040902055565b6040815114611a9c578051604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526102139290600401918252602082015260400190565b5f8082806020019051810190611ab291906132dc565b90925090506001600160a01b038216611ac9573391505b620493e0811015611ada5750620493e05b621e8480811115611aeb5750621e84805b6040517fc23ee3c300000000000000000000000000000000000000000000000000000000815261ffff7f00000000000000000000000000000000000000000000000000000000000000001660048201525f6024820181905260448201839052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c23ee3c39060640160408051808303815f875af1158015611b9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bbe9190613308565b50905034811115611c04576040517f491a2bb100000000000000000000000000000000000000000000000000000000815234600482015260248101829052604401610213565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634b5ca6f4837f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008a604051602001611c8a91815260200190565b6040516020818303038152906040525f897f00000000000000000000000000000000000000000000000000000000000000008c6040518963ffffffff1660e01b8152600401611cdf979695949392919061332a565b60206040518083038185885af1158015611cfb573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611d209190613383565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03168267ffffffffffffffff167fa83d78b13a863892266b4308df232e47309c90988775e5bb775241801d41e47089604051611d9291815260200190565b60405180910390a4505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2391906130d1565b61ffff168361ffff1614611ee0576040517f1ff1e28600000000000000000000000000000000000000000000000000000000815261ffff84166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631ff1e28690604401602060405180830381865afa158015611eb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611edb919061339c565b611ee9565b611ee9826127af565b90505b92915050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290515f9182916001600160a01b03851691611f62916133b7565b5f60405180830381855afa9150503d805f8114611f9a576040519150601f19603f3d011682016040523d82523d5f602084013e611f9f565b606091505b5091505080806020019051810190611fb791906133cd565b9392505050565b5f8181526006602052604090205460ff1615612009576040517f56bc34a100000000000000000000000000000000000000000000000000000000815260048101829052602401610213565b5f818152600660205260409020805460ff1916600117905561ffff82167f0000000000000000000000000000000000000000000000000000000000000000146120aa576040517f857c0bad00000000000000000000000000000000000000000000000000000000815261ffff831660048201527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610213565b83516001146120f25783516040517f312b0033000000000000000000000000000000000000000000000000000000008152600481019190915260016024820152604401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316845f8151811061212e5761212e612d48565b6020026020010151604001516001600160a01b0316146121d057835f8151811061215a5761215a612d48565b6020026020010151604001517f00000000000000000000000000000000000000000000000000000000000000006040517f7674dcce0000000000000000000000000000000000000000000000000000000081526004016102139291906001600160a01b0392831681529116602082015260400190565b826112313382886127f3565b6002546001600160a81b90910460ff16111561220b576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916750200000000000000000000000000000000000000000017905580515f9081906122499060209085018101908501613442565b600154600254929450909250905f9074010000000000000000000000000000000000000000900460ff16815b855181101561276a575f86828151811061229157612291612d48565b602002602001015190505f8683815181106122ae576122ae612d48565b602002602001015190505f826040516024016122d991906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061236f9085906133b7565b5f604051808303815f865af19150503d805f81146123a8576040519150601f19603f3d011682016040523d82523d5f602084013e6123ad565b606091505b50915091505f8280156123c1575081516020145b156123dd57818060200190518101906123da9190612d12565b90505b805f0361243e576123ee858a613501565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161242b91815260200190565b60405180910390a2505050505050612762565b808511156124a7575f6124518287613514565b905061245d818b613501565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8260405161249d91815260200190565b60405180910390a2505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015285907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612524573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125489190612d12565b101580156125565750876001145b156126bb576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156125e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126049190612d29565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b15801561265d575f80fd5b505af115801561266f573d5f803e3d5ffd5b50505050856001600160a01b03167f36d504751ef1ab82703e2675ab3d5e230c810cd1962cec9f40d96f9ca0e881f3866040516126ae91815260200190565b60405180910390a261275b565b604080516001600160a01b0388166020820152908101869052606081018b90525f9060800160408051601f1981840301815282825280516020918201205f81815260038352839020805460ff191660011790558984529083018e90529082018b905291506001600160a01b0388169082907f207f76ffdb73024e39870ab39aa1ad395275ce4714e752c30ddd8fea79a916e89060600160405180910390a3505b5050505050505b600101612275565b50612776836001613501565b6001558115610bdf57815f8082825461278f9190613501565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b5f60a082901c156127ef576040517f33b960d000000000000000000000000000000000000000000000000000000000815260048101839052602401610213565b5090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614612891576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461292f576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610213565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f0000000000000000000000000000000000000000000000000000000000000000836040516129aa929190613527565b60405180910390a26129bb816121dc565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff81118282101715612a1057612a106129c0565b60405290565b604051610160810167ffffffffffffffff81118282101715612a1057612a106129c0565b604051610100810167ffffffffffffffff81118282101715612a1057612a106129c0565b604051601f8201601f1916810167ffffffffffffffff81118282101715612a8757612a876129c0565b604052919050565b5f67ffffffffffffffff821115612aa857612aa86129c0565b50601f01601f191660200190565b5f82601f830112612ac5575f80fd5b8135612ad8612ad382612a8f565b612a5e565b818152846020838601011115612aec575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215612b18575f80fd5b813567ffffffffffffffff811115612b2e575f80fd5b612b3a84828501612ab6565b949350505050565b6001600160a01b03811681146115e9575f80fd5b5f805f60608486031215612b68575f80fd5b8335612b7381612b42565b95602085013595506040909401359392505050565b5f60208284031215612b98575f80fd5b5035919050565b5f67ffffffffffffffff821115612bb857612bb86129c0565b5060051b60200190565b61ffff811681146115e9575f80fd5b8035612bdc81612bc2565b919050565b5f805f805f60a08688031215612bf5575f80fd5b853567ffffffffffffffff80821115612c0c575f80fd5b612c1889838a01612ab6565b9650602091508188013581811115612c2e575f80fd5b8801601f81018a13612c3e575f80fd5b8035612c4c612ad382612b9f565b81815260059190911b8201840190848101908c831115612c6a575f80fd5b8584015b83811015612ca057803586811115612c84575f80fd5b612c928f8983890101612ab6565b845250918601918601612c6e565b50985050505060408801359450612cbc91505060608701612bd1565b949793965091946080013592915050565b5f60208284031215612cdd575f80fd5b8135611fb781612b42565b5f8060408385031215612cf9575f80fd5b8235612d0481612bc2565b946020939093013593505050565b5f60208284031215612d22575f80fd5b5051919050565b5f60208284031215612d39575f80fd5b81518015158114611fb7575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ee96020830184612d75565b805160ff81168114612bdc575f80fd5b805163ffffffff81168114612bdc575f80fd5b8051612bdc81612bc2565b805167ffffffffffffffff81168114612bdc575f80fd5b5f82601f830112612e09575f80fd5b8151612e17612ad382612a8f565b818152846020838601011115612e2b575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112612e56575f80fd5b81516020612e66612ad383612b9f565b82815260079290921b84018101918181019086841115612e84575f80fd5b8286015b84811015612ee35760808189031215612e9f575f80fd5b612ea76129ed565b8151815284820151858201526040612ec0818401612db5565b908201526060612ed1838201612db5565b90820152835291830191608001612e88565b509695505050505050565b5f60208284031215612efe575f80fd5b815167ffffffffffffffff80821115612f15575f80fd5b908301906101608286031215612f29575f80fd5b612f31612a16565b612f3a83612db5565b8152612f4860208401612dc5565b6020820152612f5960408401612dc5565b6040820152612f6a60608401612dd8565b606082015260808301516080820152612f8560a08401612de3565b60a0820152612f9660c08401612db5565b60c082015260e083015182811115612fac575f80fd5b612fb887828601612dfa565b60e083015250610100612fcc818501612dc5565b908201526101208381015183811115612fe3575f80fd5b612fef88828701612e47565b91830191909152506101409283015192810192909252509392505050565b5f6020828403121561301d575f80fd5b815167ffffffffffffffff80821115613034575f80fd5b908301906101008286031215613048575f80fd5b613050612a3a565b61305983612db5565b8152602083015160208201526040830151604082015261307b60608401612dd8565b60608201526080830151608082015261309660a08401612dd8565b60a082015260c083015160c082015260e0830151828111156130b6575f80fd5b6130c287828601612dfa565b60e08301525095945050505050565b5f602082840312156130e1575f80fd5b8151611fb781612bc2565b5f602082840312156130fc575f80fd5b815167ffffffffffffffff811115613112575f80fd5b612b3a84828501612dfa565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60ff8281168282160390811115611eec57611eec61311e565b600181815b8085111561319e57815f19048211156131845761318461311e565b8085161561319157918102915b93841c9390800290613169565b509250929050565b5f826131b457506001611eec565b816131c057505f611eec565b81600181146131d657600281146131e0576131fc565b6001915050611eec565b60ff8411156131f1576131f161311e565b50506001821b611eec565b5060208310610133831016604e8410600b841016171561321f575081810a611eec565b6132298383613164565b805f190482111561323c5761323c61311e565b029392505050565b5f611ee960ff8416836131a6565b8082028115828204841417611eec57611eec61311e565b5f67ffffffffffffffff808416806132a8577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b92169190910492915050565b67ffffffffffffffff8281168282160390808211156132d5576132d561311e565b5092915050565b5f80604083850312156132ed575f80fd5b82516132f881612b42565b6020939093015192949293505050565b5f8060408385031215613319575f80fd5b505080516020909101519092909150565b5f61ffff808a1683526001600160a01b03808a16602085015260e0604085015261335760e085018a612d75565b925087606085015286608085015281861660a085015280851660c0850152505098975050505050505050565b5f60208284031215613393575f80fd5b611ee982612de3565b5f602082840312156133ac575f80fd5b8151611fb781612b42565b5f82518060208501845e5f920191825250919050565b5f602082840312156133dd575f80fd5b611ee982612db5565b5f82601f8301126133f5575f80fd5b81516020613405612ad383612b9f565b8083825260208201915060208460051b870101935086841115613426575f80fd5b602086015b84811015612ee3578051835291830191830161342b565b5f8060408385031215613453575f80fd5b825167ffffffffffffffff8082111561346a575f80fd5b818501915085601f83011261347d575f80fd5b8151602061348d612ad383612b9f565b82815260059290921b840181019181810190898411156134ab575f80fd5b948201945b838610156134d25785516134c381612b42565b825294820194908201906134b0565b918801519196509093505050808211156134ea575f80fd5b506134f7858286016133e6565b9150509250929050565b80820180821115611eec57611eec61311e565b81810381811115611eec57611eec61311e565b828152604060208201525f612b3a6040830184612d7556fea2646970667358221220f717c572ffdbd845fa6d228cda93451562e002a575d37a71da4d2935f9bfee0564736f6c63430008190033", + "bytecode": "0x610180604052348015610010575f80fd5b5060405161386238038061386283398101604081905261002f91610244565b84818382818b8b838b8b6001600160a01b038516158061005657506001600160a01b038416155b8061006857506001600160a01b038316155b8061007a57506001600160a01b038216155b156100985760405163d92e233d60e01b815260040160405180910390fd5b805f036100b857604051637c946ed760e01b815260040160405180910390fd5b60246100cc60026001600160401b036102be565b6100d691906102ef565b6001600160401b0316811115610135578060246100fb60026001600160401b036102be565b61010591906102ef565b604051637ae5968560e01b815260048101929092526001600160401b031660248201526044015b60405180910390fd5b6001600160a01b0394851660805292841660a05290831660c052821660e052610100526002805460ff60a81b1960ff60a01b19339081166001600160a81b031990931692909217600160a01b1716600160a81b179091559281166101205290811661014052600580546001600160a01b03191690921790915591821661016052508316159050806101cd57506001600160a01b038116155b156101eb5760405163d92e233d60e01b815260040160405180910390fd5b61ffff83111561021957604051637ae5968560e01b81526004810184905261ffff602482015260440161012c565b5050610100525061032292505050565b80516001600160a01b038116811461023f575f80fd5b919050565b5f805f805f805f60e0888a03121561025a575f80fd5b61026388610229565b965061027160208901610229565b955061027f60408901610229565b945061028d60608901610229565b9350608088015192506102a260a08901610229565b91506102b060c08901610229565b905092959891949750929550565b5f6001600160401b03838116806102e357634e487b7160e01b5f52601260045260245ffd5b92169190910492915050565b6001600160401b0382811682821603908082111561031b57634e487b7160e01b5f52601160045260245ffd5b5092915050565b60805160a05160c05160e0516101005161012051610140516101605161340c6104565f395f818161066c0152818161092401528181610a1e01528181610ba50152611a6201525f81816105630152818161084501528181610aa4015261199d01525f6106be01525f81816105e801528181611c0701528181611c5d01528181611e9401528181611fb401528181612023015261284901525f818161035401528181611fd501528181612760015281816127cf01526127fe01525f818161032101528181611ecb01528181611f84015281816126c2015261273101525f8181610387015261225501525f8181610265015281816112aa0152818161134a01528181611711015281816117cb0152818161185501528181611cd301528181611d47015281816123d0015261247e015261340c5ff3fe6080604052600436106101d2575f3560e01c80637ce1ffeb116100fd578063a8b2ae0211610092578063da25b72511610062578063da25b725146106ad578063dd12d68b146106e0578063e3f5aa51146106ff578063f4427c2c14610715575f80fd5b8063a8b2ae0214610629578063bddc966e1461063c578063c6328a461461065b578063ce5494bb1461068e575f80fd5b80639890220b116100cd5780639890220b146105a4578063992c3e4b146105b85780639b7bb847146105d7578063a6f9dae11461060a575f80fd5b80637ce1ffeb146105285780638456cb591461053e57806384acd1bb146105525780638da5cb5b14610585575f80fd5b8063446a9695116101735780635a7287cf116101435780635a7287cf146104bb5780635bc105c0146104cf5780635c975abb146104e35780637424ddc814610515575f80fd5b8063446a9695146103bf5780634ece6b17146103ed578063529dca321461040f57806354d20cc214610422575f80fd5b80631bad5957116101ae5780631bad595714610310578063256359a81461034357806329134768146103765780633f4ba83a146103a9575f80fd5b806231d1151461025457806307d9c534146102a45780631b2e7f0a146102e2575f80fd5b36610250576002546001600160a01b03166102195760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b34801561025f575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102af575f80fd5b506102d26102be36600461288d565b60036020525f908152604090205460ff1681565b604051901515815260200161029b565b3480156102ed575f80fd5b506102d26102fc36600461288d565b60046020525f908152604090205460ff1681565b34801561031b575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b34801561034e575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b348015610381575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b4575f80fd5b506103bd61072a565b005b3480156103ca575f80fd5b506102d26103d936600461288d565b60076020525f908152604090205460ff1681565b3480156103f8575f80fd5b50610401604081565b60405190815260200161029b565b6103bd61041d366004612a15565b6107c2565b34801561042d575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261048a7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161029b565b3480156104c6575f80fd5b506104015f5481565b3480156104da575f80fd5b50610401610d24565b3480156104ee575f80fd5b5060025461050390600160a01b900460ff1681565b60405160ff909116815260200161029b565b6103bd610523366004612b01565b610d50565b348015610533575f80fd5b50610401620493e081565b348015610549575f80fd5b506103bd610f65565b34801561055d575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b348015610590575f80fd5b50600254610287906001600160a01b031681565b3480156105af575f80fd5b5061040161100e565b3480156105c3575f80fd5b506103bd6105d2366004612b4f565b61117b565b3480156105e2575f80fd5b506104017f000000000000000000000000000000000000000000000000000000000000000081565b348015610615575f80fd5b506103bd610624366004612b81565b6114bf565b348015610634575f80fd5b506008610401565b348015610647575f80fd5b506103bd610656366004612b01565b611587565b348015610666575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b348015610699575f80fd5b506103bd6106a8366004612b81565b6115d3565b3480156106b8575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b3480156106eb575f80fd5b506103bd6106fa366004612b9c565b611905565b34801561070a575f80fd5b50610401621e848081565b348015610720575f80fd5b5061040160015481565b6002546001600160a01b0316331461076a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b5f845167ffffffffffffffff8111156107dd576107dd6128a4565b60405190808252806020026020018201604052801561083457816020015b6040805160a0810182525f808252602080830182905292820181905260608201819052608082015282525f199092019101816107fb5790505b5090505f5b8551811015610d0e575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9e1189388848151811061088457610884612bc6565b60200260200101516040518263ffffffff1660e01b81526004016108a89190612c08565b5f60405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108e99190810190612d53565b60608101516040517fad66a5f100000000000000000000000000000000000000000000000000000000815261ffff90911660048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ad66a5f190602401602060405180830381865afa158015610971573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109959190612e72565b8160800151146109e75760405162461bcd60e51b815260206004820152601660248201527f4e6f74206120546f6b656e2042726964676520564141000000000000000000006044820152606401610210565b60e08101516040517fea63738d0000000000000000000000000000000000000000000000000000000081525f916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ea63738d91610a5191600401612c08565b5f60405180830381865afa158015610a6b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a929190810190612e89565b9050308160800151148015610b3157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b229190612f4d565b61ffff168160a0015161ffff16145b610ba35760405162461bcd60e51b815260206004820152602260248201527f546f6b656e20776173206e6f742073656e7420746f207468697320616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c3f511c1898581518110610be457610be4612bc6565b60200260200101516040518263ffffffff1660e01b8152600401610c089190612c08565b5f604051808303815f875af1158015610c23573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c4a9190810190612f68565b505f610c5e8260600151836040015161199a565b90505f610c6a82611aea565b6020840151909150600860ff83161115610ca157610c89600883612fae565b610c9490600a6130a7565b610c9e90826130b5565b90505b6040518060a0016040528085604001518152602001856060015161ffff168152602001846001600160a01b031681526020018281526020018560200151815250878781518110610cf357610cf3612bc6565b60200260200101819052505050505050806001019050610839565b50610d1c8682868686611bb6565b505050505050565b6024610d39600267ffffffffffffffff6130e0565b610d439190613106565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff161115610d7f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610dbd576040516313d0ff5960e31b815260040160405180910390fd5b5f54600881610dcd82601261312e565b610dd890600a613141565b610de2908461314c565b9050610def82601261312e565b610dfa90600a613141565b610e0490826130b5565b9050805f03610e2657604051637c946ed760e01b815260040160405180910390fd5b610e30818461312e565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f80610e7b858985611dbb565b90925090508015610f0157604051339082905f81818185875af1925050503d805f8114610ec3576040519150601f19603f3d011682016040523d82523d5f602084013e610ec8565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610f0c84600161315f565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b03163314610fa55760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff16111561103f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146110915760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b479050805f036110b457604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b505090508061112f5760405163cd3f165960e01b81525f600482015230602482015233604482015260648101839052608401610210565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff1611156111aa576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b9091041690036111e8576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680611293576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610210565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156112f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131b9190612e72565b90508481106114685760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611390573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b49190613172565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b1580156113f4575f80fd5b505af1158015611406573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c3219808760405161144691815260200190565b60405180910390a35f838152600460205260409020805460ff191690556114a4565b6040517fcf4791810000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610210565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b031633146114ff5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b6001600160a01b0381166115265760405163d92e233d60e01b815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146115c75760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b6115d0816120c9565b50565b6002546001600160a81b90910460ff161115611602576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146116545760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b600254600160a01b900460ff1660010361169a576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f036116cf57604051631c7025f960e11b81526001600160a01b0382166004820152602401610210565b306001600160a01b038216036116fa57604051631c7025f960e11b8152306004820152602401610210565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561175e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117829190612e72565b90508015611899576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611813573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118379190613172565b9050806118975760405163cd3f165960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301528416604482015260648101839052608401610210565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b6005546001600160a01b031633146119845760405162461bcd60e51b8152602060048201526024808201527f4e6f7420616c6c6f77656420746f20736574207265676973746572656420736560448201527f6e646572000000000000000000000000000000000000000000000000000000006064820152608401610210565b61ffff9091165f90815260066020526040902055565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1b9190612f4d565b61ffff168361ffff1614611ad8576040517f1ff1e28600000000000000000000000000000000000000000000000000000000815261ffff84166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631ff1e28690604401602060405180830381865afa158015611aaf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad39190613191565b611ae1565b611ae18261267c565b90505b92915050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290515f9182916001600160a01b03851691611b5a916131ac565b5f60405180830381855afa9150503d805f8114611b92576040519150601f19603f3d011682016040523d82523d5f602084013e611b97565b606091505b5091505080806020019051810190611baf91906131c2565b9392505050565b5f8181526007602052604090205460ff1615611be8576040516356bc34a160e01b815260048101829052602401610210565b5f818152600760205260409020805460ff1916600117905561ffff82167f000000000000000000000000000000000000000000000000000000000000000014611c89576040517f857c0bad00000000000000000000000000000000000000000000000000000000815261ffff831660048201527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610210565b8351600114611cd15783516040517f312b0033000000000000000000000000000000000000000000000000000000008152600481019190915260016024820152604401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316845f81518110611d0d57611d0d612bc6565b6020026020010151604001516001600160a01b031614611daf57835f81518110611d3957611d39612bc6565b6020026020010151604001517f00000000000000000000000000000000000000000000000000000000000000006040517f7674dcce0000000000000000000000000000000000000000000000000000000081526004016102109291906001600160a01b0392831681529116602082015260400190565b82610d1c3382886126c0565b5f806040845114611e05578351604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526102109290600401918252602082015260400190565b5f8085806020019051810190611e1b91906131db565b90925090506001600160a01b038216611e475760405163d92e233d60e01b815260040160405180910390fd5b620493e0811015611e585750620493e05b621e8480811115611e695750621e84805b6040517fc23ee3c300000000000000000000000000000000000000000000000000000000815261ffff7f00000000000000000000000000000000000000000000000000000000000000001660048201525f6024820181905260448201839052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c23ee3c39060640160408051808303815f875af1158015611f18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3c9190613207565b50905034811115611f82576040517f491a2bb100000000000000000000000000000000000000000000000000000000815234600482015260248101829052604401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634b5ca6f4827f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008c8b604051602001612010929190918252602082015260400190565b6040516020818303038152906040525f887f00000000000000000000000000000000000000000000000000000000000000008b6040518963ffffffff1660e01b81526004016120659796959493929190613229565b60206040518083038185885af1158015612081573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120a69190613282565b67ffffffffffffffff1694506120bc813461312e565b9350505050935093915050565b6002546001600160a81b90910460ff1611156120f8576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f908190819061212690602090860181019086016132f7565b5f81815260036020526040902054929550909350915060ff1615612160576040516356bc34a160e01b815260048101829052602401610210565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015612645575f8682815181106121a3576121a3612bc6565b602002602001015190505f8683815181106121c0576121c0612bc6565b602002602001015190505f826040516024016121eb91906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906122819085906131ac565b5f604051808303815f865af19150503d805f81146122ba576040519150601f19603f3d011682016040523d82523d5f602084013e6122bf565b606091505b50915091505f8280156122d3575081516020145b156122ef57818060200190518101906122ec9190612e72565b90505b805f0361235057612300858a61315f565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161233d91815260200190565b60405180910390a250505050505061263d565b808511156123b9575f612363828761312e565b905061236f818b61315f565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516123af91815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561241d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124419190612e72565b90508581101580156124535750886001145b156125875760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156124c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e89190613172565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015612528575f80fd5b505af115801561253a573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c3219808860405161257a91815260200190565b60405180910390a3612635565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b600101612187565b5081156114a457815f8082825461265c919061315f565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b5f60a082901c156126bc576040517f33b960d000000000000000000000000000000000000000000000000000000000815260048101839052602401610210565b5090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161461275e576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146127fc576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f0000000000000000000000000000000000000000000000000000000000000000836040516128779291906133be565b60405180910390a2612888816120c9565b505050565b5f6020828403121561289d575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156128db576128db6128a4565b60405290565b604051610160810167ffffffffffffffff811182821017156128db576128db6128a4565b604051610100810167ffffffffffffffff811182821017156128db576128db6128a4565b604051601f8201601f1916810167ffffffffffffffff81118282101715612952576129526128a4565b604052919050565b5f67ffffffffffffffff821115612973576129736128a4565b50601f01601f191660200190565b5f82601f830112612990575f80fd5b81356129a361299e8261295a565b612929565b8181528460208386010111156129b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156129ec576129ec6128a4565b5060051b60200190565b61ffff811681146115d0575f80fd5b8035612a10816129f6565b919050565b5f805f805f60a08688031215612a29575f80fd5b853567ffffffffffffffff80821115612a40575f80fd5b612a4c89838a01612981565b9650602091508188013581811115612a62575f80fd5b8801601f81018a13612a72575f80fd5b8035612a8061299e826129d3565b81815260059190911b8201840190848101908c831115612a9e575f80fd5b8584015b83811015612ad457803586811115612ab8575f80fd5b612ac68f8983890101612981565b845250918601918601612aa2565b50985050505060408801359450612af091505060608701612a05565b949793965091946080013592915050565b5f60208284031215612b11575f80fd5b813567ffffffffffffffff811115612b27575f80fd5b612b3384828501612981565b949350505050565b6001600160a01b03811681146115d0575f80fd5b5f805f60608486031215612b61575f80fd5b8335612b6c81612b3b565b95602085013595506040909401359392505050565b5f60208284031215612b91575f80fd5b8135611baf81612b3b565b5f8060408385031215612bad575f80fd5b8235612bb8816129f6565b946020939093013593505050565b634e487b7160e01b5f52603260045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ae16020830184612bda565b805160ff81168114612a10575f80fd5b805163ffffffff81168114612a10575f80fd5b8051612a10816129f6565b805167ffffffffffffffff81168114612a10575f80fd5b5f82601f830112612c6e575f80fd5b8151612c7c61299e8261295a565b818152846020838601011115612c90575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112612cbb575f80fd5b81516020612ccb61299e836129d3565b82815260079290921b84018101918181019086841115612ce9575f80fd5b8286015b84811015612d485760808189031215612d04575f80fd5b612d0c6128b8565b8151815284820151858201526040612d25818401612c1a565b908201526060612d36838201612c1a565b90820152835291830191608001612ced565b509695505050505050565b5f60208284031215612d63575f80fd5b815167ffffffffffffffff80821115612d7a575f80fd5b908301906101608286031215612d8e575f80fd5b612d966128e1565b612d9f83612c1a565b8152612dad60208401612c2a565b6020820152612dbe60408401612c2a565b6040820152612dcf60608401612c3d565b606082015260808301516080820152612dea60a08401612c48565b60a0820152612dfb60c08401612c1a565b60c082015260e083015182811115612e11575f80fd5b612e1d87828601612c5f565b60e083015250610100612e31818501612c2a565b908201526101208381015183811115612e48575f80fd5b612e5488828701612cac565b91830191909152506101409283015192810192909252509392505050565b5f60208284031215612e82575f80fd5b5051919050565b5f60208284031215612e99575f80fd5b815167ffffffffffffffff80821115612eb0575f80fd5b908301906101008286031215612ec4575f80fd5b612ecc612905565b612ed583612c1a565b81526020830151602082015260408301516040820152612ef760608401612c3d565b606082015260808301516080820152612f1260a08401612c3d565b60a082015260c083015160c082015260e083015182811115612f32575f80fd5b612f3e87828601612c5f565b60e08301525095945050505050565b5f60208284031215612f5d575f80fd5b8151611baf816129f6565b5f60208284031215612f78575f80fd5b815167ffffffffffffffff811115612f8e575f80fd5b612b3384828501612c5f565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115611ae457611ae4612f9a565b600181815b8085111561300157815f1904821115612fe757612fe7612f9a565b80851615612ff457918102915b93841c9390800290612fcc565b509250929050565b5f8261301757506001611ae4565b8161302357505f611ae4565b816001811461303957600281146130435761305f565b6001915050611ae4565b60ff84111561305457613054612f9a565b50506001821b611ae4565b5060208310610133831016604e8410600b8410161715613082575081810a611ae4565b61308c8383612fc7565b805f190482111561309f5761309f612f9a565b029392505050565b5f611ae160ff841683613009565b8082028115828204841417611ae457611ae4612f9a565b634e487b7160e01b5f52601260045260245ffd5b5f67ffffffffffffffff808416806130fa576130fa6130cc565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561312757613127612f9a565b5092915050565b81810381811115611ae457611ae4612f9a565b5f611ae18383613009565b5f8261315a5761315a6130cc565b500490565b80820180821115611ae457611ae4612f9a565b5f60208284031215613182575f80fd5b81518015158114611baf575f80fd5b5f602082840312156131a1575f80fd5b8151611baf81612b3b565b5f82518060208501845e5f920191825250919050565b5f602082840312156131d2575f80fd5b611ae182612c1a565b5f80604083850312156131ec575f80fd5b82516131f781612b3b565b6020939093015192949293505050565b5f8060408385031215613218575f80fd5b505080516020909101519092909150565b5f61ffff808a1683526001600160a01b03808a16602085015260e0604085015261325660e085018a612bda565b925087606085015286608085015281861660a085015280851660c0850152505098975050505050505050565b5f60208284031215613292575f80fd5b611ae182612c48565b5f82601f8301126132aa575f80fd5b815160206132ba61299e836129d3565b8083825260208201915060208460051b8701019350868411156132db575f80fd5b602086015b84811015612d4857805183529183019183016132e0565b5f805f60608486031215613309575f80fd5b835167ffffffffffffffff80821115613320575f80fd5b818601915086601f830112613333575f80fd5b8151602061334361299e836129d3565b82815260059290921b8401810191818101908a841115613361575f80fd5b948201945b8386101561338857855161337981612b3b565b82529482019490820190613366565b918901519197509093505050808211156133a0575f80fd5b506133ad8682870161329b565b925050604084015190509250925092565b828152604060208201525f612b336040830184612bda56fea2646970667358221220e8369b8be9c8bd88c57d6be7e409c30a1dbedb2c8f70512099d14c35fb6d053964736f6c63430008190033", + "deployedBytecode": "0x6080604052600436106101d2575f3560e01c80637ce1ffeb116100fd578063a8b2ae0211610092578063da25b72511610062578063da25b725146106ad578063dd12d68b146106e0578063e3f5aa51146106ff578063f4427c2c14610715575f80fd5b8063a8b2ae0214610629578063bddc966e1461063c578063c6328a461461065b578063ce5494bb1461068e575f80fd5b80639890220b116100cd5780639890220b146105a4578063992c3e4b146105b85780639b7bb847146105d7578063a6f9dae11461060a575f80fd5b80637ce1ffeb146105285780638456cb591461053e57806384acd1bb146105525780638da5cb5b14610585575f80fd5b8063446a9695116101735780635a7287cf116101435780635a7287cf146104bb5780635bc105c0146104cf5780635c975abb146104e35780637424ddc814610515575f80fd5b8063446a9695146103bf5780634ece6b17146103ed578063529dca321461040f57806354d20cc214610422575f80fd5b80631bad5957116101ae5780631bad595714610310578063256359a81461034357806329134768146103765780633f4ba83a146103a9575f80fd5b806231d1151461025457806307d9c534146102a45780631b2e7f0a146102e2575f80fd5b36610250576002546001600160a01b03166102195760405163cd3f165960e01b81525f60048201523360248201523060448201523460648201526084015b60405180910390fd5b60405134815233907f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f9060200160405180910390a2005b5f80fd5b34801561025f575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102af575f80fd5b506102d26102be36600461288d565b60036020525f908152604090205460ff1681565b604051901515815260200161029b565b3480156102ed575f80fd5b506102d26102fc36600461288d565b60046020525f908152604090205460ff1681565b34801561031b575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b34801561034e575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b348015610381575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b4575f80fd5b506103bd61072a565b005b3480156103ca575f80fd5b506102d26103d936600461288d565b60076020525f908152604090205460ff1681565b3480156103f8575f80fd5b50610401604081565b60405190815260200161029b565b6103bd61041d366004612a15565b6107c2565b34801561042d575f80fd5b5060408051808201909152601581527f726563656976654d65737361676528627974657329000000000000000000000060209091015261048a7ff953cec75ae677942d7cda5cb6d12c0cb96a0904bf37d36301eef297b83c411d81565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161029b565b3480156104c6575f80fd5b506104015f5481565b3480156104da575f80fd5b50610401610d24565b3480156104ee575f80fd5b5060025461050390600160a01b900460ff1681565b60405160ff909116815260200161029b565b6103bd610523366004612b01565b610d50565b348015610533575f80fd5b50610401620493e081565b348015610549575f80fd5b506103bd610f65565b34801561055d575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b348015610590575f80fd5b50600254610287906001600160a01b031681565b3480156105af575f80fd5b5061040161100e565b3480156105c3575f80fd5b506103bd6105d2366004612b4f565b61117b565b3480156105e2575f80fd5b506104017f000000000000000000000000000000000000000000000000000000000000000081565b348015610615575f80fd5b506103bd610624366004612b81565b6114bf565b348015610634575f80fd5b506008610401565b348015610647575f80fd5b506103bd610656366004612b01565b611587565b348015610666575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b348015610699575f80fd5b506103bd6106a8366004612b81565b6115d3565b3480156106b8575f80fd5b506102877f000000000000000000000000000000000000000000000000000000000000000081565b3480156106eb575f80fd5b506103bd6106fa366004612b9c565b611905565b34801561070a575f80fd5b50610401621e848081565b348015610720575f80fd5b5061040160015481565b6002546001600160a01b0316331461076a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517f20e9b9dbd8158c2b961d8645a7d06624a045634bb65f07ef751ae014a65f61f5905f90a1565b5f845167ffffffffffffffff8111156107dd576107dd6128a4565b60405190808252806020026020018201604052801561083457816020015b6040805160a0810182525f808252602080830182905292820181905260608201819052608082015282525f199092019101816107fb5790505b5090505f5b8551811015610d0e575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9e1189388848151811061088457610884612bc6565b60200260200101516040518263ffffffff1660e01b81526004016108a89190612c08565b5f60405180830381865afa1580156108c2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108e99190810190612d53565b60608101516040517fad66a5f100000000000000000000000000000000000000000000000000000000815261ffff90911660048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ad66a5f190602401602060405180830381865afa158015610971573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109959190612e72565b8160800151146109e75760405162461bcd60e51b815260206004820152601660248201527f4e6f74206120546f6b656e2042726964676520564141000000000000000000006044820152606401610210565b60e08101516040517fea63738d0000000000000000000000000000000000000000000000000000000081525f916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ea63738d91610a5191600401612c08565b5f60405180830381865afa158015610a6b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a929190810190612e89565b9050308160800151148015610b3157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b229190612f4d565b61ffff168160a0015161ffff16145b610ba35760405162461bcd60e51b815260206004820152602260248201527f546f6b656e20776173206e6f742073656e7420746f207468697320616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c3f511c1898581518110610be457610be4612bc6565b60200260200101516040518263ffffffff1660e01b8152600401610c089190612c08565b5f604051808303815f875af1158015610c23573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c4a9190810190612f68565b505f610c5e8260600151836040015161199a565b90505f610c6a82611aea565b6020840151909150600860ff83161115610ca157610c89600883612fae565b610c9490600a6130a7565b610c9e90826130b5565b90505b6040518060a0016040528085604001518152602001856060015161ffff168152602001846001600160a01b031681526020018281526020018560200151815250878781518110610cf357610cf3612bc6565b60200260200101819052505050505050806001019050610839565b50610d1c8682868686611bb6565b505050505050565b6024610d39600267ffffffffffffffff6130e0565b610d439190613106565b67ffffffffffffffff1681565b6002546001600160a81b90910460ff161115610d7f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b909104169003610dbd576040516313d0ff5960e31b815260040160405180910390fd5b5f54600881610dcd82601261312e565b610dd890600a613141565b610de2908461314c565b9050610def82601261312e565b610dfa90600a613141565b610e0490826130b5565b9050805f03610e2657604051637c946ed760e01b815260040160405180910390fd5b610e30818461312e565b5f908155600154604080516020810183905246918101919091523060608201529091906080016040516020818303038152906040528051906020012090505f80610e7b858985611dbb565b90925090508015610f0157604051339082905f81818185875af1925050503d805f8114610ec3576040519150601f19603f3d011682016040523d82523d5f602084013e610ec8565b606091505b50506040518281523391507f8e49ed3e274fbea1556bdfaa9a37a0c28445bfe26d57beaf9f04fd517aa417419060200160405180910390a25b610f0c84600161315f565b6001556040518581528390339084907f1ff6d173c1ebeb42f666a09b94f554cf43eadf8054fda3247f56c343baab28f79060200160405180910390a450506002805460ff60a81b1916600160a81b179055505050505050565b6002546001600160a01b03163314610fa55760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740200000000000000000000000000000000000000001790556040517f8ef6a6615a637325c66275a8d4cadb0844f08a758e5a9df369412975bcdcbc48905f90a1565b6002545f906001600160a81b90910460ff16111561103f576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146110915760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b479050805f036110b457604051637c946ed760e01b815260040160405180910390fd5b6040515f90339083908381818185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b505090508061112f5760405163cd3f165960e01b81525f600482015230602482015233604482015260648101839052608401610210565b60405182815233907ff36f4d6622e16a536bbb049064af779cdd483a0b388d347d3752a65f1058bf5b9060200160405180910390a2506002805460ff60a81b1916600160a81b17905590565b6002546001600160a81b90910460ff1611156111aa576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b1780825560ff600160a01b9091041690036111e8576040516313d0ff5960e31b815260040160405180910390fd5b604080516001600160a01b0385166020820152908101839052606081018290524660808201523060a08201525f9060c00160408051601f1981840301815291815281516020928301205f818152600490935291205490915060ff1680611293576040517f2b82bd4a0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610210565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156112f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131b9190612e72565b90508481106114685760405163095ea7b360e01b81526001600160a01b038781166004830152602482018790527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015611390573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b49190613172565b5060405163b6b55f2560e01b8152600481018690526001600160a01b0387169063b6b55f25906024015f604051808303815f87803b1580156113f4575f80fd5b505af1158015611406573d5f803e3d5ffd5b5050505083866001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c3219808760405161144691815260200190565b60405180910390a35f838152600460205260409020805460ff191690556114a4565b6040517fcf4791810000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610210565b50506002805460ff60a81b1916600160a81b17905550505050565b6002546001600160a01b031633146114ff5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b6001600160a01b0381166115265760405163d92e233d60e01b815260040160405180910390fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146115c75760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b6115d0816120c9565b50565b6002546001600160a81b90910460ff161115611602576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b198116600160a91b179091556001600160a01b031633146116545760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610210565b600254600160a01b900460ff1660010361169a576040517fa45f47fd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001600160a01b03163b5f036116cf57604051631c7025f960e11b81526001600160a01b0382166004820152602401610210565b306001600160a01b038216036116fa57604051631c7025f960e11b8152306004820152602401610210565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561175e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117829190612e72565b90508015611899576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611813573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118379190613172565b9050806118975760405163cd3f165960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301528416604482015260648101839052608401610210565b505b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040518181526001600160a01b0383169033907f928fd5531324ee87d76cc5307dc37580174da76b85cd546da631b2670bc266b59060200160405180910390a35050565b6005546001600160a01b031633146119845760405162461bcd60e51b8152602060048201526024808201527f4e6f7420616c6c6f77656420746f20736574207265676973746572656420736560448201527f6e646572000000000000000000000000000000000000000000000000000000006064820152608401610210565b61ffff9091165f90815260066020526040902055565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a8a05926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1b9190612f4d565b61ffff168361ffff1614611ad8576040517f1ff1e28600000000000000000000000000000000000000000000000000000000815261ffff84166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631ff1e28690604401602060405180830381865afa158015611aaf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad39190613191565b611ae1565b611ae18261267c565b90505b92915050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290515f9182916001600160a01b03851691611b5a916131ac565b5f60405180830381855afa9150503d805f8114611b92576040519150601f19603f3d011682016040523d82523d5f602084013e611b97565b606091505b5091505080806020019051810190611baf91906131c2565b9392505050565b5f8181526007602052604090205460ff1615611be8576040516356bc34a160e01b815260048101829052602401610210565b5f818152600760205260409020805460ff1916600117905561ffff82167f000000000000000000000000000000000000000000000000000000000000000014611c89576040517f857c0bad00000000000000000000000000000000000000000000000000000000815261ffff831660048201527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610210565b8351600114611cd15783516040517f312b0033000000000000000000000000000000000000000000000000000000008152600481019190915260016024820152604401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316845f81518110611d0d57611d0d612bc6565b6020026020010151604001516001600160a01b031614611daf57835f81518110611d3957611d39612bc6565b6020026020010151604001517f00000000000000000000000000000000000000000000000000000000000000006040517f7674dcce0000000000000000000000000000000000000000000000000000000081526004016102109291906001600160a01b0392831681529116602082015260400190565b82610d1c3382886126c0565b5f806040845114611e05578351604080517f34c9027a0000000000000000000000000000000000000000000000000000000081526102109290600401918252602082015260400190565b5f8085806020019051810190611e1b91906131db565b90925090506001600160a01b038216611e475760405163d92e233d60e01b815260040160405180910390fd5b620493e0811015611e585750620493e05b621e8480811115611e695750621e84805b6040517fc23ee3c300000000000000000000000000000000000000000000000000000000815261ffff7f00000000000000000000000000000000000000000000000000000000000000001660048201525f6024820181905260448201839052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c23ee3c39060640160408051808303815f875af1158015611f18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3c9190613207565b50905034811115611f82576040517f491a2bb100000000000000000000000000000000000000000000000000000000815234600482015260248101829052604401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634b5ca6f4827f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008c8b604051602001612010929190918252602082015260400190565b6040516020818303038152906040525f887f00000000000000000000000000000000000000000000000000000000000000008b6040518963ffffffff1660e01b81526004016120659796959493929190613229565b60206040518083038185885af1158015612081573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120a69190613282565b67ffffffffffffffff1694506120bc813461312e565b9350505050935093915050565b6002546001600160a81b90910460ff1611156120f8576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a81b1916600160a91b17905580515f908190819061212690602090860181019086016132f7565b5f81815260036020526040902054929550909350915060ff1615612160576040516356bc34a160e01b815260048101829052602401610210565b5f818152600360205260408120805460ff19166001179055600254600160a01b900460ff16815b8551811015612645575f8682815181106121a3576121a3612bc6565b602002602001015190505f8683815181106121c0576121c0612bc6565b602002602001015190505f826040516024016121eb91906001600160a01b0391909116815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1eda94d700000000000000000000000000000000000000000000000000000000179052519091505f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906122819085906131ac565b5f604051808303815f865af19150503d805f81146122ba576040519150601f19603f3d011682016040523d82523d5f602084013e6122bf565b606091505b50915091505f8280156122d3575081516020145b156122ef57818060200190518101906122ec9190612e72565b90505b805f0361235057612300858a61315f565b9850856001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb8660405161233d91815260200190565b60405180910390a250505050505061263d565b808511156123b9575f612363828761312e565b905061236f818b61315f565b9950819550866001600160a01b03167f29bd7fae5899787bb9cb5aa121b781bf47bb44cc44f0f3ddd1e1ea383acd22fb826040516123af91815260200190565b60405180910390a2505b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561241d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124419190612e72565b90508581101580156124535750886001145b156125875760405163095ea7b360e01b81526001600160a01b038881166004830152602482018890527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156124c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e89190613172565b5060405163b6b55f2560e01b8152600481018790526001600160a01b0388169063b6b55f25906024015f604051808303815f87803b158015612528575f80fd5b505af115801561253a573d5f803e3d5ffd5b505050508a876001600160a01b03167f22ab9fd8eb5063f7f3cb43c78f5d368aea9a51855ada00fa146687ef2c3219808860405161257a91815260200190565b60405180910390a3612635565b604080516001600160a01b0389166020820152908101879052606081018c90524660808201523060a08201525f9060c00160408051601f1981840301815282825280516020918201205f81815260048352839020805460ff191660011790558a84529083018590529082018c905291508c906001600160a01b038a169083907ff40f70fa5e98296d34577a11349caa5adf0d9cf9b6d416fd901de223c50d7a6c9060600160405180910390a4505b505050505050505b600101612187565b5081156114a457815f8082825461265c919061315f565b909155505050506002805460ff60a81b1916600160a81b17905550505050565b5f60a082901c156126bc576040517f33b960d000000000000000000000000000000000000000000000000000000000815260048101839052602401610210565b5090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161461275e576040517f2f3111fa0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301527f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146127fc576040517f0d16cbdd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301527f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610210565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f98bbde530ec85b002f6fb0864beccaaf3ac3d2a4ac35cb3b03cf7c61ee415e337f0000000000000000000000000000000000000000000000000000000000000000836040516128779291906133be565b60405180910390a2612888816120c9565b505050565b5f6020828403121561289d575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156128db576128db6128a4565b60405290565b604051610160810167ffffffffffffffff811182821017156128db576128db6128a4565b604051610100810167ffffffffffffffff811182821017156128db576128db6128a4565b604051601f8201601f1916810167ffffffffffffffff81118282101715612952576129526128a4565b604052919050565b5f67ffffffffffffffff821115612973576129736128a4565b50601f01601f191660200190565b5f82601f830112612990575f80fd5b81356129a361299e8261295a565b612929565b8181528460208386010111156129b7575f80fd5b816020850160208301375f918101602001919091529392505050565b5f67ffffffffffffffff8211156129ec576129ec6128a4565b5060051b60200190565b61ffff811681146115d0575f80fd5b8035612a10816129f6565b919050565b5f805f805f60a08688031215612a29575f80fd5b853567ffffffffffffffff80821115612a40575f80fd5b612a4c89838a01612981565b9650602091508188013581811115612a62575f80fd5b8801601f81018a13612a72575f80fd5b8035612a8061299e826129d3565b81815260059190911b8201840190848101908c831115612a9e575f80fd5b8584015b83811015612ad457803586811115612ab8575f80fd5b612ac68f8983890101612981565b845250918601918601612aa2565b50985050505060408801359450612af091505060608701612a05565b949793965091946080013592915050565b5f60208284031215612b11575f80fd5b813567ffffffffffffffff811115612b27575f80fd5b612b3384828501612981565b949350505050565b6001600160a01b03811681146115d0575f80fd5b5f805f60608486031215612b61575f80fd5b8335612b6c81612b3b565b95602085013595506040909401359392505050565b5f60208284031215612b91575f80fd5b8135611baf81612b3b565b5f8060408385031215612bad575f80fd5b8235612bb8816129f6565b946020939093013593505050565b634e487b7160e01b5f52603260045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ae16020830184612bda565b805160ff81168114612a10575f80fd5b805163ffffffff81168114612a10575f80fd5b8051612a10816129f6565b805167ffffffffffffffff81168114612a10575f80fd5b5f82601f830112612c6e575f80fd5b8151612c7c61299e8261295a565b818152846020838601011115612c90575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f830112612cbb575f80fd5b81516020612ccb61299e836129d3565b82815260079290921b84018101918181019086841115612ce9575f80fd5b8286015b84811015612d485760808189031215612d04575f80fd5b612d0c6128b8565b8151815284820151858201526040612d25818401612c1a565b908201526060612d36838201612c1a565b90820152835291830191608001612ced565b509695505050505050565b5f60208284031215612d63575f80fd5b815167ffffffffffffffff80821115612d7a575f80fd5b908301906101608286031215612d8e575f80fd5b612d966128e1565b612d9f83612c1a565b8152612dad60208401612c2a565b6020820152612dbe60408401612c2a565b6040820152612dcf60608401612c3d565b606082015260808301516080820152612dea60a08401612c48565b60a0820152612dfb60c08401612c1a565b60c082015260e083015182811115612e11575f80fd5b612e1d87828601612c5f565b60e083015250610100612e31818501612c2a565b908201526101208381015183811115612e48575f80fd5b612e5488828701612cac565b91830191909152506101409283015192810192909252509392505050565b5f60208284031215612e82575f80fd5b5051919050565b5f60208284031215612e99575f80fd5b815167ffffffffffffffff80821115612eb0575f80fd5b908301906101008286031215612ec4575f80fd5b612ecc612905565b612ed583612c1a565b81526020830151602082015260408301516040820152612ef760608401612c3d565b606082015260808301516080820152612f1260a08401612c3d565b60a082015260c083015160c082015260e083015182811115612f32575f80fd5b612f3e87828601612c5f565b60e08301525095945050505050565b5f60208284031215612f5d575f80fd5b8151611baf816129f6565b5f60208284031215612f78575f80fd5b815167ffffffffffffffff811115612f8e575f80fd5b612b3384828501612c5f565b634e487b7160e01b5f52601160045260245ffd5b60ff8281168282160390811115611ae457611ae4612f9a565b600181815b8085111561300157815f1904821115612fe757612fe7612f9a565b80851615612ff457918102915b93841c9390800290612fcc565b509250929050565b5f8261301757506001611ae4565b8161302357505f611ae4565b816001811461303957600281146130435761305f565b6001915050611ae4565b60ff84111561305457613054612f9a565b50506001821b611ae4565b5060208310610133831016604e8410600b8410161715613082575081810a611ae4565b61308c8383612fc7565b805f190482111561309f5761309f612f9a565b029392505050565b5f611ae160ff841683613009565b8082028115828204841417611ae457611ae4612f9a565b634e487b7160e01b5f52601260045260245ffd5b5f67ffffffffffffffff808416806130fa576130fa6130cc565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561312757613127612f9a565b5092915050565b81810381811115611ae457611ae4612f9a565b5f611ae18383613009565b5f8261315a5761315a6130cc565b500490565b80820180821115611ae457611ae4612f9a565b5f60208284031215613182575f80fd5b81518015158114611baf575f80fd5b5f602082840312156131a1575f80fd5b8151611baf81612b3b565b5f82518060208501845e5f920191825250919050565b5f602082840312156131d2575f80fd5b611ae182612c1a565b5f80604083850312156131ec575f80fd5b82516131f781612b3b565b6020939093015192949293505050565b5f8060408385031215613218575f80fd5b505080516020909101519092909150565b5f61ffff808a1683526001600160a01b03808a16602085015260e0604085015261325660e085018a612bda565b925087606085015286608085015281861660a085015280851660c0850152505098975050505050505050565b5f60208284031215613292575f80fd5b611ae182612c48565b5f82601f8301126132aa575f80fd5b815160206132ba61299e836129d3565b8083825260208201915060208460051b8701019350868411156132db575f80fd5b602086015b84811015612d4857805183529183019183016132e0565b5f805f60608486031215613309575f80fd5b835167ffffffffffffffff80821115613320575f80fd5b818601915086601f830112613333575f80fd5b8151602061334361299e836129d3565b82815260059290921b8401810191818101908a841115613361575f80fd5b948201945b8386101561338857855161337981612b3b565b82529482019490820190613366565b918901519197509093505050808211156133a0575f80fd5b506133ad8682870161329b565b925050604084015190509250925092565b828152604060208201525f612b336040830184612bda56fea2646970667358221220e8369b8be9c8bd88c57d6be7e409c30a1dbedb2c8f70512099d14c35fb6d053964736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/Dispenser.sol b/contracts/Dispenser.sol index 68c50102..1188970d 100644 --- a/contracts/Dispenser.sol +++ b/contracts/Dispenser.sol @@ -487,6 +487,11 @@ contract Dispenser { } } + // Skip if there are no actual staking targets + if (numActualTargets == 0) { + continue; + } + // Allocate updated arrays accounting only for nonzero staking incentives bytes32[] memory updatedStakingTargets = new bytes32[](numActualTargets); uint256[] memory updatedStakingAmounts = new uint256[](numActualTargets); @@ -1226,7 +1231,7 @@ contract Dispenser { _locked = 1; } - /// @dev Syncs the withheld amount according to the data received from L2. + /// @dev Syncs the withheld token amount according to the data received from L2. /// @notice Only a corresponding chain Id deposit processor is able to communicate the withheld amount data. /// Note that by design only a normalized withheld amount is delivered from L2. /// @param chainId L2 chain Id the withheld amount data is communicated from. diff --git a/contracts/staking/ArbitrumDepositProcessorL1.sol b/contracts/staking/ArbitrumDepositProcessorL1.sol index ca0fb8e5..77a6d5f2 100644 --- a/contracts/staking/ArbitrumDepositProcessorL1.sol +++ b/contracts/staking/ArbitrumDepositProcessorL1.sol @@ -153,8 +153,9 @@ contract ArbitrumDepositProcessorL1 is DefaultDepositProcessorL1 { } // Check for the message gas limit + // Revert if the gas limit is smaller than the recommended one, since otherwise the cost is calculated incorrectly if (params.gasLimitMessage < MESSAGE_GAS_LIMIT) { - params.gasLimitMessage = MESSAGE_GAS_LIMIT; + revert LowerThan(params.gasLimitMessage, MESSAGE_GAS_LIMIT); } // Calculate token and message transfer cost diff --git a/contracts/staking/DefaultDepositProcessorL1.sol b/contracts/staking/DefaultDepositProcessorL1.sol index 630afcf2..71c768c7 100644 --- a/contracts/staking/DefaultDepositProcessorL1.sol +++ b/contracts/staking/DefaultDepositProcessorL1.sol @@ -24,6 +24,7 @@ abstract contract DefaultDepositProcessorL1 is IBridgeErrors { uint256 transferAmount, bytes32 indexed batchHash); event MessageReceived(address indexed l1Relayer, uint256 indexed chainId, bytes data); event L2TargetDispenserUpdated(address indexed l2TargetDispenser); + event LeftoversRefunded(address indexed sender, uint256 leftovers); // receiveMessage selector to be executed on L2 bytes4 public constant RECEIVE_MESSAGE = bytes4(keccak256(bytes("receiveMessage(bytes)"))); @@ -174,6 +175,8 @@ abstract contract DefaultDepositProcessorL1 is IBridgeErrors { // If the call fails, ignore to avoid the attack that would prevent this function from executing // solhint-disable-next-line avoid-low-level-calls tx.origin.call{value: leftovers}(""); + + emit LeftoversRefunded(tx.origin, leftovers); } // Increase the staking batch nonce diff --git a/contracts/staking/DefaultTargetDispenserL2.sol b/contracts/staking/DefaultTargetDispenserL2.sol index dbace6b3..5be8b9ff 100644 --- a/contracts/staking/DefaultTargetDispenserL2.sol +++ b/contracts/staking/DefaultTargetDispenserL2.sol @@ -48,7 +48,7 @@ abstract contract DefaultTargetDispenserL2 is IBridgeErrors { event StakingTargetDeposited(address indexed target, uint256 amount, bytes32 indexed batchHash); event AmountWithheld(address indexed target, uint256 amount); event StakingRequestQueued(bytes32 indexed queueHash, address indexed target, uint256 amount, - bytes32 indexed batchHash, uint256 paused); + bytes32 indexed batchHash, uint256 olasBalance, uint256 paused); event MessagePosted(uint256 indexed sequence, address indexed messageSender, uint256 amount, bytes32 indexed batchHash); event MessageReceived(address indexed sender, uint256 chainId, bytes data); @@ -56,6 +56,7 @@ abstract contract DefaultTargetDispenserL2 is IBridgeErrors { event TargetDispenserPaused(); event TargetDispenserUnpaused(); event Migrated(address indexed sender, address indexed newL2TargetDispenser, uint256 amount); + event LeftoversRefunded(address indexed sender, uint256 leftovers); // receiveMessage selector (Ethereum chain) bytes4 public constant RECEIVE_MESSAGE = bytes4(keccak256(bytes("receiveMessage(bytes)"))); @@ -195,8 +196,9 @@ abstract contract DefaultTargetDispenserL2 is IBridgeErrors { emit AmountWithheld(target, targetWithheldAmount); } + uint256 olasBalance = IToken(olas).balanceOf(address(this)); // Check the OLAS balance and the contract being unpaused - if (IToken(olas).balanceOf(address(this)) >= amount && localPaused == 1) { + if (olasBalance >= amount && localPaused == 1) { // Approve and transfer OLAS to the service staking target IToken(olas).approve(target, amount); IStaking(target).deposit(amount); @@ -208,7 +210,7 @@ abstract contract DefaultTargetDispenserL2 is IBridgeErrors { // Queue the hash for further redeem queuedHashes[queueHash] = true; - emit StakingRequestQueued(queueHash, target, amount, batchHash, localPaused); + emit StakingRequestQueued(queueHash, target, amount, batchHash, olasBalance, localPaused); } } @@ -337,7 +339,7 @@ abstract contract DefaultTargetDispenserL2 is IBridgeErrors { /// @dev Syncs withheld token amount with L1. /// @param bridgePayload Payload data for the bridge relayer. - function syncWithheldTokens(bytes memory bridgePayload) external payable { + function syncWithheldAmount(bytes memory bridgePayload) external payable { // Reentrancy guard if (_locked > 1) { revert ReentrancyGuard(); @@ -384,6 +386,8 @@ abstract contract DefaultTargetDispenserL2 is IBridgeErrors { // All the undelivered funds can be drained // solhint-disable-next-line avoid-low-level-calls msg.sender.call{value: leftovers}(""); + + emit LeftoversRefunded(msg.sender, leftovers); } stakingBatchNonce = batchNonce + 1; diff --git a/contracts/staking/GnosisTargetDispenserL2.sol b/contracts/staking/GnosisTargetDispenserL2.sol index d7f65e2a..928260ef 100644 --- a/contracts/staking/GnosisTargetDispenserL2.sol +++ b/contracts/staking/GnosisTargetDispenserL2.sol @@ -26,8 +26,6 @@ interface IBridge { contract GnosisTargetDispenserL2 is DefaultTargetDispenserL2 { // Bridge payload length uint256 public constant BRIDGE_PAYLOAD_LENGTH = 32; - // L2 token relayer address - address public immutable l2TokenRelayer; /// @dev GnosisTargetDispenserL2 constructor. /// @param _olas OLAS token address. @@ -35,24 +33,15 @@ contract GnosisTargetDispenserL2 is DefaultTargetDispenserL2 { /// @param _l2MessageRelayer L2 message relayer bridging contract address (AMBHomeProxy). /// @param _l1DepositProcessor L1 deposit processor address. /// @param _l1SourceChainId L1 source chain Id. - /// @param _l2TokenRelayer L2 token relayer address (HomeOmniBridgeProxy). constructor( address _olas, address _proxyFactory, address _l2MessageRelayer, address _l1DepositProcessor, - uint256 _l1SourceChainId, - address _l2TokenRelayer + uint256 _l1SourceChainId ) DefaultTargetDispenserL2(_olas, _proxyFactory, _l2MessageRelayer, _l1DepositProcessor, _l1SourceChainId) - { - // Check for zero address - if (_l2TokenRelayer == address(0)) { - revert ZeroAddress(); - } - - l2TokenRelayer = _l2TokenRelayer; - } + {} /// @inheritdoc DefaultTargetDispenserL2 function _sendMessage( diff --git a/docs/StakingSmartContracts.pdf b/docs/StakingSmartContracts.pdf index 14e83197..fdb2f966 100644 Binary files a/docs/StakingSmartContracts.pdf and b/docs/StakingSmartContracts.pdf differ diff --git a/docs/Vulnerabilities_list_tokenomics.pdf b/docs/Vulnerabilities_list_tokenomics.pdf index 21dd8923..d019c3d7 100644 Binary files a/docs/Vulnerabilities_list_tokenomics.pdf and b/docs/Vulnerabilities_list_tokenomics.pdf differ diff --git a/docs/deployment_v1.2.md b/docs/deployment_v1.2.md new file mode 100644 index 00000000..0925d4d0 --- /dev/null +++ b/docs/deployment_v1.2.md @@ -0,0 +1,19 @@ +Steps for deploying the tokenomics version 1.2 contracts are as follows: + +1. EOA to deploy Tokenomics implementation (`TokenomicsThree`); +2. TokenomicsProxy to change Tokenomics implementation calling `changeTokenomicsImplementation(TokenomicsThree)`; +3. EOA to deploy Dispenser (`DispenserTwo`) with VoteWeighting contract being deployed before that in `autonolas-governance`; +4. EOA to deploy staking bridging contracts; +5. EOA to set up correct L1->L2 links for all the bridging contracts calling `setL2TargetDispenser(L2 corresponding contract)`; +6. EOA to transfer ownership rights of Dispenser to Timelock calling `changeOwner(Timelock)`; +7. DAO to change Tokenomics managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; +8. DAO to change staking parameters in Tokenomics calling `changeStakingParams()`; +9. DAO to enable bridge deposit processors in Dispenser calling `setDepositProcessorChainIds()`. + +Note for updating VoteWeighting contract address in Dispenser, if required at some point of time. +As outlined in the C4R [issue 59](https://github.com/code-423n4/2024-05-olas-findings/issues/59), the following set of +steps must be taken into account in order to avoid possible staking inflation loss: +- Initiate claim of incentives for all the outstanding staking contract, as those are ownerless; +- Pause staking incentives; +- Change VoteWeighting contract; +- Unpause staking incentives. \ No newline at end of file diff --git a/scripts/deployment/README.md b/scripts/deployment/README.md index 1376022f..66b9e2e0 100644 --- a/scripts/deployment/README.md +++ b/scripts/deployment/README.md @@ -1,5 +1,8 @@ # Deployment scripts -This folder contains the scripts to deploy Autonolas tokenomics. These scripts correspond to the steps in the full deployment procedure (as described in [deployment.md](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/docs/deployment.md)). +This folder contains the scripts to deploy Autonolas tokenomics. +These scripts correspond to the steps in the full deployment procedure (as described in [deployment.md](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/docs/deployment.md)). + +For the Tokenomics 1.2, refer to the following deployment procedure: [deployment_v1.2.md](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/docs/deployment_v1.2.md). ## Observations - There are several files with global parameters based on the corresponding network. In order to work with the configuration, please copy `gobals_network.json` file to file the `gobals.json` one, where `network` is the corresponding network. For example: `cp gobals_goerli.json gobals.json`. diff --git a/scripts/deployment/staking/arbitrum/globals_arbitrum_sepolia.json b/scripts/deployment/staking/arbitrum/globals_arbitrum_sepolia.json index 0dfcbf0d..2a5888ef 100644 --- a/scripts/deployment/staking/arbitrum/globals_arbitrum_sepolia.json +++ b/scripts/deployment/staking/arbitrum/globals_arbitrum_sepolia.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumSepolia","networkURL":"https://sepolia-rollup.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x2AeD71638128A3811F5e5971a397fFe6A8587caa","serviceStakingFactoryAddress":"0x9d9A92Fc1D488E6A39B19AB344f290e35bA51ad8","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","arbitrumDepositProcessorL1Address":"0x62f698468d9eb1Ed8c33f4DfE2e643b1a2D2980F","l1ChainId":"11155111","arbitrumTargetDispenserL2Address":"0xbb244EA713C065Ae54dC3A8eeeA765deEEDD8Df4"} \ No newline at end of file +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumSepolia","networkURL":"https://sepolia-rollup.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x2AeD71638128A3811F5e5971a397fFe6A8587caa","serviceStakingFactoryAddress":"0xd64Cf67500b7d15A41E02DDeb40F3A73CB533eB5","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","arbitrumDepositProcessorL1Address":"0xACd410f51DA5aAe1fF925565FBCB6B6eedbB00E2","l1ChainId":"11155111","arbitrumTargetDispenserL2Address":"0xF66E23209074FA7946E41f45f43d765281af2207"} \ No newline at end of file diff --git a/scripts/deployment/staking/arbitrum/send_tokens_and_message.js b/scripts/deployment/staking/arbitrum/send_tokens_and_message.js index e70b6140..a691b901 100644 --- a/scripts/deployment/staking/arbitrum/send_tokens_and_message.js +++ b/scripts/deployment/staking/arbitrum/send_tokens_and_message.js @@ -29,8 +29,8 @@ const main = async () => { console.log("Correct wallet setup"); } - const l1DepositProcessorAddress = "0x62f698468d9eb1Ed8c33f4DfE2e643b1a2D2980F"; - const l2TargetDispenserAddress = "0xbb244EA713C065Ae54dC3A8eeeA765deEEDD8Df4"; + const l1DepositProcessorAddress = "0xACd410f51DA5aAe1fF925565FBCB6B6eedbB00E2"; + const l2TargetDispenserAddress = "0xF66E23209074FA7946E41f45f43d765281af2207"; //const erc20Token = (await ethers.getContractAt("ERC20Token", tokenAddress)).connect(EOAarbitrumSepolia); //console.log(erc20Token.address); @@ -45,7 +45,7 @@ const main = async () => { // To be able to estimate the gas related params to our L1-L2 message, we need to know how many bytes of calldata out // retryable ticket will require - const targetInstance = "0x33A23Cb1Df4810f4D1B932D85E78a8Fd6b9C9659"; + const targetInstance = "0x5a7b2c6f38ee2f3203273dd3dd67942144b804fb"; const defaultAmount = 100; const stakingTargets = [targetInstance]; const stakingAmounts = new Array(stakingTargets.length).fill(defaultAmount); @@ -60,7 +60,7 @@ const main = async () => { const RetryablesGasOverrides = { gasLimit: { base: undefined, // when undefined, the value will be estimated from rpc - min: ethers.BigNumber.from(10000), // set a minimum gas limit, using 10000 as an example + min: ethers.BigNumber.from(2000000), // set a minimum gas limit, using 2M as a default minimum percentIncrease: ethers.BigNumber.from(30), // how much to increase the base for buffer }, maxSubmissionFee: { @@ -121,7 +121,7 @@ const main = async () => { ethers.utils.hexDataLength(tokenCalldata)); console.log("maxSubmissionCostToken:", maxSubmissionCostToken.toString()); - // Add 100k to the overall deposit to reflect the gasLimitMessage as well + // Add 100k to the overall deposit of original 300k to reflect the gasLimitMessage as well const tokenGasLimit = ethers.BigNumber.from("400000"); const tokenGasCost = gasPriceBid.mul(tokenGasLimit); const totalCost = L1ToL2MessageGasParams.deposit.add(maxSubmissionCostToken).add(tokenGasCost); @@ -134,35 +134,36 @@ const main = async () => { // TESTING OF SENDING TOKEN AND MESSAGE const fs = require("fs"); - const dispenserAddress = "0x210af5b2FD68b3cdB94843C8e3462Daa52cCfe8F"; + const dispenserAddress = "0x42f43be9E5E50df51b86C5c6427223ff565f40C6"; const dispenserJSON = "artifacts/contracts/staking/test/MockStakingDispenser.sol/MockStakingDispenser.json"; let contractFromJSON = fs.readFileSync(dispenserJSON, "utf8"); let parsedFile = JSON.parse(contractFromJSON); const dispenserABI = parsedFile["abi"]; const dispenser = new ethers.Contract(dispenserAddress, dispenserABI, sepoliaProvider); - const olasAddress = "0x2AeD71638128A3811F5e5971a397fFe6A8587caa"; - const olasJSON = "artifacts/contracts/test/ERC20TokenOwnerless.sol/ERC20TokenOwnerless.json"; - contractFromJSON = fs.readFileSync(olasJSON, "utf8"); - parsedFile = JSON.parse(contractFromJSON); - const olasABI = parsedFile["abi"]; - const olas = new ethers.Contract(olasAddress, olasABI, arbitrumSepoliaProvider); - const totalSupply = await olas.totalSupply(); + //const olasAddress = "0x2AeD71638128A3811F5e5971a397fFe6A8587caa"; + //const olasJSON = "artifacts/contracts/test/ERC20TokenOwnerless.sol/ERC20TokenOwnerless.json"; + //contractFromJSON = fs.readFileSync(olasJSON, "utf8"); + //parsedFile = JSON.parse(contractFromJSON); + //const olasABI = parsedFile["abi"]; + //const olas = new ethers.Contract(olasAddress, olasABI, arbitrumSepoliaProvider); + //const totalSupply = await olas.totalSupply(); //console.log("totalSupply on L2:", totalSupply); - let balance = await olas.balanceOf(l2TargetDispenserAddress); + //let balance = await olas.balanceOf(l2TargetDispenserAddress); //console.log("balance of L2 target dispenser:", balance); - balance = await olas.balanceOf(targetInstance); + //balance = await olas.balanceOf(targetInstance); //console.log("balance of L2 proxy:", balance); const transferAmount = defaultAmount; const gasLimit = 3000000; + console.log(totalCost); const tx = await dispenser.connect(EOAsepolia).mintAndSend(l1DepositProcessorAddress, targetInstance, defaultAmount, finalPayload, transferAmount, { value: totalCost, gasLimit }); console.log("TX hash", tx.hash); await tx.wait(); - // tx back to L1: https://sepolia.arbiscan.io/tx/0x2140d182185f9a9b97f8b5a70c85ebddc41a5cdfeea188895cca572309455bc5 - // Finalized tx on L1: https://sepolia.etherscan.io/tx/0x7a916dde5984de4951cde7a61549646d5d36f4eb4d845d941c86e2b0ae299181 + // tx back to L1: https://sepolia.arbiscan.io/tx/0xea8119b1030bb223a896680d9c4ea03877beee08927ef1b8a9532ce48db68c55 + // Finalized tx on L1: // Use the following script to finalize L2-L1 transaction: // https://github.com/OffchainLabs/arbitrum-tutorials/blob/master/packages/outbox-execute/scripts/exec.js diff --git a/scripts/deployment/staking/globals_sepolia.json b/scripts/deployment/staking/globals_sepolia.json index 58039a76..7b1f6dda 100644 --- a/scripts/deployment/staking/globals_sepolia.json +++ b/scripts/deployment/staking/globals_sepolia.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"sepolia","olasAddress":"0xeb2725bD76f6b1569Cf1484fCa0f2D55714A085d","dispenserAddress":"0x210af5b2FD68b3cdB94843C8e3462Daa52cCfe8F","arbitrumL1ERC20GatewayRouterAddress":"0xcE18836b233C83325Cc8848CA4487e94C6288264","arbitrumL1ERC20GatewayAddress":"0x902b3E5f8F19571859F4AB1003B960a5dF693aFF","arbitrumInboxAddress":"0xaAe29B0366299461418F5324a79Afc425BE5ae21","arbitrumOutboxAddress":"0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F","arbitrumBridgeAddress":"0x38f918D0E9F1b721EDaA41302E399fa1B79333a9","arbitrumL2TargetChainId":"421614","arbitrumDepositProcessorL1Address":"0x62f698468d9eb1Ed8c33f4DfE2e643b1a2D2980F","gnosisOmniBridgeAddress":"0x63E47C5e3303DDDCaF3b404B1CCf9Eb633652e9e","gnosisAMBForeignAddress":"0xf2546D6648BD2af6a008A7e7C1542BB240329E11","gnosisL2TargetChainId":"10200","gnosisDepositProcessorL1Address":"0x82Fd26D73a311CDc5C4D6cDC92c8F1731f2b57b3","optimisticL1StandardBridgeProxyAddress":"0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1","optimisticL1CrossDomainMessengerProxyAddress":"0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef","optimisticOLASAddress":"0x01B8b6384298D4848E3BE63D4C9D17830EeE488A","optimisticL2TargetChainId":"11155420","optimismDepositProcessorL1Address":"0x11acc5866363CAbeAB8EA57C0da64D85fDa92887","wormholeL1CoreAddress":"0x4a8bc80Ed5a4067f1CCf107057b8270E0cC11A78","wormholeL1TokenRelayerAddress":"0xDB5492265f6038831E89f495670FF909aDe94bd9","wormholeL1MessageRelayerAddress":"0x7B1bD7a6b4E61c2a123AC6BC2cbfC614437D0470","celoL2TargetChainId":"44787","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0x34F5A25B627f50Bb3f5cAb72807c4D4F405a9232","polygonFXRootAddress":"0x0E13EBEdDb8cf9f5987512d5E081FdC2F5b0991e","polygonCheckpointManagerAddress":"0xbd07D7E1E93c8d4b2a261327F3C28a8EA7167209","polygonERC20PredicateAddress":"0x4258c75b752c812b7fa586bdeb259f2d4bd17f4f","polygonL2TargetChainId":"80002","polygonDepositProcessorL1Address":"0x7B7eb7219322C3aE8A98a5bc0Fb6b5A1F8deFCdA"} \ No newline at end of file +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"sepolia","olasAddress":"0xeb2725bD76f6b1569Cf1484fCa0f2D55714A085d","dispenserAddress":"0x42f43be9E5E50df51b86C5c6427223ff565f40C6","arbitrumL1ERC20GatewayRouterAddress":"0xcE18836b233C83325Cc8848CA4487e94C6288264","arbitrumL1ERC20GatewayAddress":"0x902b3E5f8F19571859F4AB1003B960a5dF693aFF","arbitrumInboxAddress":"0xaAe29B0366299461418F5324a79Afc425BE5ae21","arbitrumOutboxAddress":"0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F","arbitrumBridgeAddress":"0x38f918D0E9F1b721EDaA41302E399fa1B79333a9","arbitrumL2TargetChainId":"421614","arbitrumDepositProcessorL1Address":"0xACd410f51DA5aAe1fF925565FBCB6B6eedbB00E2","gnosisOmniBridgeAddress":"0x63E47C5e3303DDDCaF3b404B1CCf9Eb633652e9e","gnosisAMBForeignAddress":"0xf2546D6648BD2af6a008A7e7C1542BB240329E11","gnosisL2TargetChainId":"10200","gnosisDepositProcessorL1Address":"0x679Ce81a7bab6808534137585850dc81F90Ea8a4","optimisticL1StandardBridgeProxyAddress":"0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1","optimisticL1CrossDomainMessengerProxyAddress":"0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef","optimisticOLASAddress":"0x01B8b6384298D4848E3BE63D4C9D17830EeE488A","optimisticL2TargetChainId":"11155420","optimismDepositProcessorL1Address":"0xDc6B77e32e751C7d6e1d1c39A64c64a8F0049E21","wormholeL1CoreAddress":"0x4a8bc80Ed5a4067f1CCf107057b8270E0cC11A78","wormholeL1TokenRelayerAddress":"0xDB5492265f6038831E89f495670FF909aDe94bd9","wormholeL1MessageRelayerAddress":"0x7B1bD7a6b4E61c2a123AC6BC2cbfC614437D0470","celoL2TargetChainId":"44787","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0x34F5A25B627f50Bb3f5cAb72807c4D4F405a9232","polygonFXRootAddress":"0x0E13EBEdDb8cf9f5987512d5E081FdC2F5b0991e","polygonCheckpointManagerAddress":"0xbd07D7E1E93c8d4b2a261327F3C28a8EA7167209","polygonERC20PredicateAddress":"0x4258c75b752c812b7fa586bdeb259f2d4bd17f4f","polygonL2TargetChainId":"80002","polygonDepositProcessorL1Address":"0x36c1beAFBeaf65DFcF16De60867BF9525455bf4E"} \ No newline at end of file diff --git a/scripts/deployment/staking/gnosis/globals_gnosis_chiado.json b/scripts/deployment/staking/gnosis/globals_gnosis_chiado.json index 590d6e53..2ec20a15 100644 --- a/scripts/deployment/staking/gnosis/globals_gnosis_chiado.json +++ b/scripts/deployment/staking/gnosis/globals_gnosis_chiado.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"chiado","networkURL":"https://rpc.chiadochain.net","gasPriceInGwei":"5","olasAddress":"0x9b03e7D8B3c3ea3B56431baD5f9aA16070E10cE2","serviceStakingFactoryAddress":"0x661E609d03bb63819f2F47b9202E15e1826f5B5f","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","gnosisAMBHomeAddress":"0x8448E15d0e706C0298dECA99F0b4744030e59d7d","gnosisHomeOmnibridgeAddress":"0x82f63B9730f419CbfEEF10d58a522203838d74c8","gnosisDepositProcessorL1Address":"0x82Fd26D73a311CDc5C4D6cDC92c8F1731f2b57b3","l1ChainId":"11155111","gnosisTargetDispenserL2Address":"0x7ED124AF35f5e12318C898ba35b63863908e1eB8"} \ No newline at end of file +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"chiado","networkURL":"https://rpc.chiadochain.net","gasPriceInGwei":"5","olasAddress":"0x9b03e7D8B3c3ea3B56431baD5f9aA16070E10cE2","serviceStakingFactoryAddress":"0x164192772C363DD391d1fb3D396cd1d9FB10def1","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","gnosisAMBHomeAddress":"0x8448E15d0e706C0298dECA99F0b4744030e59d7d","gnosisHomeOmnibridgeAddress":"0x82f63B9730f419CbfEEF10d58a522203838d74c8","gnosisDepositProcessorL1Address":"0x679Ce81a7bab6808534137585850dc81F90Ea8a4","l1ChainId":"11155111","gnosisTargetDispenserL2Address":"0xA126bf628f1fa7B922D0681733CbCE9236ca44Af"} \ No newline at end of file diff --git a/scripts/deployment/staking/gnosis/send_tokens_and_message.js b/scripts/deployment/staking/gnosis/send_tokens_and_message.js index 1eeaa5d6..846dd134 100644 --- a/scripts/deployment/staking/gnosis/send_tokens_and_message.js +++ b/scripts/deployment/staking/gnosis/send_tokens_and_message.js @@ -15,11 +15,9 @@ const main = async () => { const account = ethers.utils.HDNode.fromMnemonic(process.env.TESTNET_MNEMONIC).derivePath("m/44'/60'/0'/0/0"); const EOAsepolia = new ethers.Wallet(account, sepoliaProvider); - const l1DepositProcessorAddress = "0x82Fd26D73a311CDc5C4D6cDC92c8F1731f2b57b3"; - const l2TargetDispenserAddress = "0x7ED124AF35f5e12318C898ba35b63863908e1eB8"; - // const l1DepositProcessorAddress = "0xc72334A2b928e8c681E6359E981E50E0004739De"; - // const l2TargetDispenserAddress = "0x696b624d8BFFe7B4CeebE30F1f7Ee29d1aB52242"; - const targetInstance = "0x4172a7f2888B8071b0df177f69d8FC61df0c164d"; + const l1DepositProcessorAddress = "0x679Ce81a7bab6808534137585850dc81F90Ea8a4"; + const l2TargetDispenserAddress = "0xA126bf628f1fa7B922D0681733CbCE9236ca44Af"; + const targetInstance = "0x3c55f970d62d70dda9c3f9c7664e6f89010685ca"; const defaultAmount = 100; const stakingTargets = [targetInstance]; const stakingAmounts = new Array(stakingTargets.length).fill(defaultAmount); @@ -32,7 +30,7 @@ const main = async () => { // TESTING OF SENDING TOKEN AND MESSAGE const fs = require("fs"); - const dispenserAddress = "0x210af5b2FD68b3cdB94843C8e3462Daa52cCfe8F"; + const dispenserAddress = "0x42f43be9E5E50df51b86C5c6427223ff565f40C6"; const dispenserJSON = "artifacts/contracts/staking/test/MockStakingDispenser.sol/MockStakingDispenser.json"; const contractFromJSON = fs.readFileSync(dispenserJSON, "utf8"); let parsedFile = JSON.parse(contractFromJSON); @@ -48,6 +46,11 @@ const main = async () => { "0x", transferAmount, { gasLimit }); console.log("TX hash", tx.hash); await tx.wait(); + + // tx back: https://gnosis-chiado.blockscout.com/tx/0x27e3b114b076cba6830d027a88bc8ccfb1af88d52f6c0d54cfab860cfb3cb687 + // To finalize, need to go to the AMBHelper contract, call getSignatures() with the encodedData from the UserRequestForSignature event + // On AMBForeign, call the executeSignatures() function with the encodedData and obtained signatures + // Finalizing tx on L1: https://sepolia.etherscan.io/tx/0x4e5cbcfa1342ca579c96d39a53470e4089abb42158524b89baece94e698ce1de }; main() diff --git a/scripts/deployment/staking/optimistic/globals_optimistic_sepolia.json b/scripts/deployment/staking/optimistic/globals_optimistic_sepolia.json index 67fb73af..93c432d3 100644 --- a/scripts/deployment/staking/optimistic/globals_optimistic_sepolia.json +++ b/scripts/deployment/staking/optimistic/globals_optimistic_sepolia.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimisticSepolia","networkURL":"https://sepolia.optimism.io","gasPriceInGwei":"2","olasAddress":"0x01B8b6384298D4848E3BE63D4C9D17830EeE488A","serviceStakingFactoryAddress":"0x9d9A92Fc1D488E6A39B19AB344f290e35bA51ad8","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","optimismDepositProcessorL1Address":"0x11acc5866363CAbeAB8EA57C0da64D85fDa92887","l1ChainId":"11155111","optimismTargetDispenserL2Address":"0x9385d4E53c72a858C451D41f58Fcb8C070bDd18A"} \ No newline at end of file +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimisticSepolia","networkURL":"https://sepolia.optimism.io","gasPriceInGwei":"2","olasAddress":"0x01B8b6384298D4848E3BE63D4C9D17830EeE488A","serviceStakingFactoryAddress":"0x3ac32cE492d2bDaf11C8f43Edc16FCa9b4b65675","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","optimismDepositProcessorL1Address":"0xDc6B77e32e751C7d6e1d1c39A64c64a8F0049E21","l1ChainId":"11155111","optimismTargetDispenserL2Address":"0x239193FB66D22E358f1c094831aB771669Eb3C4F"} \ No newline at end of file diff --git a/scripts/deployment/staking/optimistic/send_tokens_and_message.js b/scripts/deployment/staking/optimistic/send_tokens_and_message.js index b706dc80..cc8c1dc9 100644 --- a/scripts/deployment/staking/optimistic/send_tokens_and_message.js +++ b/scripts/deployment/staking/optimistic/send_tokens_and_message.js @@ -15,9 +15,9 @@ const main = async () => { const account = ethers.utils.HDNode.fromMnemonic(process.env.TESTNET_MNEMONIC).derivePath("m/44'/60'/0'/0/0"); const EOAsepolia = new ethers.Wallet(account, sepoliaProvider); - const l1DepositProcessorAddress = "0x11acc5866363CAbeAB8EA57C0da64D85fDa92887"; - const l2TargetDispenserAddress = "0x9385d4E53c72a858C451D41f58Fcb8C070bDd18A"; - const targetInstance = "0x42C002Bc981A47d4143817BD9eA6A898a9916285"; + const l1DepositProcessorAddress = "0xDc6B77e32e751C7d6e1d1c39A64c64a8F0049E21"; + const l2TargetDispenserAddress = "0x239193FB66D22E358f1c094831aB771669Eb3C4F"; + const targetInstance = "0xCae661c929EC23e695e904d871C8D623f83bAC38"; const defaultAmount = 100; const stakingTargets = [targetInstance]; const stakingAmounts = new Array(stakingTargets.length).fill(defaultAmount); @@ -30,7 +30,7 @@ const main = async () => { // TESTING OF SENDING TOKEN AND MESSAGE const fs = require("fs"); - const dispenserAddress = "0x210af5b2FD68b3cdB94843C8e3462Daa52cCfe8F"; + const dispenserAddress = "0x42f43be9E5E50df51b86C5c6427223ff565f40C6"; const dispenserJSON = "artifacts/contracts/staking/test/MockStakingDispenser.sol/MockStakingDispenser.json"; const contractFromJSON = fs.readFileSync(dispenserJSON, "utf8"); let parsedFile = JSON.parse(contractFromJSON); @@ -40,22 +40,21 @@ const main = async () => { // console.log(await sepoliaProvider.getTransactionCount(EOAsepolia.address)); // return; - const gasPrice = ethers.utils.parseUnits("100", "gwei"); - // This is a contract-level message gas limit for L2 - capable of processing around 200 targets + amounts + const gasPrice = ethers.utils.parseUnits("5", "gwei"); + // This is a contract-level message gas limit for L2 - capable of processing around 100 targets + amounts const minGasLimit = "2000000"; - const cost = 0;//ethers.BigNumber.from("1000000").mul(gasPrice); - const bridgePayload = ethers.utils.defaultAbiCoder.encode(["uint256", "uint256"], [cost, minGasLimit]); + // The default bridge payload is empty, uncomment if need to set gas limit more than 2M + const bridgePayload = "0x";//ethers.utils.defaultAbiCoder.encode(["uint256"], [minGasLimit]); const transferAmount = defaultAmount; // Must be at least 20% bigger for the gas limit than the calculated one - const finalCost = ethers.BigNumber.from("1200000").mul(gasPrice); - const gasLimit = "1000000"; + const gasLimit = "5000000"; const tx = await dispenser.connect(EOAsepolia).mintAndSend(l1DepositProcessorAddress, targetInstance, defaultAmount, bridgePayload, transferAmount, { gasLimit, gasPrice }); console.log("TX hash", tx.hash); await tx.wait(); - // tx back: https://sepolia-optimism.etherscan.io/tx/0xad20c00a32969e6e819e4b5e47c7aba272b94d783e37db4706db56f414fc0db4 + // tx back: https://sepolia-optimism.etherscan.io/tx/0x08ff60b3ef506e0f34e5941953608fa5bec1a13d7e0a175084245aa622edf7e0 // tx result: // https://docs.optimism.io/builders/app-developers/tutorials/cross-dom-solidity#interact-with-the-l2-greeter @@ -64,7 +63,7 @@ const main = async () => { // cp .env.sample .env // Assign the private key in .env // Might change both L1 and L2 RPCs in src/index.js - // export L2_TX=0x6ef9bb50e9a70077ddb00d978b0baf93e3ba17e5f36a3978b225e97f7b613884 + // export L2_TX=0x299a1cb1d3811ce2addcc48e50eeb923ba1b9a16cacca5fd4ec83bd3af0961ee // env $(cat .env) L2_TX=$L2_TX node src/index.js // This must be called as IBridge.relayMessage() after the transaction challenge period has passed diff --git a/scripts/deployment/staking/polygon/deploy_06_polygon_targer_dispenser.js b/scripts/deployment/staking/polygon/deploy_06_polygon_targer_dispenser.js index b131c62b..10b7f502 100644 --- a/scripts/deployment/staking/polygon/deploy_06_polygon_targer_dispenser.js +++ b/scripts/deployment/staking/polygon/deploy_06_polygon_targer_dispenser.js @@ -11,6 +11,7 @@ async function main() { const useLedger = parsedData.useLedger; const derivationPath = parsedData.derivationPath; const providerName = parsedData.providerName; + const gasPriceInGwei = parsedData.gasPriceInGwei; let networkURL = parsedData.networkURL; if (providerName === "polygon") { @@ -43,9 +44,10 @@ async function main() { console.log("3. EOA to deploy PolygonTargetDispenserL2"); const PolygonTargetDispenserL2 = await ethers.getContractFactory("PolygonTargetDispenserL2"); console.log("You are signing the following transaction: PolygonTargetDispenserL2.connect(EOA).deploy()"); + const gasPrice = ethers.utils.parseUnits(gasPriceInGwei, "gwei"); const polygonTargetDispenserL2 = await PolygonTargetDispenserL2.connect(EOA).deploy(parsedData.olasAddress, parsedData.serviceStakingFactoryAddress, parsedData.polygonFXChildAddress, - parsedData.polygonDepositProcessorL1Address, parsedData.l1ChainId); + parsedData.polygonDepositProcessorL1Address, parsedData.l1ChainId, { gasPrice }); const result = await polygonTargetDispenserL2.deployed(); // Transaction details diff --git a/scripts/deployment/staking/polygon/globals_polygon_amoy.json b/scripts/deployment/staking/polygon/globals_polygon_amoy.json index 97dd76d8..0725ab4f 100644 --- a/scripts/deployment/staking/polygon/globals_polygon_amoy.json +++ b/scripts/deployment/staking/polygon/globals_polygon_amoy.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygonAmoy","networkURL":"https://rpc-amoy.polygon.technology/","gasPriceInGwei":"5","olasAddress":"0xeCD870085AA3bab4aE12F675811122da4173C6a9","serviceStakingFactoryAddress":"0x17806E2a12d5E0F48C9803cd397DB3F044DA3b77","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","polygonFXChildAddress":"0xE5930336866d0388f0f745A2d9207C7781047C0f","polygonDepositProcessorL1Address":"0x23CBf7653A73b5a46E6EAec382c532ed6D9AB730","l1ChainId":"11155111","polygonTargetDispenserL2Address":"0x670Ac235EE13C0B2a5065282bBB0c61cfB354592"} \ No newline at end of file +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygonAmoy","networkURL":"https://rpc-amoy.polygon.technology/","gasPriceInGwei":"5","olasAddress":"0xeCD870085AA3bab4aE12F675811122da4173C6a9","serviceStakingFactoryAddress":"0xc2c7E40674f1C7Bb99eFe5680Efd79842502bED4","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","polygonFXChildAddress":"0xE5930336866d0388f0f745A2d9207C7781047C0f","polygonDepositProcessorL1Address":"0x36c1beAFBeaf65DFcF16De60867BF9525455bf4E","l1ChainId":"11155111","polygonTargetDispenserL2Address":"0xab217B10Fb8800Aa709fEECa19341eDF41853018"} \ No newline at end of file diff --git a/scripts/deployment/staking/polygon/l2_contract_interaction.js b/scripts/deployment/staking/polygon/l2_contract_interaction.js new file mode 100644 index 00000000..cbcfd30c --- /dev/null +++ b/scripts/deployment/staking/polygon/l2_contract_interaction.js @@ -0,0 +1,37 @@ +/*global process*/ + +const { ethers } = require("hardhat"); + +const main = async () => { + // Setting up providers and wallets + const ALCHEMY_API_KEY_AMOY = process.env.ALCHEMY_API_KEY_AMOY; + const amoyURL = "https://polygon-amoy.g.alchemy.com/v2/" + ALCHEMY_API_KEY_AMOY; + const amoyProvider = new ethers.providers.JsonRpcProvider(amoyURL); + await amoyProvider.getBlockNumber().then((result) => { + console.log("Current block number amoy: " + result); + }); + + // Get the EOA + const account = ethers.utils.HDNode.fromMnemonic(process.env.TESTNET_MNEMONIC).derivePath("m/44'/60'/0'/0/0"); + const EOAamoy = new ethers.Wallet(account, amoyProvider); + + const fs = require("fs"); + const l2TargetDispenserAddress = "0xab217B10Fb8800Aa709fEECa19341eDF41853018"; + const dispenserJSON = "artifacts/contracts/staking/PolygonTargetDispenserL2.sol/PolygonTargetDispenserL2.json"; + const contractFromJSON = fs.readFileSync(dispenserJSON, "utf8"); + let parsedFile = JSON.parse(contractFromJSON); + const dispenserABI = parsedFile["abi"]; + const dispenser = new ethers.Contract(l2TargetDispenserAddress, dispenserABI, amoyProvider); + + const gasLimit = "300000"; + const tx = await dispenser.connect(EOAamoy).syncWithheldAmount("0x", { gasLimit }); + console.log("TX hash", tx.hash); + await tx.wait(); +}; + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/polygon/send_tokens_and_message.js b/scripts/deployment/staking/polygon/send_tokens_and_message.js index 30c9b69f..5b2a8ce1 100644 --- a/scripts/deployment/staking/polygon/send_tokens_and_message.js +++ b/scripts/deployment/staking/polygon/send_tokens_and_message.js @@ -15,9 +15,9 @@ const main = async () => { const account = ethers.utils.HDNode.fromMnemonic(process.env.TESTNET_MNEMONIC).derivePath("m/44'/60'/0'/0/0"); const EOAsepolia = new ethers.Wallet(account, sepoliaProvider); - const l1DepositProcessorAddress = "0x23CBf7653A73b5a46E6EAec382c532ed6D9AB730"; - const l2TargetDispenserAddress = "0x670Ac235EE13C0B2a5065282bBB0c61cfB354592"; - const targetInstance = "0xdbd5DA0FC7920Cc80875640fb296Ce2751d36929"; + const l1DepositProcessorAddress = "0x36c1beAFBeaf65DFcF16De60867BF9525455bf4E"; + const l2TargetDispenserAddress = "0xab217B10Fb8800Aa709fEECa19341eDF41853018"; + const targetInstance = "0xa28327f6b308f1a04e565025400311f48275c0fc"; const defaultAmount = 100; const stakingTargets = [targetInstance]; const stakingAmounts = new Array(stakingTargets.length).fill(defaultAmount); @@ -30,7 +30,7 @@ const main = async () => { // TESTING OF SENDING TOKEN AND MESSAGE const fs = require("fs"); - const dispenserAddress = "0x210af5b2FD68b3cdB94843C8e3462Daa52cCfe8F"; + const dispenserAddress = "0x42f43be9E5E50df51b86C5c6427223ff565f40C6"; const dispenserJSON = "artifacts/contracts/staking/test/MockStakingDispenser.sol/MockStakingDispenser.json"; const contractFromJSON = fs.readFileSync(dispenserJSON, "utf8"); let parsedFile = JSON.parse(contractFromJSON); @@ -47,8 +47,8 @@ const main = async () => { // List of addresses: https://contracts.decentraland.org/links // L2 to L1 tracking: - // tx: https://amoy.polygonscan.com/tx/0xe85cf44c1f307d1ec2dee3bc3f3ecab65a8b2d862a17a374a0d69b542a00de6d - // proof link: https://proof-generator.polygon.technology/api/v1/amoy/exit-payload/0xe85cf44c1f307d1ec2dee3bc3f3ecab65a8b2d862a17a374a0d69b542a00de6d?eventSignature=0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036 + // tx: https://amoy.polygonscan.com/tx/0x81bc4fde6431bbe0d40ede89f3e06603fde4e686790a3a44ef08505c6e803d16 + // proof link: https://proof-generator.polygon.technology/api/v1/amoy/exit-payload/0x81bc4fde6431bbe0d40ede89f3e06603fde4e686790a3a44ef08505c6e803d16?eventSignature=0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036 }; main() diff --git a/scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_targer_dispenser.js b/scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_targer_dispenser.js index 9e6fa1a8..3bb9c756 100644 --- a/scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_targer_dispenser.js +++ b/scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_targer_dispenser.js @@ -44,9 +44,9 @@ async function main() { const WormholeTargetDispenserL2 = await ethers.getContractFactory("WormholeTargetDispenserL2"); console.log("You are signing the following transaction: WormholeTargetDispenserL2.connect(EOA).deploy()"); const wormholeTargetDispenserL2 = await WormholeTargetDispenserL2.connect(EOA).deploy(parsedData.olasAddress, - parsedData.serviceStakingFactoryAddress, parsedData.timelockAddress, - parsedData.wormholeL2MessageRelayer, parsedData.celoWormholeDepositProcessorL1Address, - parsedData.wormholel1ChainId, parsedData.wormholeL2CoreAddress, parsedData.wormholeL2TokenRelayerAddress); + parsedData.serviceStakingFactoryAddress, parsedData.wormholeL2MessageRelayer, + parsedData.celoWormholeDepositProcessorL1Address, parsedData.wormholel1ChainId, + parsedData.wormholeL2CoreAddress, parsedData.wormholeL2TokenRelayerAddress); const result = await wormholeTargetDispenserL2.deployed(); // Transaction details diff --git a/scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_deposit_processor.js b/scripts/deployment/staking/wormhole/deploy_05_polygon_wormhole_deposit_processor.js similarity index 94% rename from scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_deposit_processor.js rename to scripts/deployment/staking/wormhole/deploy_05_polygon_wormhole_deposit_processor.js index 0fccc723..3b2cc674 100644 --- a/scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_deposit_processor.js +++ b/scripts/deployment/staking/wormhole/deploy_05_polygon_wormhole_deposit_processor.js @@ -64,7 +64,7 @@ async function main() { // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; - execSync("npx hardhat verify --constructor-args scripts/deployment/staking/verify_05_wormhole_deposit_processor.js --network " + providerName + " " + wormholeDepositProcessorL1.address, { encoding: "utf-8" }); + execSync("npx hardhat verify --constructor-args scripts/deployment/staking/wormhole/verify_05_polygon_wormhole_deposit_processor.js --network " + providerName + " " + wormholeDepositProcessorL1.address, { encoding: "utf-8" }); } } diff --git a/scripts/deployment/staking/wormhole/globals_celo_mainnet.json b/scripts/deployment/staking/wormhole/globals_celo_mainnet.json index 49905e9b..2b7b0975 100644 --- a/scripts/deployment/staking/wormhole/globals_celo_mainnet.json +++ b/scripts/deployment/staking/wormhole/globals_celo_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xb8B338b84cc4E16D1a73B617bfbe8f74a07270E6","serviceStakingFactoryAddress":"0x10100e74b7F706222F8A7C0be9FC7Ae1717Ad8B2","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"5","celoWormholeDepositProcessorL1Address":"0xab217B10Fb8800Aa709fEECa19341eDF41853018","celoWormholeTargetDispenserL2Address":"0x7a6ca5BD19EE9182BEe5662008dFF05c60C3A76f"} \ No newline at end of file +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xb8B338b84cc4E16D1a73B617bfbe8f74a07270E6","serviceStakingFactoryAddress":"0x670Ac235EE13C0B2a5065282bBB0c61cfB354592","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"5","celoWormholeDepositProcessorL1Address":"0x04A0afD079F14D539B17253Ea93563934A024165","celoWormholeTargetDispenserL2Address":"0x17806E2a12d5E0F48C9803cd397DB3F044DA3b77"} \ No newline at end of file diff --git a/scripts/deployment/staking/wormhole/globals_polygon_mainnet.json b/scripts/deployment/staking/wormhole/globals_polygon_mainnet.json index d3f59ac5..c8590003 100644 --- a/scripts/deployment/staking/wormhole/globals_polygon_mainnet.json +++ b/scripts/deployment/staking/wormhole/globals_polygon_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","olasAddress":"0x34235f9D447f9F54167e2Ac7A0F4283cB3fAD669","dispenserAddress":"0xc2c7E40674f1C7Bb99eFe5680Efd79842502bED4","wormholeL1CoreAddress":"0x7A4B5a56256163F07b2C80A7cA55aBE66c4ec4d7","wormholeL1TokenRelayerAddress":"0x5a58505a96D1dbf8dF91cB21B54419FC36e93fdE","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"0xab217B10Fb8800Aa709fEECa19341eDF41853018"} \ No newline at end of file +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","olasAddress":"0x34235f9D447f9F54167e2Ac7A0F4283cB3fAD669","dispenserAddress":"0x0338893fB1A1D9Df03F72CC53D8f786487d3D03E","wormholeL1CoreAddress":"0x7A4B5a56256163F07b2C80A7cA55aBE66c4ec4d7","wormholeL1TokenRelayerAddress":"0x5a58505a96D1dbf8dF91cB21B54419FC36e93fdE","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"0x04A0afD079F14D539B17253Ea93563934A024165"} \ No newline at end of file diff --git a/scripts/deployment/staking/wormhole/send_tokens_and_message.js b/scripts/deployment/staking/wormhole/send_tokens_and_message.js index 61f454df..e1f82476 100644 --- a/scripts/deployment/staking/wormhole/send_tokens_and_message.js +++ b/scripts/deployment/staking/wormhole/send_tokens_and_message.js @@ -15,9 +15,9 @@ const main = async () => { const account = ethers.utils.HDNode.fromMnemonic(process.env.TESTNET_MNEMONIC).derivePath("m/44'/60'/0'/0/0"); const EOApolygon = new ethers.Wallet(account, polygonProvider); - const l1DepositProcessorAddress = "0xab217B10Fb8800Aa709fEECa19341eDF41853018"; - const l2TargetDispenserAddress = "0x7a6ca5BD19EE9182BEe5662008dFF05c60C3A76f"; - const targetInstance = "0x49DB8Be279e8eEc6975f30A3beCC57CAC9922cBB"; + const l1DepositProcessorAddress = "0x04A0afD079F14D539B17253Ea93563934A024165"; + const l2TargetDispenserAddress = "0x945550dECe7E40ae70C6ebf5699637927eAF13E9"; + const targetInstance = "0x83839b36d41bdb44abfb6a52ef5549de9bbbb046"; const defaultAmount = ethers.utils.parseEther("100.0"); const stakingTargets = [targetInstance]; const stakingAmounts = new Array(stakingTargets.length).fill(defaultAmount); @@ -26,7 +26,7 @@ const main = async () => { // TESTING OF SENDING TOKEN AND MESSAGE const fs = require("fs"); - const dispenserAddress = "0xc2c7E40674f1C7Bb99eFe5680Efd79842502bED4"; + const dispenserAddress = "0x0338893fB1A1D9Df03F72CC53D8f786487d3D03E"; const dispenserJSON = "artifacts/contracts/staking/test/MockStakingDispenser.sol/MockStakingDispenser.json"; const contractFromJSON = fs.readFileSync(dispenserJSON, "utf8"); let parsedFile = JSON.parse(contractFromJSON); @@ -38,7 +38,8 @@ const main = async () => { const bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [EOApolygon.address, gasLimitMessage]); console.log("bridgePayload", bridgePayload); - const gasPrice = await polygonProvider.getGasPrice(); + const gasPrice = ethers.utils.parseUnits("40", "gwei"); //await polygonProvider.getGasPrice(); + const gasLimit = "500000"; // Run this with wormholeRelayer.quoteEVMDeliveryPrice(targetChain, 0, gasLimitMessage); const wormholeCost = ethers.BigNumber.from("500000").mul(gasPrice); @@ -47,11 +48,12 @@ const main = async () => { const transferAmount = defaultAmount; const tx = await dispenser.connect(EOApolygon).mintAndSend(l1DepositProcessorAddress, targetInstance, defaultAmount, - bridgePayload, transferAmount, { value: totalCost }); + bridgePayload, transferAmount, { value: totalCost, gasPrice, gasLimit }); console.log("TX hash", tx.hash); await tx.wait(); - // tx back: + // tx back: https://celoscan.io/tx/0x40ac4e0970069e23ef47b166eb8f7bf0959cabffac0e61109fc87ed029debdae + // finalizing tx: https://polygonscan.com/tx/0x4c283e0f51abf02b33f4824fef4727a4de8a0b8ceec23ca9e188045e8f7372e9 }; main() diff --git a/scripts/deployment/staking/wormhole/verify_05_wormhole_deposit_processor.js b/scripts/deployment/staking/wormhole/verify_05_polygon_wormhole_deposit_processor.js similarity index 100% rename from scripts/deployment/staking/wormhole/verify_05_wormhole_deposit_processor.js rename to scripts/deployment/staking/wormhole/verify_05_polygon_wormhole_deposit_processor.js diff --git a/test/DispenserStakingIncentives.js b/test/DispenserStakingIncentives.js index 0074a0c2..ec2de4b0 100644 --- a/test/DispenserStakingIncentives.js +++ b/test/DispenserStakingIncentives.js @@ -132,8 +132,7 @@ describe("DispenserStakingIncentives", async () => { const GnosisTargetDispenserL2 = await ethers.getContractFactory("GnosisTargetDispenserL2"); gnosisTargetDispenserL2 = await GnosisTargetDispenserL2.deploy(olas.address, - stakingProxyFactory.address, bridgeRelayer.address, gnosisDepositProcessorL1.address, chainId, - bridgeRelayer.address); + stakingProxyFactory.address, bridgeRelayer.address, gnosisDepositProcessorL1.address, chainId); await gnosisTargetDispenserL2.deployed(); // Set the gnosisTargetDispenserL2 address in gnosisDepositProcessorL1 @@ -434,8 +433,6 @@ describe("DispenserStakingIncentives", async () => { // Set staking fraction to 100% await tokenomics.changeIncentiveFractions(0, 0, 0, 0, 0, 100); - // Changing staking parameters - await tokenomics.changeStakingParams(50, 10); // Checkpoint to apply changes await helpers.time.increase(epochLen); @@ -728,6 +725,44 @@ describe("DispenserStakingIncentives", async () => { await snapshot.restore(); }); + it("Should fail when trying to claim staking incentives for a retainer", async () => { + // Take a snapshot of the current state of the blockchain + const snapshot = await helpers.takeSnapshot(); + + // Set staking fraction to 100% + await tokenomics.changeIncentiveFractions(0, 0, 0, 0, 0, 100); + + // Checkpoint to apply changes + await helpers.time.increase(epochLen); + await tokenomics.checkpoint(); + + // Unpause the dispenser + await dispenser.setPauseState(0); + + // Add deployer as a retainer nominee + await vw.addNominee(convertBytes32ToAddress(retainer), chainId); + + // Vote for the retainer + await vw.setNomineeRelativeWeight(convertBytes32ToAddress(retainer), chainId, defaultWeight); + + // Checkpoint to get to the next epoch + await helpers.time.increase(epochLen); + await tokenomics.checkpoint(); + + // Try to claim incentives for the retainer + await expect( + dispenser.claimStakingIncentives(numClaimedEpochs, chainId, retainer, bridgePayload) + ).to.be.revertedWithCustomError(dispenser, "WrongAccount"); + + // Try to claim incentives for the retainer in the batch + await expect( + dispenser.claimStakingIncentivesBatch(numClaimedEpochs, [chainId], [[retainer]], [bridgePayload], [0]) + ).to.be.revertedWithCustomError(dispenser, "WrongAccount"); + + // Restore to the state of the snapshot + await snapshot.restore(); + }); + it("Sync withheld amount maintenance (DAO)", async () => { // Take a snapshot of the current state of the blockchain const snapshot = await helpers.takeSnapshot(); @@ -768,6 +803,11 @@ describe("DispenserStakingIncentives", async () => { // Sync withheld amount maintenance await dispenser.syncWithheldAmountMaintenance(gnosisChainId, 100, defaultHash); + // Try to sync again with the same hash + await expect( + dispenser.syncWithheldAmountMaintenance(gnosisChainId, 100, defaultHash) + ).to.be.revertedWithCustomError(gnosisDepositProcessorL1, "AlreadyDelivered"); + // Restore to the state of the snapshot await snapshot.restore(); }); @@ -814,7 +854,15 @@ describe("DispenserStakingIncentives", async () => { // Claiming is not possible as it's the epoch after the staking contract was removed from nominees await expect( - dispenser.claimStakingIncentives(numClaimedEpochs, chainId, stakingTarget, bridgePayload) + dispenser.claimStakingIncentives(numClaimedEpochs + 1, chainId, stakingTarget, bridgePayload) + ).to.be.revertedWithCustomError(dispenser, "Overflow"); + + // Wait for one more epoch and try again + await helpers.time.increase(epochLen); + await tokenomics.checkpoint(); + + await expect( + dispenser.claimStakingIncentives(numClaimedEpochs + 1, chainId, stakingTarget, bridgePayload) ).to.be.revertedWithCustomError(dispenser, "Overflow"); // Restore to the state of the snapshot @@ -865,7 +913,7 @@ describe("DispenserStakingIncentives", async () => { ).to.be.revertedWithCustomError(dispenser, "DepositProcessorOnly"); // Sync back the withheld amount - await gnosisTargetDispenserL2.syncWithheldTokens(gnosisBridgePayload); + await gnosisTargetDispenserL2.syncWithheldAmount(gnosisBridgePayload); // Add a valid staking target nominee await vw.addNominee(stakingInstance.address, gnosisChainId); @@ -899,6 +947,90 @@ describe("DispenserStakingIncentives", async () => { await snapshot.restore(); }); + it("Should not claim anything is staking fraction is zero", async () => { + // Take a snapshot of the current state of the blockchain + const snapshot = await helpers.takeSnapshot(); + + // Set all fractions to zero + await tokenomics.changeIncentiveFractions(0, 0, 0, 0, 0, 0); + + // Checkpoint to apply changes + await helpers.time.increase(epochLen); + await tokenomics.checkpoint(); + + // Unpause the dispenser + await dispenser.setPauseState(0); + + // Add a non-whitelisted staking instance as a nominee + await vw.addNominee(stakingInstance.address, chainId); + + const stakingTarget = convertAddressToBytes32(stakingInstance.address); + + // Vote for the nominee + await vw.setNomineeRelativeWeight(stakingInstance.address, chainId, defaultWeight); + + // Checkpoint to account for weights + await helpers.time.increase(epochLen); + await tokenomics.checkpoint(); + + // Get the staking inflation for the previous epoch + const lastPoint = await tokenomics.epochCounter() - 1; + // Get the staking point of the last epoch + let sp = await tokenomics.mapEpochStakingPoints(lastPoint); + const sIncentive = sp.stakingIncentive; + + // Claim with withheld amount being accounted for + await dispenser.claimStakingIncentives(numClaimedEpochs, chainId, stakingTarget, bridgePayload); + + // Check that no OLAS has been distributed + expect(await olas.balanceOf(stakingInstance.address)).to.equal(0); + + // All the staking incentives must be returned into current epoch + sp = await tokenomics.mapEpochStakingPoints(lastPoint + 1); + expect(sp.stakingIncentive).to.equal(sIncentive); + + // Restore to the state of the snapshot + await snapshot.restore(); + }); + + it("Return all the staking inflation if there is no nominee", async () => { + // Take a snapshot of the current state of the blockchain + const snapshot = await helpers.takeSnapshot(); + + // Set staking fraction to 100% + await tokenomics.changeIncentiveFractions(0, 0, 0, 0, 0, 100); + // Changing staking parameters + await tokenomics.changeStakingParams(100, 10); + + // Checkpoint to apply changes + await helpers.time.increase(epochLen); + await tokenomics.checkpoint(); + + // Unpause the dispenser + await dispenser.setPauseState(0); + + // Add a non-whitelisted staking instance as a nominee + await vw.addNominee(stakingInstance.address, chainId); + + const stakingTarget = convertAddressToBytes32(stakingInstance.address); + + // Vote for the nominee + await vw.setNomineeRelativeWeight(stakingInstance.address, chainId, 0); + + // Checkpoint to account for weights + await helpers.time.increase(epochLen); + await tokenomics.checkpoint(); + + // Claim with withheld amount being accounted for + await dispenser.claimStakingIncentives(numClaimedEpochs, chainId, stakingTarget, bridgePayload); + + // Check that no OLAS has been distributed + expect(await olas.balanceOf(stakingInstance.address)).to.equal(0); + + // Restore to the state of the snapshot + await snapshot.restore(); + }); + it("Claim staking incentives for a single nominee with bridging decimals lower than 18", async () => { // Take a snapshot of the current state of the blockchain const snapshot = await helpers.takeSnapshot(); @@ -986,7 +1118,7 @@ describe("DispenserStakingIncentives", async () => { expect(await gnosisTargetDispenserL2.withheldAmount()).to.gt(0); // Sync back the withheld amount - await gnosisTargetDispenserL2.syncWithheldTokens(gnosisBridgePayload); + await gnosisTargetDispenserL2.syncWithheldAmount(gnosisBridgePayload); // Get another staking instance const MockStakingProxy = await ethers.getContractFactory("MockStakingProxy"); diff --git a/test/StakingBridging.js b/test/StakingBridging.js index 324c9bc7..ca6ab153 100644 --- a/test/StakingBridging.js +++ b/test/StakingBridging.js @@ -93,8 +93,7 @@ describe("StakingBridging", async () => { const GnosisTargetDispenserL2 = await ethers.getContractFactory("GnosisTargetDispenserL2"); gnosisTargetDispenserL2 = await GnosisTargetDispenserL2.deploy(olas.address, - stakingProxyFactory.address, bridgeRelayer.address, gnosisDepositProcessorL1.address, chainId, - bridgeRelayer.address); + stakingProxyFactory.address, bridgeRelayer.address, gnosisDepositProcessorL1.address, chainId); await gnosisTargetDispenserL2.deployed(); // Set the gnosisTargetDispenserL2 address in gnosisDepositProcessorL1 @@ -402,11 +401,11 @@ describe("StakingBridging", async () => { expect(Number(withheldAmount)).to.equal(stakingIncentive); // Send withheld amount from L2 to L1 - await arbitrumTargetDispenserL2.syncWithheldTokens("0x"); + await arbitrumTargetDispenserL2.syncWithheldAmount("0x"); // Try to send withheld amount from L2 to L1 when there is none await expect( - arbitrumTargetDispenserL2.syncWithheldTokens("0x") + arbitrumTargetDispenserL2.syncWithheldAmount("0x") ).to.be.revertedWithCustomError(arbitrumDepositProcessorL1, "ZeroValue"); // Get staking batch hash @@ -490,6 +489,13 @@ describe("StakingBridging", async () => { stakingIncentive) ).to.be.revertedWithCustomError(arbitrumDepositProcessorL1, "ZeroValue"); + bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256", "uint256", "uint256", "uint256"], + [deployer.address, defaultGasPrice, defaultCost, 2, defaultCost]); + await expect( + dispenser.mintAndSend(arbitrumDepositProcessorL1.address, stakingTarget, stakingIncentive, bridgePayload, + stakingIncentive) + ).to.be.revertedWithCustomError(arbitrumDepositProcessorL1, "LowerThan"); + // Not enough msg.value to cover the cost bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256", "uint256", "uint256", "uint256"], [deployer.address, defaultGasPrice, defaultCost, defaultGasLimit, defaultCost]); @@ -586,16 +592,6 @@ describe("StakingBridging", async () => { }); context("Gnosis", async function () { - it("Should fail with incorrect constructor parameters for L2", async function () { - const GnosisTargetDispenserL2 = await ethers.getContractFactory("GnosisTargetDispenserL2"); - - // Zero L2 token relayer address - await expect( - GnosisTargetDispenserL2.deploy(olas.address, stakingProxyFactory.address, bridgeRelayer.address, - gnosisDepositProcessorL1.address, chainId, AddressZero) - ).to.be.revertedWithCustomError(gnosisTargetDispenserL2, "ZeroAddress"); - }); - it("Send message with single target and amount from L1 to L2 and back", async function () { // Encode the staking data to emulate it being received on L2 const stakingTarget = stakingInstance.address; @@ -653,7 +649,7 @@ describe("StakingBridging", async () => { // Trying to sync withheld tokens when paused await expect( - gnosisTargetDispenserL2.syncWithheldTokens("0x") + gnosisTargetDispenserL2.syncWithheldAmount("0x") ).to.be.revertedWithCustomError(gnosisTargetDispenserL2, "Paused"); // Unpause and send withheld amount from L2 to L1 @@ -661,14 +657,14 @@ describe("StakingBridging", async () => { // Send withheld token info from L2 to L1 when the gas is going to be adjusted from zero let bridgePayload = ethers.utils.defaultAbiCoder.encode(["uint256"], [0]); - await gnosisTargetDispenserL2.syncWithheldTokens(bridgePayload); + await gnosisTargetDispenserL2.syncWithheldAmount(bridgePayload); // Send a message on L2 with funds for a wrong address await dispenser.mintAndSend(gnosisDepositProcessorL1.address, deployer.address, stakingIncentive, "0x", stakingIncentive); // Send withheld token info from L2 to L1 when the gas is going to be adjusted without any payload - await gnosisTargetDispenserL2.syncWithheldTokens("0x"); + await gnosisTargetDispenserL2.syncWithheldAmount("0x"); // Send a message on L2 with funds for a wrong address await dispenser.mintAndSend(gnosisDepositProcessorL1.address, deployer.address, stakingIncentive, "0x", @@ -676,7 +672,7 @@ describe("StakingBridging", async () => { // Send withheld token info from L2 to L1 when the gas is going to be adjusted from being too high bridgePayload = ethers.utils.defaultAbiCoder.encode(["uint256"], [moreThanMaxUint96]); - await gnosisTargetDispenserL2.syncWithheldTokens(bridgePayload); + await gnosisTargetDispenserL2.syncWithheldAmount(bridgePayload); }); it("Verify senders on L1 and L2", async function () { @@ -704,7 +700,7 @@ describe("StakingBridging", async () => { // Try to receive a message with the wrong sender await expect( - gnosisTargetDispenserL2.syncWithheldTokens(HashZero) + gnosisTargetDispenserL2.syncWithheldAmount(HashZero) ).to.be.revertedWithCustomError(gnosisDepositProcessorL1, "WrongMessageSender"); // Deploy another bridge relayer @@ -781,7 +777,7 @@ describe("StakingBridging", async () => { // Send withheld amount from L2 to L1 with the zero gas limit set bridgePayload = ethers.utils.defaultAbiCoder.encode(["uint256"], [0]); - await optimismTargetDispenserL2.syncWithheldTokens(bridgePayload); + await optimismTargetDispenserL2.syncWithheldAmount(bridgePayload); // Send a message on L2 with funds for a wrong address await dispenser.mintAndSend(optimismDepositProcessorL1.address, deployer.address, stakingIncentive, bridgePayload, @@ -789,14 +785,14 @@ describe("StakingBridging", async () => { // Send withheld amount from L2 to L1 with the more than recommended gas limit bridgePayload = ethers.utils.defaultAbiCoder.encode(["uint256"], [moreThanMaxUint96]); - await optimismTargetDispenserL2.syncWithheldTokens(bridgePayload); + await optimismTargetDispenserL2.syncWithheldAmount(bridgePayload); // Send a message on L2 with funds for a wrong address await dispenser.mintAndSend(optimismDepositProcessorL1.address, deployer.address, stakingIncentive, bridgePayload, stakingIncentive); // Send withheld amount from L2 to L1 without any bridge payload - await optimismTargetDispenserL2.syncWithheldTokens("0x"); + await optimismTargetDispenserL2.syncWithheldAmount("0x"); }); }); @@ -849,7 +845,7 @@ describe("StakingBridging", async () => { expect(Number(withheldAmount)).to.equal(stakingIncentive); // Send withheld amount from L2 to L1 - await polygonTargetDispenserL2.syncWithheldTokens("0x"); + await polygonTargetDispenserL2.syncWithheldAmount("0x"); }); }); @@ -951,7 +947,7 @@ describe("StakingBridging", async () => { // Try to send withheld amount from L2 to L1 with insufficient normalized withheld amount bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [deployer.address, 0]); await expect( - wormholeTargetDispenserL2.syncWithheldTokens(bridgePayload, {value: defaultMsgValue}) + wormholeTargetDispenserL2.syncWithheldAmount(bridgePayload, {value: defaultMsgValue}) ).to.be.revertedWithCustomError(wormholeTargetDispenserL2, "ZeroValue"); // Send a message on L2 with funds for a wrong address with a bigger amount @@ -961,12 +957,12 @@ describe("StakingBridging", async () => { // Try to send withheld amount from L2 to L1 with a zero refund address bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [AddressZero, 0]); await expect( - wormholeTargetDispenserL2.syncWithheldTokens(bridgePayload, {value: defaultMsgValue}) + wormholeTargetDispenserL2.syncWithheldAmount(bridgePayload, {value: defaultMsgValue}) ).to.be.revertedWithCustomError(wormholeTargetDispenserL2, "ZeroAddress"); // Send withheld amount from L2 to L1 bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [deployer.address, 0]); - await wormholeTargetDispenserL2.syncWithheldTokens(bridgePayload, {value: defaultMsgValue}); + await wormholeTargetDispenserL2.syncWithheldAmount(bridgePayload, {value: defaultMsgValue}); }); it("Checks during a message sending on L1 and L2", async function () { @@ -995,13 +991,13 @@ describe("StakingBridging", async () => { // Try to send withheld tokens with an incorrect payload await expect( - wormholeTargetDispenserL2.syncWithheldTokens("0x") + wormholeTargetDispenserL2.syncWithheldAmount("0x") ).to.be.revertedWithCustomError(wormholeTargetDispenserL2, "IncorrectDataLength"); // Try to send withheld tokens without any msg.value covering the cost bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [deployer.address, 0]); await expect( - wormholeTargetDispenserL2.syncWithheldTokens(bridgePayload) + wormholeTargetDispenserL2.syncWithheldAmount(bridgePayload) ).to.be.revertedWithCustomError(wormholeTargetDispenserL2, "LowerThan"); }); @@ -1062,13 +1058,13 @@ describe("StakingBridging", async () => { await bridgeRelayer.setMode(3); bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [deployer.address, 0]); await expect( - wormholeTargetDispenserL2.syncWithheldTokens(bridgePayload, {value: defaultMsgValue}) + wormholeTargetDispenserL2.syncWithheldAmount(bridgePayload, {value: defaultMsgValue}) ).to.be.revertedWithCustomError(wormholeTargetDispenserL2, "WrongChainId"); // Try to send withheld amount from L2 to L1 with already used hash await bridgeRelayer.setMode(6); // Sync withheld once with the correct nonce - await wormholeTargetDispenserL2.syncWithheldTokens(bridgePayload, {value: defaultMsgValue}); + await wormholeTargetDispenserL2.syncWithheldAmount(bridgePayload, {value: defaultMsgValue}); bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [deployer.address, defaultGasLimit]); // Need to create a withheld condition again by sending another staking to a wrong address @@ -1077,7 +1073,7 @@ describe("StakingBridging", async () => { // Now the delivery hash will fail bridgePayload = ethers.utils.defaultAbiCoder.encode(["address", "uint256"], [deployer.address, 0]); await expect( - wormholeTargetDispenserL2.syncWithheldTokens(bridgePayload, {value: defaultMsgValue}) + wormholeTargetDispenserL2.syncWithheldAmount(bridgePayload, {value: defaultMsgValue}) ).to.be.revertedWithCustomError(wormholeTargetDispenserL2, "AlreadyDelivered"); }); });