UNPKG

@airdao/astra-universal-router

Version:

Smart contracts for Universal Router

503 lines 86.5 kB
{ "_format": "hh-sol-artifact-1", "contractName": "UniversalRouter", "sourceName": "contracts/UniversalRouter.sol", "abi": [ { "inputs": [ { "components": [ { "internalType": "address", "name": "permit2", "type": "address" }, { "internalType": "address", "name": "samb", "type": "address" }, { "internalType": "address", "name": "seaportV1_5", "type": "address" }, { "internalType": "address", "name": "seaportV1_4", "type": "address" }, { "internalType": "address", "name": "openseaConduit", "type": "address" }, { "internalType": "address", "name": "nftxZap", "type": "address" }, { "internalType": "address", "name": "x2y2", "type": "address" }, { "internalType": "address", "name": "foundation", "type": "address" }, { "internalType": "address", "name": "sudoswap", "type": "address" }, { "internalType": "address", "name": "elementMarket", "type": "address" }, { "internalType": "address", "name": "nft20Zap", "type": "address" }, { "internalType": "address", "name": "cryptopunks", "type": "address" }, { "internalType": "address", "name": "looksRareV2", "type": "address" }, { "internalType": "address", "name": "routerRewardsDistributor", "type": "address" }, { "internalType": "address", "name": "looksRareRewardsDistributor", "type": "address" }, { "internalType": "address", "name": "looksRareToken", "type": "address" }, { "internalType": "address", "name": "classicFactory", "type": "address" }, { "internalType": "address", "name": "clFactory", "type": "address" }, { "internalType": "bytes32", "name": "pairInitCodeHash", "type": "bytes32" }, { "internalType": "bytes32", "name": "poolInitCodeHash", "type": "bytes32" } ], "internalType": "struct RouterParameters", "name": "params", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AMBNotAccepted", "type": "error" }, { "inputs": [], "name": "BalanceTooLow", "type": "error" }, { "inputs": [], "name": "BuyPunkFailed", "type": "error" }, { "inputs": [], "name": "CLInvalidAmountOut", "type": "error" }, { "inputs": [], "name": "CLInvalidCaller", "type": "error" }, { "inputs": [], "name": "CLInvalidSwap", "type": "error" }, { "inputs": [], "name": "CLTooLittleReceived", "type": "error" }, { "inputs": [], "name": "CLTooMuchRequested", "type": "error" }, { "inputs": [], "name": "ClassicInvalidPath", "type": "error" }, { "inputs": [], "name": "ClassicTooLittleReceived", "type": "error" }, { "inputs": [], "name": "ClassicTooMuchRequested", "type": "error" }, { "inputs": [], "name": "ContractLocked", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "commandIndex", "type": "uint256" }, { "internalType": "bytes", "name": "message", "type": "bytes" } ], "name": "ExecutionFailed", "type": "error" }, { "inputs": [], "name": "FromAddressIsNotOwner", "type": "error" }, { "inputs": [], "name": "InsufficientAMB", "type": "error" }, { "inputs": [], "name": "InsufficientToken", "type": "error" }, { "inputs": [], "name": "InvalidBips", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "commandType", "type": "uint256" } ], "name": "InvalidCommandType", "type": "error" }, { "inputs": [], "name": "InvalidOwnerERC1155", "type": "error" }, { "inputs": [], "name": "InvalidOwnerERC721", "type": "error" }, { "inputs": [], "name": "InvalidPath", "type": "error" }, { "inputs": [], "name": "InvalidReserves", "type": "error" }, { "inputs": [], "name": "InvalidSpender", "type": "error" }, { "inputs": [], "name": "LengthMismatch", "type": "error" }, { "inputs": [], "name": "SliceOutOfBounds", "type": "error" }, { "inputs": [], "name": "TransactionDeadlinePassed", "type": "error" }, { "inputs": [], "name": "UnableToClaim", "type": "error" }, { "inputs": [], "name": "UnsafeCast", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsSent", "type": "event" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "astraCLSwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "looksRareClaim", "type": "bytes" } ], "name": "collectRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "commands", "type": "bytes" }, { "internalType": "bytes[]", "name": "inputs", "type": "bytes[]" } ], "name": "execute", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "commands", "type": "bytes" }, { "internalType": "bytes[]", "name": "inputs", "type": "bytes[]" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "execute", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155BatchReceived", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC1155Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x34620003ed576001600160401b0362004bdf38819003610300601f8201601f191681019084821190821017620003d7576102809282916040526103003912620003ed57604051610280810191821181831017620003d757610260916040526200006a610300620003f2565b8082526200007a610320620003f2565b60208301526200008c610340620003f2565b60408301526200009e610360620003f2565b6060830152620000b0610380620003f2565b6080830152620000c26103a0620003f2565b60a0830152620000d46103c0620003f2565b60c0830152620000e66103e0620003f2565b60e0830152620000f8610400620003f2565b6101008301526200010b610420620003f2565b6101208301526200011e610440620003f2565b61014083015262000131610460620003f2565b61016083015262000144610480620003f2565b610180830152620001576104a0620003f2565b6101a08301526200016a6104c0620003f2565b6101c08301526200017d6104e0620003f2565b6101e083015262000190610500620003f2565b610200830152620001a3610520620003f2565b610220838101918252610540516102408086019182526103008701518787019081526001600160a01b0395861660a09081526020880151871660809081526040808a0151891660c090815260608b01518a1660e0908152928b01518a16610100908152938b01518a16610120908152908b01518a16610140908152928b01518a16610160908152938b01518a16610180908152908b01518a166101a0908152928b01518a166101c0908152938b01518a166101e0908152908b01518a16610200908152908b01518a16909752918901518816909352918701518616909752919094015183166102805292516102a05251166102c05290516102e052600019600055600180546001600160a01b03191681179055516147d762000408823960805181818161244901526125d0015260a05181818161166301528181611763015281816122c2015281816127e80152613d1e015260c05181612b06015260e051816134bc0152610100518161369c01526101205181612bba0152610140518181816130640152613166015261016051816132740152610180518181816130b701526137c601526101a0518161345301526101c0518161310e01526101e05181612bf801526102005181612b63015261022051816102990152610240518161023d01526102605181610321015261028051818181611c4401528181612054015261441301526102a051818181611c230152818161203301526143f201526102c05181613f6d01526102e05181613f4b01526147d790f35b634e487b7160e01b600052604160045260246000fd5b600080fd5b51906001600160a01b0382168203620003ed5756fe60a0604081815260049182361015610022575b505050361561002057600080fd5b005b600090813560e01c90816301ffc9a714610aaf5750806311c17848146106d4578063150b7a021461064757806324856bc31461057e5780633593564c1461043e578063709a1cc2146101d6578063bc197c81146101125763f23a6e6103610012573461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f576100ba610bd0565b506100c3610bf3565b506084359067ffffffffffffffff821161010f57506020926100e791369101610b9d565b5050517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b80fd5b503461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f5761014a610bd0565b50610153610bf3565b5067ffffffffffffffff906044358281116101d2576101759036908601610c37565b50506064358281116101d25761018e9036908601610c37565b505060843591821161010f57506020926101aa91369101610b9d565b5050517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b5080fd5b5091903461043a57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104365783833567ffffffffffffffff81116101d25761022a829136908701610b9d565b90818551928392833781018381520390827f00000000000000000000000000000000000000000000000000000000000000005af16102666139a8565b501561040e5780517f70a082310000000000000000000000000000000000000000000000000000000081523084820152907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168383602481845afa9283156104045786936103cf575b5081517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169581019586526020860184905294849186918290899082906040015b03925af19384156103c5577f1e8f03f716bc104bf7d728131967a0c771e85ab54d09c1e2d6ed9e0bc4e2a16c94610398575b5051908152a180f35b6103b790843d86116103be575b6103af818361392d565b810190613bc0565b503861038f565b503d6103a5565b81513d87823e3d90fd5b9092508381813d83116103fd575b6103e7818361392d565b810103126103f957519161035d6102e4565b8580fd5b503d6103dd565b82513d88823e3d90fd5b9050517f7d529919000000000000000000000000000000000000000000000000000000008152fd5b8380fd5b8280fd5b50919060607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261043a5767ffffffffffffffff823581811161057a5761048a9036908501610b9d565b916024359081116103f9576104a29036908601610c37565b929091604435421161055257333014610540576001958654958773ffffffffffffffffffffffffffffffffffffffff88160361051a5750509185949391610511937fffffffffffffffffffffffff00000000000000000000000000000000000000009586339116178755610cc6565b81541617905580f35b517f6f5ffb7e000000000000000000000000000000000000000000000000000000008152fd5b909192935061054f9450610cc6565b80f35b8585517f5bf6f916000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b509190807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261043a5767ffffffffffffffff823581811161057a576105c99036908501610b9d565b916024359081116103f9576105e19036908601610c37565b929091333014610540576001958654958773ffffffffffffffffffffffffffffffffffffffff88160361051a5750509185949391610511937fffffffffffffffffffffffff00000000000000000000000000000000000000009586339116178755610cc6565b503461010f5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f5761067f610bd0565b50610688610bf3565b506064359067ffffffffffffffff821161010f57506020926106ac91369101610b9d565b5050517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b50913461043a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261043a578035906024356044359167ffffffffffffffff92838111610aab5761072d9036908301610b9d565b91909287861394851580610aa1575b610a79578385018886820312610a75578535918211610a7557610760918601613a03565b5060208401359373ffffffffffffffffffffffffffffffffffffffff93848616809603610a755761079091613dc4565b929093602b8510610a4d578335968760601c9760178601968735958660601c936107c58c8662ffffff809760481c1691613eb6565b8633911603610a255715610a1b5750828a105b156107f157505050505050505061054f93503391613e4c565b909192939598506042819a95979a10156000146109d257806017116109ce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901937f80000000000000000000000000000000000000000000000000000000000000008110156109ce5761086490613e1f565b97602b85106109a657926108f28b8261089a8f98959661094497602e859f9e9d9c9a013560601c908282109c60481c1691613eb6565b16988815610988576108c16401000276a49d5b83519687946020860152606085019161386a565b908c830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528361392d565b8851998a98899788967f128acb0800000000000000000000000000000000000000000000000000000000885233908801526024870152604486015216606484015260a0608484015260a4830190610c68565b03925af1801561097c5761095757505080f35b813d8311610975575b61096a818361392d565b8101031261010f5780f35b503d610960565b505051903d90823e3d90fd5b6108c173fffd8963efd1fc6a506488495d951d5263988d259d6108ad565b858b517f3b99b53d000000000000000000000000000000000000000000000000000000008152fd5b8b80fd5b5050955050945095809591505484116109f3575061054f9394503391613e4c565b8590517fc980904d000000000000000000000000000000000000000000000000000000008152fd5b9a508983106107d8565b868e517f014e3613000000000000000000000000000000000000000000000000000000008152fd5b5087517f3b99b53d000000000000000000000000000000000000000000000000000000008152fd5b8980fd5b8288517f19cf368b000000000000000000000000000000000000000000000000000000008152fd5b508882131561073c565b8680fd5b9050833461043a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261043a57357fffffffff00000000000000000000000000000000000000000000000000000000811680910361043a57602092507f4e2312e0000000000000000000000000000000000000000000000000000000008114908115610b73575b8115610b49575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483610b42565b7f150b7a020000000000000000000000000000000000000000000000000000000081149150610b3b565b9181601f84011215610bcb5782359167ffffffffffffffff8311610bcb5760208381860195010111610bcb57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610bcb57565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610bcb57565b359073ffffffffffffffffffffffffffffffffffffffff82168203610bcb57565b9181601f84011215610bcb5782359167ffffffffffffffff8311610bcb576020808501948460051b010111610bcb57565b919082519283825260005b848110610cb25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b602081830181015184830182015201610c73565b919290926080528281036138405791906000905b828210610ce75750505050565b8382959394951015611e575760059282841b60805101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe19182608051360301821215610bcb578160805101359767ffffffffffffffff8911610bcb576020836080510101988036038a13610bcb57606097603f90818989013560f81c166001976020821060001461347c5750601080821015612abf5750600880821015611b8957508061120357505050610d9c908a613e02565b92909860a0856080510101356000146111f957610dd373ffffffffffffffffffffffffffffffffffffffff600154169b5b35613b87565b9960408660805101013585829d927f80000000000000000000000000000000000000000000000000000000000000008314611141575b50959c95505b7f8000000000000000000000000000000000000000000000000000000000000000811015610bcb576042861061113a5730915b86602b11610bcb578d91601783013560601c9083359462ffffff8660601c96610e8773ffffffffffffffffffffffffffffffffffffffff92839260481c16868a613eb6565b16908488101561111e57806401000276a4965b602b60405199604060208c01528160608c015260808b0137600060ab8a015216604088015260a0875260c087019587871067ffffffffffffffff8811176110ef576040948288958688527f128acb080000000000000000000000000000000000000000000000000000000087521660c48a0152868a1060e48a01526101048901521661012487015260a06101448701528160007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4088610f5d610164820182610c68565b0301925af19283156110e35760009283946110a1575b5050610f87931060001461109a5750613e1f565b9a60428510610fc857309085601711610bcb5760177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe991019501949b610e0f565b50985098606091969597949392509160805101013511611070575b1580611043575b610ffc57506001019291929092610cda565b9061103f60409283519384937f2c4029e9000000000000000000000000000000000000000000000000000000008552600485015260248401526044830190610c68565b0390fd5b507f8000000000000000000000000000000000000000000000000000000000000000828501351615610fea565b60046040517f4566b5a8000000000000000000000000000000000000000000000000000000008152fd5b9050613e1f565b91929093506040843d6040116110db575b816110bf6040938661392d565b8101031261010f57505160e092909201519190610f8738610f73565b3d91506110b2565b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8073fffd8963efd1fc6a506488495d951d5263988d2596610e9a565b8b91610e42565b6014919250106111cf576020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301523560601c5afa9081156110e35760009161119d575b503880610e09565b906020823d6020116111c7575b816111b76020938361392d565b8101031261010f57505138611195565b3d91506111aa565b60046040517f3b99b53d000000000000000000000000000000000000000000000000000000008152fd5b610dd3309b610dcd565b6001819d9493969d9b9897959a999b146000146114c75750508161122992939450613e02565b9060a0846080510101356000146114bd5761125d73ffffffffffffffffffffffffffffffffffffffff600154169335613b87565b916060856080510101356000557f80000000000000000000000000000000000000000000000000000000000000006040866080510101351015610bcb576112ab604086608051010135613e1f565b602b83106111cf57813592601783013560601c9586928560601c96879660481c62ffffff166112db908689613eb6565b73ffffffffffffffffffffffffffffffffffffffff16938786106000149673ffffffffffffffffffffffffffffffffffffffff80956000956113766113ca9560409c6114a2576401000276a4935b856113448f51986040948a956020870152606086019161386a565b91168e830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810186528561392d565b8a519b8c9a8b998a987f128acb08000000000000000000000000000000000000000000000000000000008a52166004890152106024870152604486015216606484015260a0608484015260a4830190610c68565b03925af19182156110e3576000918293611464575b50604093101561145457506113f390613e1f565b915b6080510101350361142a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000555b610fe3565b60046040517f75e2f0ae000000000000000000000000000000000000000000000000000000008152fd5b61145e9150613e1f565b916113f5565b9250906040833d60401161149a575b816114806040938361392d565b8101031261010f57508151602090920151919060406113df565b3d9150611473565b73fffd8963efd1fc6a506488495d951d5263988d2593611329565b61125d3093610dcd565b6002810361151157505050611425925073ffffffffffffffffffffffffffffffffffffffff6001541661150a604060608560805101013594608051010135613b87565b9135613d03565b9193916003810361188357505060805181018084019390604090850312610bcb57823567ffffffffffffffff8111610bcb5782608051010192606084860312610bcb57604051946060860186811067ffffffffffffffff8211176110ef57604052602085013567ffffffffffffffff8111610bcb57850160208201809882011215610bcb576020810135906115a5826139d8565b926115b3604051948561392d565b8284526040602085019360071b830101918a8311610bcb57604001925b82841061181e575050505085526115e960408501610c16565b956020860196875260606040870195013585526040846080510101359067ffffffffffffffff8211610bcb57602061162a9261163096608051010101613a03565b50613de5565b909173ffffffffffffffffffffffffffffffffffffffff600154169473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610bcb5794929391906040519586947f2a2d80d100000000000000000000000000000000000000000000000000000000865260048601526060602486015260c48501935193606060648701528451809152602060e487019501906000905b8082106117a557505050946117499285949273ffffffffffffffffffffffffffffffffffffffff600098511660848701525160a48601527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85840301604486015261386a565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156110e357611796575b50610fe3565b61179f906138a9565b38611790565b9197965091929394602060806001928a5173ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff848201511684830152606065ffffffffffff918260408201511660408501520151166060820152019801920188969795949392916116e3565b608060208584030112610bcb57602060809160405161183c816138bd565b61184587610c16565b8152611852838801610c16565b83820152611862604088016139f0565b6040820152611873606088016139f0565b60608201528152019301926115d0565b600495509193508482036119f25750509091604060606118a98286608051010135613b87565b608051909501013573ffffffffffffffffffffffffffffffffffffffff9081169335168061191f5750479283106118f9575050806118e9575b5050610fe3565b6118f291614681565b38806118e2565b517fbb9278b6000000000000000000000000000000000000000000000000000000008152fd5b9391908051937f70a082310000000000000000000000000000000000000000000000000000000085523083860152602085602481895afa9485156119e7576000956119b3575b50841061198d5750508161197c575b505050610fe3565b611985926146ef565b388080611974565b517f675cae38000000000000000000000000000000000000000000000000000000008152fd5b90946020823d6020116119df575b816119ce6020938361392d565b8101031261010f5750519338611965565b3d91506119c1565b82513d6000823e3d90fd5b8103611a1f57506114259250611a18604060608460805101013593608051010135613b87565b9035613bd8565b90919060068103611b59575060805101606081013590604090611a4490820135613b87565b9282158015611b4e575b611b26573573ffffffffffffffffffffffffffffffffffffffff169384611a8a5750506114259250611a836127109147613cb7565b0490614681565b8151907f70a082310000000000000000000000000000000000000000000000000000000082523090820152602081602481885afa918215611b1c5750600091611ae8575b50611ae161142594939261271092613cb7565b04916146ef565b906020823d602011611b14575b81611b026020938361392d565b8101031261010f575051611ae1611ace565b3d9150611af5565b513d6000823e3d90fd5b8482517fdeaa01e6000000000000000000000000000000000000000000000000000000008152fd5b506127108311611a4e565b83602491604051917fd76a1e9e000000000000000000000000000000000000000000000000000000008352820152fd5b819d969d9b989794959a999b93929314600014611e9057505050604091611bb883836080510101359185613e02565b92909460a082608051010135600014611e8657611bee73ffffffffffffffffffffffffffffffffffffffff600154169135613b87565b908615611e5757611bfe85614039565b8760011015611e5757611c20611c6891611c1a60208901614039565b90614168565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614067565b938481611e3d575b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860193868511611e0e57611cc494611cc973ffffffffffffffffffffffffffffffffffffffff9687928a85614029565b614039565b16948651947f70a082310000000000000000000000000000000000000000000000000000000091828752841693600499858b89015260249460208987818d5afa988915611e0357600099611dce575b509160209695949391611d2a936141e1565b8751968793849283528a8301525afa928315611dc357600093611d8e575b50906060611d5c926080510101359261405a565b10611d68575050610fe3565b517f689100ae000000000000000000000000000000000000000000000000000000008152fd5b90926020823d602011611dbb575b81611da96020938361392d565b8101031261010f575051916060611d48565b3d9150611d9c565b84513d6000823e3d90fd5b90986020823d602011611dfb575b81611de96020938361392d565b8101031261010f575051976020611d18565b3d9150611ddc565b8b513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b611e4f92611e4a88614039565b613e4c565b388084611c70565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b611bee3091610dcd565b919492939160098103612271575050611ea99082613e02565b608051840160a001351561226757611eda73ffffffffffffffffffffffffffffffffffffffff600154169335613b87565b92611ee4836139d8565b95611ef2604051978861392d565b83875283901b820160208701368211610bcb5783905b82821061224f575050506000946002875110612225576040816080510101359680517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111611e0e5790815b611fb257505060805101606001358611611f88578215611e57576114259585611f8392611e4a85614039565b6141e1565b60046040517fc8ca61e7000000000000000000000000000000000000000000000000000000008152fd5b90977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89019750888811611e0e5773ffffffffffffffffffffffffffffffffffffffff6120026120789984613da3565b511661202e73ffffffffffffffffffffffffffffffffffffffff6120268c86613da3565b511682614168565b819a917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614067565b90604051907f0902f1ac00000000000000000000000000000000000000000000000000000000825260608260048173ffffffffffffffffffffffffffffffffffffffff87165afa9a8b156110e357600092839c6121dc575b5073ffffffffffffffffffffffffffffffffffffffff16036121c2576dffffffffffffffffffffffffffff8091169916905b98801580156121ba575b612190578261211a91613cb7565b916103e892838102938185041490151715611e0e576121389161405a565b6103e590818102918183041490151715611e0e5761215591613cca565b60018101809111611e0e57978015611e0e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019081611f57565b60046040517f7b9c8916000000000000000000000000000000000000000000000000000000008152fd5b50811561210c565b6dffffffffffffffffffffffffffff998a16991690612102565b612215919c5073ffffffffffffffffffffffffffffffffffffffff935060603d811161221e575b61220d818361392d565b8101906141ab565b509b90926120d0565b503d612203565b60046040517f20db8267000000000000000000000000000000000000000000000000000000008152fd5b6020809161225c84610c16565b815201910190611f08565b611eda3093610dcd565b92945091600a81036123d75750608051830160e081013581019460208087013594509092916122a4919087030184613db7565b116111cf5773ffffffffffffffffffffffffffffffffffffffff93847f00000000000000000000000000000000000000000000000000000000000000001692856001541691843b15610bcb5760409587875198899687967f2b67b570000000000000000000000000000000000000000000000000000000008852600488015261232c90610c16565b166024860152808883608051010161234390610c16565b16604486015265ffffffffffff808360805101606001612362906139f0565b1660648701528260805101608001612379906139f0565b166084860152816080510160a00161239090610c16565b1660a48501526080510160c0013560c484015261010060e48401526123bc91610104840191870161386a565b03815a6000948591f1908115611b1c57506117965750610fe3565b600b81036125a1575050506123f6604080926080510101359235613b87565b91807f80000000000000000000000000000000000000000000000000000000000000008103612571575050475b8061243057505050610fe3565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016803b15610bcb578351927fd0e30db0000000000000000000000000000000000000000000000000000000008452600493600081868187875af1801561256657612557575b5030908616036124bf575b5050611974565b61251e9460006020948651978895869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1908115611b1c5750612538575b808080806124b8565b6125509060203d6020116103be576103af818361392d565b503861252f565b612560906138a9565b386124ad565b86513d6000823e3d90fd5b47101561242357600482517fbb9278b6000000000000000000000000000000000000000000000000000000008152fd5b600c810361273157505050906125b79035613b87565b9073ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001660408051937f70a08231000000000000000000000000000000000000000000000000000000008552600430818701526024916020878481885afa968715611dc3576000976126fd575b506080510183013586106126d65785612659575b50505050505050610fe3565b833b15610bcb57600091869183855196879485937f2e1a7d4d0000000000000000000000000000000000000000000000000000000085528401525af1908115611b1c57506126c7575b5030908316036126b7575b808080808061264d565b6126c091614681565b38806126ad565b6126d0906138a9565b386126a2565b82517fbb9278b6000000000000000000000000000000000000000000000000000000008152fd5b90966020823d602011612729575b816127186020938361392d565b8101031261010f5750519583612639565b3d915061270b565b600d810361298c575082608051010191602083019360208260805101850312610bcb573567ffffffffffffffff8111610bcb57849160805101019182011215610bcb57602081013590612783826139d8565b936040936127938551968761392d565b838652602086019285849560071b820101928311610bcb578501925b82841061292a575050505073ffffffffffffffffffffffffffffffffffffffff90816001541684519060005b8281106128be57505050817f00000000000000000000000000000000000000000000000000000000000000001691823b15610bcb5783517f0d58b1db000000000000000000000000000000000000000000000000000000008152602060048201529451602486018190528592604484019290916000915b81831061287a57505050509181600081819503925af1908115611b1c57506117965750610fe3565b91938395506080602091846060600195975182815116845282868201511686850152828d820151168d85015201511660608201520195019301909187949392612852565b81856128ca838a613da3565b51511603612901577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611e0e576001016127db565b600486517fe7002877000000000000000000000000000000000000000000000000000000008152fd5b608060208584030112610bcb5760206080918751612947816138bd565b61295087610c16565b815261295d838801610c16565b8382015261296c898801610c16565b8982015261297c60608801610c16565b60608201528152019301926127af565b9294505050600e8103612a8e57506040918251907f70a0823100000000000000000000000000000000000000000000000000000000825260208260248173ffffffffffffffffffffffffffffffffffffffff806004983516888301528886608051010135165afa918215611dc357600092612a59575b5060805101606001351180159290612a1b575050610fe3565b517fa3281672000000000000000000000000000000000000000000000000000000006020820152908152909150612a51816138f5565b9038806118e2565b90916020823d602011612a86575b81612a746020938361392d565b8101031261010f575051906060612a02565b3d9150612a67565b602490604051907fd76a1e9e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9150915060189b95939897999692949b80831060001461304e57508103612b35575050506000925090612af3839282613de5565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b90610fe3565b60118103612b8c575050506000925090612b50839282613de5565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b60128103612be3575050506000925090612ba7839282613de5565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b919392509060138103612d49575050909150357f0000000000000000000000000000000000000000000000000000000000000000916040600080825160208101907f8264fe98000000000000000000000000000000000000000000000000000000008252602487818301528152612c5981613911565b5190606086608051010135885af192612c706139a8565b948415612d0f578273ffffffffffffffffffffffffffffffffffffffff612c9e921694608051010135613b87565b90833b15610bcb5782517f8b72a2ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301526024820152916000908390604490829084905af1908115611b1c57506117965750610fe3565b505091925050517fae9bdf0000000000000000000000000000000000000000000000000000000000602082015260048152612b2f816138f5565b60158103612e5a57505090604091828051917f6352211e0000000000000000000000000000000000000000000000000000000083526020836024816004976060816080510101358983015273ffffffffffffffffffffffffffffffffffffffff968791608051010135165afa928315612e4f57600093612e10575b5081903516911614918215612dda575050610fe3565b517f7dbe7e89000000000000000000000000000000000000000000000000000000006020820152908152909150612a51816138f5565b6020939193813d602011612e47575b81612e2c6020938361392d565b810103126101d2575190828216820361010f57509181612dc4565b3d9150612e1f565b85513d6000823e3d90fd5b60168103612f815750506040918251907efdd58e00000000000000000000000000000000000000000000000000000000825260208280612ecc60049660608660805101013590358884016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b038173ffffffffffffffffffffffffffffffffffffffff8886608051010135165afa918215611dc357600092612f4c575b5060809081510101351191821592612f16575050610fe3565b517f483a6929000000000000000000000000000000000000000000000000000000006020820152908152909150612a51816138f5565b90916020823d602011612f79575b81612f676020938361392d565b8101031261010f575051906080612efd565b3d9150612f5a565b909290601714612f92575050610fe3565b60409073ffffffffffffffffffffffffffffffffffffffff612fba8383608051010135613b87565b93351692833b15610bcb5782517f42842e0e00000000000000000000000000000000000000000000000000000000815260805130600483015273ffffffffffffffffffffffffffffffffffffffff909216602482015291016060013560448201529160009083908183816064810103925af1908115611b1c575061303f575b806118e2565b613048906138a9565b38613039565b939693821415905061308957505050612b2f92507f000000000000000000000000000000000000000000000000000000000000000091613a4a565b601981036130e05750505060009250906130a4839282613de5565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b601a81036131375750505060009250906130fb839282613de5565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b601b810361325e57505050600061314f819284613de5565b9390604094818651928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af19182916131926139a8565b926131a0575b505090610fe3565b73ffffffffffffffffffffffffffffffffffffffff6080838151010135166131cf606084608051010135613b87565b908251906131dc826138d9565b60008252803b15610bcb5761323894600080948651978895869485937ff242432a00000000000000000000000000000000000000000000000000000000855260a060c08360805101013592608051010135903060048701613b42565b03925af1908115611b1c575061324f575b80613198565b613258906138a9565b38613249565b91949091601c810361329957505050612b2f92507f000000000000000000000000000000000000000000000000000000000000000091613a4a565b9193929091601d81036134225750506060816080510101359060409173ffffffffffffffffffffffffffffffffffffffff6132da8484608051010135613b87565b9435168351947efdd58e0000000000000000000000000000000000000000000000000000000086526004936020878061333987308a84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0381865afa968715612566576000976133ed575b50608090815101013586106133c5578451613367816138d9565b60008152823b15610bcb576000946133af86928851998a97889687957ff242432a00000000000000000000000000000000000000000000000000000000875230908701613b42565b03925af1908115611b1c57506117965750610fe3565b8385517f675cae38000000000000000000000000000000000000000000000000000000008152fd5b90966020823d60201161341a575b816134086020938361392d565b8101031261010f57505195608061334d565b3d91506133fb565b929450925050601e8103612a8e575081613440600093928493613de5565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b9499989a92506020819d9792969d989498146000146134e557505050505050806134a96000938493613de5565b81604051928392833781018481520391357f00000000000000000000000000000000000000000000000000000000000000005af1612b2f6139a8565b60219080820361365c5750505050909161350a6135028686613dc4565b969095613de5565b929061354c60409788519760208901997f24856bc3000000000000000000000000000000000000000000000000000000008b5260248a0152606489019161386a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc878203016044880152818152602082818301951b82010195856000915b8483106135de57505050505050505091816135d0600094938594037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261392d565b519082305af1612b2f6139a8565b90919293949596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085820301885288358284360301811215610bcb578301906020823592019167ffffffffffffffff8111610bcb578036038313610bcb5761364c60209283928b9561386a565b9a0198019695949301919061358a565b9297509350935060228195929514600014612a8e5750359060408093608051010135906000906002831015613814575050808491156000146137bf5750507f0000000000000000000000000000000000000000000000000000000000000000915b6000908051927f095ea7b300000000000000000000000000000000000000000000000000000000845273ffffffffffffffffffffffffffffffffffffffff600495168585015260206024937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858701526044809682855af19081601f3d1188600051141615166137b2575b50156137575750505050610fe3565b91600e7f415050524f56455f4641494c45440000000000000000000000000000000000009260206064969551957f08c379a0000000000000000000000000000000000000000000000000000000008752860152840152820152fd5b3b153d1715905038613748565b036137eb577f0000000000000000000000000000000000000000000000000000000000000000916136bd565b600482517f5461585f000000000000000000000000000000000000000000000000000000008152fd5b602492507f4e487b71000000000000000000000000000000000000000000000000000000008252600452fd5b60046040517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b67ffffffffffffffff81116110ef57604052565b6080810190811067ffffffffffffffff8211176110ef57604052565b6020810190811067ffffffffffffffff8211176110ef57604052565b6040810190811067ffffffffffffffff8211176110ef57604052565b6060810190811067ffffffffffffffff8211176110ef57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110ef57604052565b67ffffffffffffffff81116110ef57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b3d156139d3573d906139b98261396e565b916139c7604051938461392d565b82523d6000602084013e565b606090565b67ffffffffffffffff81116110ef5760051b60200190565b359065ffffffffffff82168203610bcb57565b81601f82011215610bcb57803590613a1a8261396e565b92613a28604051948561392d565b82845260208383010111610bcb57816000926020809301838601378301015290565b919290613a579083613de5565b90938460405195869384378201906000958693838580955203918635905af192613a7f6139a8565b9284613a89575050565b73ffffffffffffffffffffffffffffffffffffffff606082013516613ab16040830135613b87565b91813b15610436576040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff93909316602484015260800135604483015290919081908390606490829084905af1908115613b365750613b2b5750565b613b34906138a9565b565b604051903d90823e3d90fd5b9192613b8495949160a09473ffffffffffffffffffffffffffffffffffffffff8092168552166020840152604083015260608201528160808201520190610c68565b90565b73ffffffffffffffffffffffffffffffffffffffff9080821660018103613bb15750506001541690565b909150600203613b8457503090565b90816020910312610bcb57518015158103610bcb5790565b9092919073ffffffffffffffffffffffffffffffffffffffff1680613c025750613b349192614681565b7f80000000000000000000000000000000000000000000000000000000000000008214613c35575b92613b3492936146ef565b9050604051927f70a08231000000000000000000000000000000000000000000000000000000008452306004850152602084602481855afa9384156110e357600094613c84575b509290613c2a565b6020813d8211613caf575b81613c9c6020938361392d565b8101031261057a57519350613b34613c7c565b3d9150613c8f565b81810292918115918404141715611e0e57565b8115613cd4570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b919273ffffffffffffffffffffffffffffffffffffffff91827f00000000000000000000000000000000000000000000000000000000000000001693843b15610bcb5760009484869281608496816040519b8c9a8b997f36c78516000000000000000000000000000000000000000000000000000000008b521660048a01521660248801521660448601521660648401525af180156110e357613b2b5750565b8051821015611e575760209160051b010190565b91908201809211611e0e57565b918235830191613dde602084359581860195030185613db7565b116111cf57565b916020830135830191613dde602084359581860195030185613db7565b916060830135830191613dde602084359581860195030185613db7565b7f80000000000000000000000000000000000000000000000000000000000000008114611e0e5760000390565b92919073ffffffffffffffffffffffffffffffffffffffff8082163003613e78575050613b3492613bd8565b8084959411613e8c57613b34941692613d03565b60046040517fc4bd89a9000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff9283831684831611614021575b62ffffff90846040519481602087019516855216604085015216606083015260608252608082019082821067ffffffffffffffff8311176110ef577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8061401a91836040528451902093613fed60a08201957f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000088917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6081018452018261392d565b5190201690565b909190613ed8565b9190811015611e575760051b0190565b3573ffffffffffffffffffffffffffffffffffffffff81168103610bcb5790565b91908203918211611e0e57565b9173ffffffffffffffffffffffffffffffffffffffff9361401a916040519060208201927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16845260601b166034820152602881526140ca81613911565b51902061413c604051938492602084019687917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261392d565b73ffffffffffffffffffffffffffffffffffffffff828116908216101561418c5791565b9091565b51906dffffffffffffffffffffffffffff82168203610bcb57565b90816060910312610bcb576141bf81614190565b9160406141ce60208401614190565b92015163ffffffff81168103610bcb5790565b9260028210614657578115611e57576141f984614039565b9160019481861015611e575791614217602094611c1a868601614039565b50926000935b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84018510614250575050505050505050565b61425e611cc4868685614029565b9261426f611cc48a88018786614029565b936040908151957f0902f1ac00000000000000000000000000000000000000000000000000000000875273ffffffffffffffffffffffffffffffffffffffff80941694606092600493808a86818b5afa998a1561256657908d9594939291600091829c614631575b50508780916dffffffffffffffffffffffffffff8091169c16921692168214998a60001461462b575b8651958680947f70a082310000000000000000000000000000000000000000000000000000000082528b8883015260249889915afa928315614620578e6000946145ef575b5050808303918115938480156145e7575b6145bf57826103e58086029586041491141715614592576143779083613cb7565b926103e88083029283041417156145655761439c929161439691613db7565b90613cca565b971561455d57600097905b898b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe82018110156145515791611c1a611cc46143ed9360026144379c9601908d614029565b8198917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614067565b965b988551918d83019367ffffffffffffffff948481108682111761452457885260008452813b15610bcb5760008a936144b782968b519c8d97889687957f022c0d9f0000000000000000000000000000000000000000000000000000000087528d8701528d860152166044840152608060648401526084830190610c68565b03925af18015611dc357908d9695949392916144dc575b50505050509401939161421d565b9091929380959650116144f857505052879038808080806144ce565b6041907f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b876041887f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b5050508b956000614439565b6000906143a7565b856011867f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b866011877f4e487b7100000000000000000000000000000000000000000000000000000000600052526000fd5b8689517f7b9c8916000000000000000000000000000000000000000000000000000000008152fd5b508115614356565b8181959293953d8311614619575b614607818361392d565b8101031261010f57505191388e614345565b503d6145fd565b87513d6000823e3d90fd5b90614300565b899c50899250908161464e92903d1061221e5761220d818361392d565b509b90916142d7565b60046040517f394060ac000000000000000000000000000000000000000000000000000000008152fd5b600080809381935af11561469157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152fd5b91604460209260009273ffffffffffffffffffffffffffffffffffffffff604051927fa9059cbb000000000000000000000000000000000000000000000000000000008452166004830152602482015282855af19081601f3d116001600051141615166147bd575b501561475f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152fd5b3b153d171590503861475756fea164736f6c6343000811000a", "deployedBytecode": "0x60a0604081815260049182361015610022575b505050361561002057600080fd5b005b600090813560e01c90816301ffc9a714610aaf5750806311c17848146106d4578063150b7a021461064757806324856bc31461057e5780633593564c1461043e578063709a1cc2146101d6578063bc197c81146101125763f23a6e6103610012573461010f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010f576100ba610bd0565b506100c3610b