23.5k txs
46.9k calls
constructor
constructor((address permit2, address weth9, address v2Factory, address v3Factory, bytes32 pairInitCodeHash, bytes32 poolInitCodeHash, address v4PoolManager, address v3NFTPositionManager, address v4PositionManager) params)
functions
msgSender
viewfunction msgSender() view returns (address)
poolManager
viewfunction poolManager() view returns (address)
V3_POSITION_MANAGER
viewfunction V3_POSITION_MANAGER() view returns (address)
V4_POSITION_MANAGER
viewfunction V4_POSITION_MANAGER() view returns (address)
execute
payablefunction execute(bytes commands, bytes[] inputs, uint256 deadline) payable
execute
payablefunction execute(bytes commands, bytes[] inputs) payable
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes data)
unlockCallback
nonpayablefunction unlockCallback(bytes data) returns (bytes)
events
ExecutionStarted
event ExecutionStarted(address indexed locker, uint256 value, bytes commands, bytes[] inputs)
ExecutionSucceeded
event ExecutionSucceeded(address indexed locker, uint256 value, bytes commands, bytes[] inputs, uint256 failureFlags)
errors
BalanceTooLow
error BalanceTooLow()
ContractLocked
error ContractLocked()
DeltaNotNegative
error DeltaNotNegative(address currency)
DeltaNotPositive
error DeltaNotPositive(address currency)
ETHNotAccepted
error ETHNotAccepted()
ExecutionFailed
error ExecutionFailed(uint256 commandIndex, bytes message)
FromAddressIsNotOwner
error FromAddressIsNotOwner()
InputLengthMismatch
error InputLengthMismatch()
InsufficientBalance
error InsufficientBalance()
InsufficientETH
error InsufficientETH()
InsufficientToken
error InsufficientToken()
InvalidAction
error InvalidAction(bytes4 action)
InvalidBips
error InvalidBips()
InvalidCommandType
error InvalidCommandType(uint256 commandType)
InvalidEthSender
error InvalidEthSender()
InvalidPath
error InvalidPath()
InvalidReserves
error InvalidReserves()
LengthMismatch
error LengthMismatch()
NotAuthorizedForToken
error NotAuthorizedForToken(uint256 tokenId)
NotPoolManager
error NotPoolManager()
OnlyMintAllowed
error OnlyMintAllowed()
SliceOutOfBounds
error SliceOutOfBounds()
TooManyCommands
error TooManyCommands()
TransactionDeadlinePassed
error TransactionDeadlinePassed()
UnsafeCast
error UnsafeCast()
UnsupportedAction
error UnsupportedAction(uint256 action)
V2InvalidPath
error V2InvalidPath()
V2TooLittleReceived
error V2TooLittleReceived()
V2TooMuchRequested
error V2TooMuchRequested()
V3InvalidAmountOut
error V3InvalidAmountOut()
V3InvalidCaller
error V3InvalidCaller()
V3InvalidSwap
error V3InvalidSwap()
V3TooLittleReceived
error V3TooLittleReceived()
V3TooMuchRequested
error V3TooMuchRequested()
V4TooLittleReceived
error V4TooLittleReceived(uint256 minAmountOutReceived, uint256 amountReceived)
V4TooMuchRequested
error V4TooMuchRequested(uint256 maxAmountInRequested, uint256 amountRequested)
creation bytecode
0x6101a0604052346102d657604051601f61507338819003918201601f19168301916001600160401b038311848410176102c257808492610120946040528339810103126102d6576040519061012082016001600160401b038111838210176102c25760405261006d816102f9565b825261007b602082016102f9565b6020830190815261008e604083016102f9565b604084019081526100a1606084016102f9565b93606081019485526080840151946080820195865260a08501519560a083019687526100cf60c087016102f9565b9660c084019788526100f66101006100e960e08a016102f9565b988960e0880152016102f9565b97886101008601526101066102da565b6001600160a01b03988916815298881660208a0190815290519451965190989796871696908116959416936101396102da565b968752602087019586525192519151905160405190936001600160a01b0393841693169060808101906001600160401b038211818310176102c257604091825282815260208101948552808201938452606001948552608091909152905160a05290516001600160a01b0390811660c052915160e052610100929092529151821661012052915181166101405291518216610160529151166101805251614d65908161030e823960805181818161180301528181611a5101526138f5015260a0518181816117e201528181611a7301526138d4015260c05181612ff7015260e0518161304a015261010051818181609f0152818161044a015281816105b20152818161254101528181612aa30152818161442c015281816144bd015281816145c5015281816147460152614b56015261012051818181603001528181611ed101526120440152610140518181816114700152818161227e01526134720152610160518181816106e40152818161267001526127680152610180518181816105280152612b9b0152f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60408051919082016001600160401b038111838210176102c257604052565b51906001600160a01b03821682036102d65756fe61012060405260043610156100c7575b3615610019575f80fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633141580610087575b61005f57005b7f38bbd576000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016331415610059565b5f3560e01c806324856bc3146108695780633593564c14610708578063817122dc1461069a57806391dd73461461054c578063d0c9f6cb146104de578063d737d0c71461046e578063dc4c90d3146104005763fa461e330361000f57346102e15760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e15760243560043560443567ffffffffffffffff81116102e157610178903690600401610943565b5f8313918215806103f6575b6103ce578181016040828203126102e157813567ffffffffffffffff81116102e157820181601f820112156102e15780356101be81612db8565b926101cc6040519485612d77565b818452602082840101116102e1575f928160208094018483013701015260208101359173ffffffffffffffffffffffffffffffffffffffff83168093036102e15761021691612f23565b90601790602b83106103a6578035968760601c9561024462ffffff8585013560601c9a60481c168a89612f76565b73ffffffffffffffffffffffffffffffffffffffff3391160361037e571561037457508685105b156102815750505061027f93503391613097565b005b91935091939482602b0180602b116103475784106102e557508282116102e15781019103907f80000000000000000000000000000000000000000000000000000000000000008410156102e15761027f936102dc3391612df2565b613129565b5f80fd5b925050507faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6929291925c821161031f5761027f923391613097565b7f739dbe52000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b955084871061026b565b7f32b13d91000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3b99b53d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f316cf0eb000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f851315610184565b346102e1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e15760207f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346102e1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e15760043567ffffffffffffffff81116102e15761059b903690600401610943565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610672576105e191613515565b9081830361064a575f5b83811061061e5761061a604051610603602082612d77565b5f81526040519182916020835260208301906109a2565b0390f35b8061064461062f6001938789610ae5565b3560f81c61063e838787610b6f565b91613bd4565b016105eb565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e1575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e15760043567ffffffffffffffff81116102e157610752903690600401610943565b60243567ffffffffffffffff81116102e157610772903690600401610971565b916044354211610841573330146108385773ffffffffffffffffffffffffffffffffffffffff7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610810576107eb93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610b8a565b5f7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d005b7f6f5ffb7e000000000000000000000000000000000000000000000000000000005f5260045ffd5b61027f93610b8a565b7f5bf6f916000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102e15760043567ffffffffffffffff81116102e1576108b3903690600401610943565b60243567ffffffffffffffff81116102e1576108d3903690600401610971565b913330146108385773ffffffffffffffffffffffffffffffffffffffff7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c16610810576107eb93337f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085d610b8a565b9181601f840112156102e15782359167ffffffffffffffff83116102e157602083818601950101116102e157565b9181601f840112156102e15782359167ffffffffffffffff83116102e1576020808501948460051b0101116102e157565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b90602083828152019060208160051b85010193835f915b838310610a4a5750505050505090565b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820301865286357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112156102e1578301906020823592019167ffffffffffffffff81116102e15780360383136102e157610ad760209283926001956109e5565b980196019493019190610a3a565b90821015610af1570190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102e1570180359067ffffffffffffffff82116102e1576020019181360383136102e157565b90821015610af157610b869160051b810190610b1e565b9091565b90939291936101008111612d0657808303612cde577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c7fdd86a211c897d7012e005b02aef6abf73d64892f7408b906588ee0b42aee0fb16040513481526060602082015280610c2873ffffffffffffffffffffffffffffffffffffffff610c1660608401888a6109e5565b9583870360408501521694888b610a23565b0390a25f945f5b828110610cce575094610cc37f93a19e75d750869f5fc9483af599c68e1a0f178b58135c61d2997959ae281f9b94959673ffffffffffffffffffffffffffffffffffffffff7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c1696610cb56040519687963488526080602089015260808801916109e5565b918583036040870152610a23565b9060608301520390a2565b9594610cdb878486610ae5565b3594610ce8888285610b6f565b606060a05260019691959060f889901c603f166021811015612c305760108110156124cd57600881101561174d57806111195750610d269087612f4b565b909590608088013515611112577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c965b610d6189356132f3565b9791806080528160e05260208a0135610100527f800000000000000000000000000000000000000000000000000000000000000060208b013514611085575b50505b604260c052602b7f80000000000000000000000000000000000000000000000000000000000000006101005110156102e15760c0516080511061107e5730905b60805181116102e15773ffffffffffffffffffffffffffffffffffffffff92604091845f60e0513595610eed610e63610e9585610e398b60601c601760e051013560601c62ffffff8183109e60481c1691612f76565b16968a8614611063576401000276a4985b878b519485938d6020860152606085019060e0516109e5565b91168b830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612d77565b8751998a97889687957f128acb080000000000000000000000000000000000000000000000000000000087521660048601528a602486015261010051604486015216606484015260a0608484015260a48301906109a2565b03925af1908115611058575f905f9261101c575b610f119350156110155750612df2565b6101005260c05160805110610f4357306080516017116102e157601760e051016017608051039060e052608052610da3565b94509460406101009a94999a9893989792975191013511610fed575b15610f6e575b50600101610c2f565b9096907f800000000000000000000000000000000000000000000000000000000000000016610fdf5786604051907f2c4029e900000000000000000000000000000000000000000000000000000000825260048201526040602482015280610fdb6044820160a0516109a2565b0390fd5b60019081881b179690610f65565b7f39d35496000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050612df2565b9150506040823d8211611050575b8161103760409383612d77565b810103126102e157816020610f11935191015191610f01565b3d915061102a565b6040513d5f823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d2598610e4a565b8790610de3565b6014116103a6576020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301523560601c5afa908115611058575f916110e1575b50610100525f80610da0565b90506020813d821161110a575b816110fb60209383612d77565b810103126102e157515f6110d5565b3d91506110ee565b3096610d57565b6001819c969b9c9a959a999499989398145f1461125357509061114160208201359282612f4b565b60808301351561124c577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b604061117b85356132f3565b9401357faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d7f80000000000000000000000000000000000000000000000000000000000000008510156102e1576111d5936102dc86612df2565b9091901561123d57506111e790612df2565b03611215575f7faf28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f6925d5b610f5f565b7fd4e0248e000000000000000000000000000000000000000000000000000000005f5260045ffd5b6112479150612df2565b6111e7565b309161116f565b6002810361129d575061121091604081013591507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c61129660208301356132f3565b9135613459565b91929091600381036114cd5750508135820163ffffffff60208401351683019163ffffffff833516936020808501948601019101106114c0577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c926040519273ffffffffffffffffffffffffffffffffffffffff60208501957f2a2d80d10000000000000000000000000000000000000000000000000000000087521660248501526060604485015260e484019280357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156102e15781016020813591019467ffffffffffffffff82116102e1578160071b360386136102e15781906060608489015252610104860194905f905b8082106114a2575050509361142a5f969482946114569460408973ffffffffffffffffffffffffffffffffffffffff6113ee60208e9d01612e4d565b1660a4880152013560c48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8584030160648601526109e5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612d77565b51908273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af161149a612e1e565b60a052610f5f565b909195608080826114b56001948b612eae565b0197019201906113b2565b633b99b53d5f526004601cfd5b909291506004810361162357506114e760208201356132f3565b9073ffffffffffffffffffffffffffffffffffffffff8060408301351691351680155f1461155d5750479081106115355780611525575b5050610f5f565b61152e916135d9565b5f8061151e565b7f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b91604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481875afa928315611058575f936115f0575b5082106115c857816115b7575b505050610f5f565b6115c092613b25565b5f80806115af565b7f675cae38000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d821161161b575b8161160b60209383612d77565b810103126102e15751915f6115a2565b3d91506115fe565b6005810361164a57508060406112109201359061164360208201356132f3565b903561337d565b60068103611722575060408101359073ffffffffffffffffffffffffffffffffffffffff61167b60208301356132f3565b9135168061169757506116916112109247613ae3565b906135d9565b906040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481865afa908115611058575f916116ef575b50611210936116e991613ae3565b91613b25565b90506020813d821161171a575b8161170960209383612d77565b810103126102e157516112106116db565b3d91506116fc565b7fd76a1e9e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6008819c969b9c9a959a999499989398145f14611a035750611774602083013591836132ae565b906080840135156119fc577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b6117ad85356132f3565b928215610af1576117bd826132d2565b8360011015610af1576117df611827916117d9602086016132d2565b906142ff565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614337565b9485816119e2575b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82018281116103475761188461187f73ffffffffffffffffffffffffffffffffffffffff928585613360565b6132d2565b1693604051927f70a0823100000000000000000000000000000000000000000000000000000000845273ffffffffffffffffffffffffffffffffffffffff8516928360048601526020856024818a5afa948515611058575f956119a5575b50946118f2929160209596613697565b6024604051809581937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa918215611058575f92611971575b5060406119439293013592613370565b1015610f5f577f849eaf98000000000000000000000000000000000000000000000000000000005f5260045ffd5b91506020823d821161199d575b8161198b60209383612d77565b810103126102e1579051906040611933565b3d915061197e565b92919450946020833d82116119da575b816119c260209383612d77565b810103126102e15791519194919390916118f26118e2565b3d91506119b5565b6119f4926119ef856132d2565b613097565b5f808561182f565b30916117a3565b60098103611d6d5750611a1690826132ae565b608083013515611d66577f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c915b611a4e84356132f3565b917f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000955f9560028510611d3e576020820135977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601868111610347579190825b611b2757505050604001358611611aff578215610af1576112109585611afa926119ef856132d2565b613697565b7f8ab0bc16000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919897507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff89019789891161034757611b6861187f611b8a9a8989613360565b611b7f611b7961187f8d8b8b613360565b826142ff565b8185879d939d614337565b90604051907f0902f1ac00000000000000000000000000000000000000000000000000000000825260608260048173ffffffffffffffffffffffffffffffffffffffff87165afa918215611058575f905f93611ce1575b5073ffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff8082931694169d169116145f14611cdb5799905b9980158015611cd3575b611cab5782611c3291613a99565b916103e88302928084046103e8149015171561034757611c5191613370565b6103e58102908082046103e5149015171561034757611c6f91613aac565b6001810180911161034757988015610347577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01919082611ad1565b7f7b9c8916000000000000000000000000000000000000000000000000000000005f5260045ffd5b508115611c24565b90611c1a565b6dffffffffffffffffffffffffffff80945073ffffffffffffffffffffffffffffffffffffffff9250611d2b839260603d8111611d37575b611d238183612d77565b810190613661565b50959093505050611be1565b503d611d19565b7f20db8267000000000000000000000000000000000000000000000000000000005f5260045ffd5b3091611a44565b600a8103611e68575090915063ffffffff60c08301351682019063ffffffff82351690836020808501948401019101106114c05760a06114565f9461142a86957f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c9560405195869473ffffffffffffffffffffffffffffffffffffffff60208701997f2b67b570000000000000000000000000000000000000000000000000000000008b52166024870152611e266044870182612eae565b73ffffffffffffffffffffffffffffffffffffffff611e4760808301612e4d565b1660c4870152013560e48501526101006101048501526101248401916109e5565b600b8103612018575050611e81602082013591356132f3565b90807f80000000000000000000000000000000000000000000000000000000000000008103611fe9575050475b80611eba575050610f5f565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b156102e157604051907fd0e30db00000000000000000000000000000000000000000000000000000000082525f8260048186885af19182156110585773ffffffffffffffffffffffffffffffffffffffff92611fd9575b501690308203611f5c575b5061151e565b60446020925f60405195869485937fa9059cbb000000000000000000000000000000000000000000000000000000008552600485015260248401525af1801561105857611fab575b8080611f56565b611fcb9060203d8111611fd2575b611fc38183612d77565b810190613348565b505f611fa4565b503d611fb9565b5f611fe391612d77565b5f611f4b565b471015611eae577f6a12f104000000000000000000000000000000000000000000000000000000005f5260045ffd5b600c810361218257505061202c81356132f3565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481855afa928315611058575f9361214e575b5060200135821061153557816120c057505050610f5f565b803b156102e1575f80916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528760048401525af180156110585761213e575b503073ffffffffffffffffffffffffffffffffffffffff83160361212e575b806115af565b612137916135d9565b5f80612128565b5f61214891612d77565b5f612109565b9092506020813d821161217a575b8161216960209383612d77565b810103126102e157519160206120a8565b3d915061215c565b600d819c989496999a9295979b939c145f146123c857508a358b01988935946121b36020808d019e8d03018761308a565b116103a65773ffffffffffffffffffffffffffffffffffffffff7f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c169a935f5b86811015612259578c73ffffffffffffffffffffffffffffffffffffffff61222360208f8560071b01016132d2565b1603612231576001016121f4565b7fe7002877000000000000000000000000000000000000000000000000000000005f5260045ffd5b50979b919950979492959391995073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b156102e1576040517f0d58b1db000000000000000000000000000000000000000000000000000000008152602060048201526024810184905292839160448301915f905b80821061231a5750505091815f81819503925af180156110585761230a575b50610f5f565b5f61231491612d77565b5f612304565b9193509160808060019273ffffffffffffffffffffffffffffffffffffffff61234288612e4d565b16815273ffffffffffffffffffffffffffffffffffffffff61236660208901612e4d565b16602082015273ffffffffffffffffffffffffffffffffffffffff61238d60408901612e4d565b16604082015273ffffffffffffffffffffffffffffffffffffffff6123b460608901612e4d565b1660608201520194019201859392916122e5565b600e919998955080929a9694509a92969a145f146117225750604051907f70a0823100000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff813516600483015260208260248173ffffffffffffffffffffffffffffffffffffffff84860135165afa918215611058575f92612499575b5060400135111580611210576040517fa32816720000000000000000000000000000000000000000000000000000000060208201526004815261149a602482612d77565b9091506020813d82116124c5575b816124b460209383612d77565b810103126102e15751906040612455565b3d91506124a7565b6010819c969b9c9a959a999499989398145f146125e95750612527915f9160405193849283927f48c894910000000000000000000000000000000000000000000000000000000084526020600485015260248401916109e5565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015611058576125735750610f5f565b3d805f833e6125828183612d77565b8101906020818303126102e15780519067ffffffffffffffff82116102e1570181601f820112156102e15780516125b881612db8565b926125c66040519485612d77565b818452602082840101116102e1575f928160208094018483015e0101525f612304565b91925090601181036126c55750907fffffffff000000000000000000000000000000000000000000000000000000008135167f7ac2ff7b00000000000000000000000000000000000000000000000000000000810361269a5750815f929183926040519283928337810183815203908273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af161149a612e1e565b7ff801e525000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b601281036129c357507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c917fffffffff000000000000000000000000000000000000000000000000000000008135167f0c49ccbe000000000000000000000000000000000000000000000000000000008114801561299a575b8015612971575b1561269a5750600481013573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016936040517f6352211e000000000000000000000000000000000000000000000000000000008152826004820152602081602481895afa9081156110585773ffffffffffffffffffffffffffffffffffffffff9182915f91612953575b50169116908082149182156128bf575b821561284e575b505015612823575091815f809481946040519384928337810182815203925af161149a612e1e565b7fbb25d4c5000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b909150604051917fe985e9c500000000000000000000000000000000000000000000000000000000835260048301526024820152602081604481885afa908115611058575f916128a1575b505f806127fb565b6128b9915060203d8111611fd257611fc38183612d77565b5f612899565b91506040517f081812fc0000000000000000000000000000000000000000000000000000000081528360048201526020816024818a5afa90811561105857839173ffffffffffffffffffffffffffffffffffffffff915f91612925575b501614916127f4565b612946915060203d811161294c575b61293e8183612d77565b8101906135ad565b5f61291c565b503d612934565b61296b915060203d811161294c5761293e8183612d77565b5f6127e4565b507f42966c68000000000000000000000000000000000000000000000000000000008114612746565b507ffc6f786500000000000000000000000000000000000000000000000000000000811461273f565b60138103612acd5750505f809160405173ffffffffffffffffffffffffffffffffffffffff60a060208301937f6276cbbe00000000000000000000000000000000000000000000000000000000855282612a1c82612e4d565b16602485015282612a2f60208301612e4d565b16604485015262ffffff612a4560408301612e6e565b166064850152612a5760608201612e7e565b60020b608485015282612a6c60808301612e4d565b1660a485015201351660c482015260c48152612a8960e482612d77565b51908273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af161149a612e1e565b6014810361172257507fffffffff000000000000000000000000000000000000000000000000000000008235167fdd46508f00000000000000000000000000000000000000000000000000000000810361269a5750806004116102e157612b62612b5c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830160048501612f23565b90612f23565b5f5b818110612bc5575050505f91829147918160405192839283378101848152039173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af161149a612e1e565b612bd0818385610ae5565b3560f81c8015908115612c25575b8115612c1a575b50612bf257600101612b64565b7f5d1d0f9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b60039150145f612be5565b600181149150612bde565b909297506021819b959a9b999499979297145f14611722575061142a612ca0612cd0612c5e5f958695613515565b60409692965195869460208601987f24856bc3000000000000000000000000000000000000000000000000000000008a526040602488015260648701916109e5565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc858403016044860152610a23565b519082305af161149a612e1e565b7fff633a38000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4f89c5d5000000000000000000000000000000000000000000000000000000005f5260045ffd5b60a0810190811067ffffffffffffffff821117612d4a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612d4a57604052565b67ffffffffffffffff8111612d4a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7f80000000000000000000000000000000000000000000000000000000000000008114610347575f0390565b3d15612e48573d90612e2f82612db8565b91612e3d6040519384612d77565b82523d5f602084013e565b606090565b359073ffffffffffffffffffffffffffffffffffffffff821682036102e157565b359062ffffff821682036102e157565b35908160020b82036102e157565b908160209103126102e1575190565b359065ffffffffffff821682036102e157565b65ffffffffffff612f1d6060809373ffffffffffffffffffffffffffffffffffffffff612eda82612e4d565b16865273ffffffffffffffffffffffffffffffffffffffff612efe60208301612e4d565b16602087015283612f1160408301612e9b565b16604087015201612e9b565b16910152565b909163ffffffff82351682019263ffffffff843516926020808601958501019101106114c057565b909163ffffffff60608301351682019263ffffffff843516926020808601958501019101106114c057565b9073ffffffffffffffffffffffffffffffffffffffff9283821684841611613082575b62ffffff90846040519381602086019616865216604084015216606082015260608152612fc7608082612d77565b5190206040517fff00000000000000000000000000000000000000000000000000000000000000602082019081527f000000000000000000000000000000000000000000000000000000000000000060601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201929092527f0000000000000000000000000000000000000000000000000000000000000000605582015261307b816075810161142a565b5190201690565b909190612f99565b9190820180921161034757565b9092919073ffffffffffffffffffffffffffffffffffffffff841630036130c4576130c2935061337d565b565b919273ffffffffffffffffffffffffffffffffffffffff84116131015773ffffffffffffffffffffffffffffffffffffffff6130c2941692613459565b7fc4bd89a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b939290602b82106103a6578235938460601c92601785013560601c9380851094859760481c62ffffff169061315d92612f76565b73ffffffffffffffffffffffffffffffffffffffff1692845f1460409673ffffffffffffffffffffffffffffffffffffffff80956131f25f9661324595613293576401000276a4925b846131c08e51978f948995602087015260608601916109e5565b91168d830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284612d77565b89519b8c998a9889977f128acb080000000000000000000000000000000000000000000000000000000089521660048801526024870152604486015216606484015260a0608484015260a48301906109a2565b03925af18015611058575f925f9161325c57509192565b9250506040823d60401161328b575b8161327860409383612d77565b810103126102e157602082519201519192565b3d915061326b565b73fffd8963efd1fc6a506488495d951d5263988d25926131a6565b9160608301358301916132cb60208435958186019503018561308a565b116103a657565b3573ffffffffffffffffffffffffffffffffffffffff811681036102e15790565b73ffffffffffffffffffffffffffffffffffffffff8116600181036133395750507f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c90565b60020361334557503090565b90565b908160209103126102e1575180151581036102e15790565b9190811015610af15760051b0190565b9190820391821161034757565b90919073ffffffffffffffffffffffffffffffffffffffff16806133a557506130c2916135d9565b7f800000000000000000000000000000000000000000000000000000000000000082146133d7575b916130c292613b25565b9050604051917f70a08231000000000000000000000000000000000000000000000000000000008352306004840152602083602481855afa8015611058575f90613425575b909250906133cd565b506020833d602011613451575b8161343f60209383612d77565b810103126102e1576130c2925161341c565b3d9150613432565b919273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b156102e1575f73ffffffffffffffffffffffffffffffffffffffff9384829681608496816040519b8c9a8b997f36c78516000000000000000000000000000000000000000000000000000000008b521660048a01521660248801521660448601521660648401525af180156110585761350b5750565b5f6130c291612d77565b604081351891606082019363ffffffff6040840135169363ffffffe0601f8601169060608201602086013518179084019260608401359463ffffffff861694641fffffffe0608082019760051b1680915f925b8084106135805750608092500101910110176114c057565b90916020809163ffffffe0601f60808089890101359b848d18179b88010135011601019301929190613568565b908160209103126102e1575173ffffffffffffffffffffffffffffffffffffffff811681036102e15790565b5f80809381935af1156135e857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152fd5b51906dffffffffffffffffffffffffffff821682036102e157565b908160609103126102e15761367581613646565b91604061368460208401613646565b92015163ffffffff811681036102e15790565b9160028210613a71578115610af1576136af836132d2565b8260011015610af1576136cb906117d9602086979596016132d2565b50927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101937ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8201955f906020937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08501965b8884106137525750505050505050505050565b61376061187f858486613360565b9473ffffffffffffffffffffffffffffffffffffffff61378761187f600188018688613360565b921695604051917f0902f1ac0000000000000000000000000000000000000000000000000000000083526060836004818b5afa91821561105857895f945f94613a1e575b5073ffffffffffffffffffffffffffffffffffffffff806dffffffffffffffffffffffffffff80602496979816971693169416841494855f14613a185791935b604051938480927f70a082310000000000000000000000000000000000000000000000000000000082528d60048301525afa918215611058575f926139e9575b50808203928115928380156139e1575b611cab57826103e586029586046103e514911417156103475761387e9084613a99565b916103e882029182046103e8141715610347576138a49261389e9161308a565b90613aac565b90156139da575f90915b8b8610156139d157906138cf613919926117d961187f60028a01888a613360565b8193917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614337565b915b966040519061392a8a83612d77565b5f82528b368b840137803b156102e1576139a5945f8094604051978895869485937f022c0d9f0000000000000000000000000000000000000000000000000000000085526004850152602484015273ffffffffffffffffffffffffffffffffffffffff891660448401526080606484015260848301906109a2565b03925af1918215611058576001926139c1575b5093019261373f565b5f6139cb91612d77565b5f6139b8565b5087905f61391b565b5f916138ae565b50811561385b565b9091508981813d8311613a11575b613a018183612d77565b810103126102e15751905f61384b565b503d6139f7565b9361380b565b6dffffffffffffffffffffffffffff9550602493945073ffffffffffffffffffffffffffffffffffffffff86613a62829360603d8111611d3757611d238183612d77565b509890989796505050506137cb565b7fae52ad0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b8181029291811591840414171561034757565b8115613ab6570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6127108211613afd5761271091613af991613a99565b0490565b7fdeaa01e6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f9182604492602095604051937fa9059cbb000000000000000000000000000000000000000000000000000000008552600485015260248401525af13d15601f3d1160015f511416171615613b7657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152fd5b929190600b84101561412d5760078403613d4657613bf3929350614860565b6020810190613c02828261486e565b90505f92613c0f836132d2565b90613c1c604085016147cd565b906fffffffffffffffffffffffffffffffff821615613d2d575b92915f915b838310613cbc5750505050506060016fffffffffffffffffffffffffffffffff80613c65836147cd565b169216918210613c73575050565b613c8d6fffffffffffffffffffffffffffffffff916147cd565b7f8b063d73000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b8496506fffffffffffffffffffffffffffffffff613d1191613cf8613cf186613ceb613d169798999a8c61486e565b906148c2565b9586614be9565b613d056080880188610b1e565b949093165f0391614a49565b614d10565b946001613d2387936132d2565b9194930191613c3b565b9050613d40613d3b83614425565b614a04565b90613c36565b60068403613e3d57613d599293506147be565b613d6560c082016147cd565b6fffffffffffffffffffffffffffffffff811615613dec575b613dcf613d1160e092613dae6fffffffffffffffffffffffffffffffff613da760a088016147ea565b9216612df2565b90613dbd610100870187610b1e565b929091613dca36896147f7565b614a49565b91016fffffffffffffffffffffffffffffffff80613c65836147cd565b50613df960a082016147ea565b15613e235760e0613dcf613d11613e1a613d3b613e15866132d2565b614425565b92505050613d7e565b60e0613dcf613d11613e1a613d3b613e15602087016132d2565b60098403613fe057613e50929350614860565b6020810190613e5f828261486e565b5f939150613e6f604084016147cd565b613e78846132d2565b916fffffffffffffffffffffffffffffffff821615613fcc575b92919290815b613f1557505050506060016fffffffffffffffffffffffffffffffff80613ebe836147cd565b169216918211613ecc575050565b613ee66fffffffffffffffffffffffffffffffff916147cd565b7f12bacdd3000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b829395506fffffffffffffffffffffffffffffffff613f8c91613f72613f6b613f42613f9696978a61486e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901916148c2565b9889614be9565b90613f8060808b018b610b1e565b94909316911590614a49565b600f0b5f03614a04565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613fc286926132d2565b9392019081613e98565b9050613fda613d3b8361473f565b90613e92565b60088414614017575050505b7f5cda29d7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6140229293506147be565b61402e60c082016147cd565b6fffffffffffffffffffffffffffffffff8116156140b2575b614095613d3b61408d6fffffffffffffffffffffffffffffffff60e09461407060a088016147ea565b61407e610100890189610b1e565b9390921690613dca368a6147f7565b600f0b612df2565b91016fffffffffffffffffffffffffffffffff80613ebe836147cd565b506140bf60a082016147ea565b156141025760e0614095613d3b61408d6fffffffffffffffffffffffffffffffff6140f7613d3b6140f2602089016132d2565b61473f565b945050505050614047565b60e0614095613d3b61408d6fffffffffffffffffffffffffffffffff6140f7613d3b6140f2886132d2565b92600c81036141b15750614141919261472c565b9061414b8161473f565b918083116141815750906130c2917f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c906145a6565b90507f12bacdd3000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b600f810361423457506141c4919261472c565b906141ce81614425565b918083106142045750906130c2917f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c9061449e565b90507f8b063d73000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b600b810361428d575061424b906130c2929361440d565b156142825761427c827f0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a7085c92614565565b916145a6565b61427c823092614565565b600e81036142c057506142b46142aa6142ba926130c2949561440d565b92829492916132f3565b92614551565b9161449e565b92601084146142d157505050613fec565b6130c29293506142e76142f0926142ba9261440d565b929193906132f3565b916142fa84614425565b613ae3565b73ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8216105f14610b865791565b9161307b9073ffffffffffffffffffffffffffffffffffffffff947fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519181602084019460601b16845260601b1660348201526028815261439b604882612d77565b51902061142a604051938492602084019687917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b906060116114c0578035916040602083013592013590565b61445081307f0000000000000000000000000000000000000000000000000000000000000000614902565b905f821261445c575090565b73ffffffffffffffffffffffffffffffffffffffff907f4c085bf1000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9091801561454c5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102e1575f928360649273ffffffffffffffffffffffffffffffffffffffff948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af180156110585761350b5750565b505050565b9081614561576133459150614425565b5090565b907f8000000000000000000000000000000000000000000000000000000000000000820361459757613345915061499c565b8161456157613345915061473f565b5f9183156147265773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691823b156102e15773ffffffffffffffffffffffffffffffffffffffff604051917fa584119400000000000000000000000000000000000000000000000000000000835216908160048201525f8160248183885af1801561105857614711575b50806146c45750506020906004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af19081156146b8575061468d5750565b6146ae9060203d6020116146b1575b6146a68183612d77565b810190612e8c565b50565b503d61469c565b604051903d90823e3d90fd5b839483602094936146d493613097565b6004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af19081156146b8575061468d5750565b61471e9194505f90612d77565b5f925f614645565b50505050565b91906040116114c0576020823592013590565b61476a81307f0000000000000000000000000000000000000000000000000000000000000000614902565b905f821361477c575061334590612df2565b73ffffffffffffffffffffffffffffffffffffffff907f3351b260000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90610140116114c05780350190565b356fffffffffffffffffffffffffffffffff811681036102e15790565b3580151581036102e15790565b91908260a09103126102e15760405161480f81612d2e565b608061485b81839561482081612e4d565b855261482e60208201612e4d565b602086015261483f60408201612e6e565b604086015261485060608201612e7e565b606086015201612e4d565b910152565b9060a0116114c05780350190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102e1570180359067ffffffffffffffff82116102e157602001918160051b360383136102e157565b9190811015610af15760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61813603018212156102e1570190565b73ffffffffffffffffffffffffffffffffffffffff809381602094165f52168252602460405f2060405194859384927ff135baaa0000000000000000000000000000000000000000000000000000000084526004840152165afa908115611058575f9161496d575090565b90506020813d602011614994575b8161498860209383612d77565b810103126102e1575190565b3d915061497b565b73ffffffffffffffffffffffffffffffffffffffff16806149bc57504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa908115611058575f9161496d575090565b906fffffffffffffffffffffffffffffffff8216809203614a2157565b7f93dafdf1000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092908315614bce576401000276a4905b60405194606086019386851067ffffffffffffffff861117612d4a5773ffffffffffffffffffffffffffffffffffffffff9788608095614b3c946020986040521515998a8152888101908a82528360408201931683526040519c8d998a997ff3cd914c000000000000000000000000000000000000000000000000000000008b528281511660048c0152828d8201511660248c015262ffffff60408201511660448c0152606081015160020b60648c0152015116608489015251151560a48801525160c4870152511660e48501526101206101048501526101248401916109e5565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1928315611058575f93614b9a575b505f1303614b9457600f0b90565b60801d90565b9092506020813d602011614bc6575b81614bb660209383612d77565b810103126102e15751915f614b86565b3d9150614ba9565b73fffd8963efd1fc6a506488495d951d5263988d2590614a5a565b905f6080604051614bf981612d2e565b8281528260208201528260408201528260608201520152614c19826132d2565b73ffffffffffffffffffffffffffffffffffffffff82169173ffffffffffffffffffffffffffffffffffffffff82168084105f14614cf1575073ffffffffffffffffffffffffffffffffffffffff905b1680921492602081013562ffffff81168091036102e1576040820135918260020b8093036102e157606001359273ffffffffffffffffffffffffffffffffffffffff84168094036102e15773ffffffffffffffffffffffffffffffffffffffff9060405195614cd787612d2e565b865216602085015260408401526060830152608082015291565b91505073ffffffffffffffffffffffffffffffffffffffff8291614c69565b5f81600f0b12614a21576fffffffffffffffffffffffffffffffff169056fea26469706673582212209ea227dc2a45e8e3f9f4a079dcae29edaae5cd6df01a35f3c8988383eaac530264736f6c634300081a0033000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000005300000000000000000000000000000000000004000000000000000000000000c221eb5253219c2a2d952281d631d5309b77510d0000000000000000000000001d25af2b0992bf227b350860ea80bad47382caf60000000000000000000000000000000000000000000000000000000000000000e34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54000000000000000000000000c221eb5253219c2a2d952281d631d5309b77510d000000000000000000000000b6f8d24e28bf5b8add2e7510f84f3b9ef03b3435000000000000000000000000c221eb5253219c2a2d952281d631d5309b77510d