0 txs
151 calls
constructor
constructor(address _newEntryPoint, address _newPluginManager)
functions
AUTHOR
viewfunction AUTHOR() view returns (string)
ENTRY_POINT
viewfunction ENTRY_POINT() view returns (address)
getDeposit
viewfunction getDeposit() view returns (uint256)
getEntryPoint
viewfunction getEntryPoint() view returns (address)
getExecutionFunctionConfig
viewfunction getExecutionFunctionConfig(bytes4 selector) view returns (tuple executionFunctionConfig)
getExecutionHooks
viewfunction getExecutionHooks(bytes4 selector) view returns (tuple[] executionHooks)
getInstalledPlugins
viewfunction getInstalledPlugins() view returns (address[] pluginAddresses)
getNonce
viewfunction getNonce() view returns (uint256)
getPreValidationHooks
viewfunction getPreValidationHooks(bytes4 selector) view returns (tuple[] preUserOpValidationHooks, tuple[] preRuntimeValidationHooks)
onERC1155BatchReceived
purefunction onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) pure returns (bytes4)
onERC1155Received
purefunction onERC1155Received(address, address, uint256, uint256, bytes) pure returns (bytes4)
onERC721Received
purefunction onERC721Received(address, address, uint256, bytes) pure returns (bytes4)
PLUGIN_MANAGER
viewfunction PLUGIN_MANAGER() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokensReceived
purefunction tokensReceived(address operator, address from, address to, uint256 amount, bytes userData, bytes operatorData) pure
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
VERSION
viewfunction VERSION() view returns (string)
addDeposit
payablefunction addDeposit() payable
execute
payablefunction execute(address target, uint256 value, bytes data) payable returns (bytes returnData)
executeBatch
payablefunction executeBatch(tuple[] calls) payable returns (bytes[] returnData)
executeFromPlugin
payablefunction executeFromPlugin(bytes data) payable returns (bytes)
executeFromPluginExternal
payablefunction executeFromPluginExternal(address target, uint256 value, bytes data) payable returns (bytes)
initializeUpgradableMSCA
nonpayablefunction initializeUpgradableMSCA(address[] plugins, bytes32[] manifestHashes, bytes[] pluginInstallData)
installPlugin
nonpayablefunction installPlugin(address plugin, bytes32 manifestHash, bytes pluginInstallData, tuple[] dependencies)
uninstallPlugin
nonpayablefunction uninstallPlugin(address plugin, bytes config, bytes pluginUninstallData)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
validateUserOp
nonpayablefunction validateUserOp(tuple userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns (uint256 validationData)
withdrawDepositTo
nonpayablefunction withdrawDepositTo(address withdrawAddress, uint256 amount)
events
Initialized
event Initialized(uint64 version)
PluginInstalled
event PluginInstalled(address indexed plugin, bytes32 manifestHash, (address plugin, uint8 functionId)[] dependencies)
PluginUninstalled
event PluginUninstalled(address indexed plugin, bool indexed onUninstallSucceeded)
UpgradableMSCAInitialized
event UpgradableMSCAInitialized(address indexed account, address indexed entryPointAddress)
Upgraded
event Upgraded(address indexed implementation)
WalletStorageInitialized
event WalletStorageInitialized()
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExecFromPluginToSelectorNotPermitted
error ExecFromPluginToSelectorNotPermitted(address plugin, bytes4 selector)
ExecuteFromPluginToExternalNotPermitted
error ExecuteFromPluginToExternalNotPermitted()
FailedInnerCall
error FailedInnerCall()
InvalidAuthorizer
error InvalidAuthorizer()
InvalidExecutionFunction
error InvalidExecutionFunction(bytes4 selector)
InvalidHookFunctionId
error InvalidHookFunctionId(uint8 functionId)
InvalidInitialization
error InvalidInitialization()
InvalidInitializationInput
error InvalidInitializationInput()
InvalidLimit
error InvalidLimit()
InvalidValidationFunctionId
error InvalidValidationFunctionId(uint8 functionId)
NativeTokenSpendingNotPermitted
error NativeTokenSpendingNotPermitted(address plugin)
NotFoundSelector
error NotFoundSelector()
NotInitializing
error NotInitializing()
NotNativeFunctionSelector
error NotNativeFunctionSelector(bytes4 selector)
PostExecHookFailed
error PostExecHookFailed(address plugin, uint8 functionId, bytes revertReason)
PreExecHookFailed
error PreExecHookFailed(address plugin, uint8 functionId, bytes revertReason)
PreRuntimeValidationHookFailed
error PreRuntimeValidationHookFailed(address plugin, uint8 functionId, bytes revertReason)
RuntimeValidationFailed
error RuntimeValidationFailed(address plugin, uint8 functionId, bytes revertReason)
TargetIsPlugin
error TargetIsPlugin(address plugin)
UnauthorizedCaller
error UnauthorizedCaller()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
WalletStorageIsInitialized
error WalletStorageIsInitialized()
WalletStorageIsInitializing
error WalletStorageIsInitializing()
WalletStorageIsNotInitializing
error WalletStorageIsNotInitializing()
WrongTimeBounds
error WrongTimeBounds()
creation bytecode
0x60e0346200017057601f620041a838819003918201601f19168301916001600160401b0383118484101762000175578084926040948552833981010312620001705780516001600160a01b039182821682036200017057602001519182168203620001705760805260a0527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfd0805460ff8160081c166200015e5760ff8082160362000128575b3060c05260405161401c90816200018c823960805181818161045201528181610d3501528181610d7301528181610e0801528181611b0101528181611c43015281816120e30152818161230b0152612606015260a0518181816103da01528181611a85015281816120a701526122bc015260c0518181816110fd01526128540152f35b60ff191660ff1790557f80bd505c666aa4feeb94643343d3e5acfd6d0b8c43c826331f5d543cbfa7e575600080a13880620000a5565b604051630a87f6e360e31b8152600490fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040526004361015610026575b36156100245761001c6122f9565b602081519101f35b005b60003560e01c806223de29146101f057806301ffc9a7146101eb578063150b7a02146101e657806316feeab7146101e157806319822f7c146101dc57806334fcd5be146101d757806338997b11146101d25780633a0cac56146101cd57806344ab613f146101a55780634a58db19146101c85780634d44560d146101c35780634f1ef286146101be57806352d1902d146101b9578063642f9dd4146101b457806370c321eb146101af5780638d112184146101aa57806394430fa5146101a557806394ed11e7146101a0578063a7be85c61461019b578063ad3cb1cc14610196578063b61d27f614610191578063bc197c811461018c578063c1a221f314610187578063c399ec8814610182578063ceaf13091461017d578063d087d28814610178578063f23a6e6114610173578063f85730f41461016e5763ffa1ad740361000e57611df4565b611d09565b611caf565b611c10565b611bb8565b611ad5565b6119bc565b61192d565b6118c0565b61187a565b61181c565b6116b9565b610d1f565b6115d3565b61150e565b6111e0565b6110ea565b610fe6565b610ddf565b610d64565b610bc8565b610923565b6107ac565b610409565b6103c4565b61035f565b6102d4565b610245565b6001600160a01b0381160361020657565b600080fd5b3590610216826101f5565b565b9181601f84011215610206578235916001600160401b038311610206576020838186019501011161020657565b346102065760c0366003190112610206576102616004356101f5565b61026c6024356101f5565b6102776044356101f5565b6001600160401b0360843581811161020657610297903690600401610218565b505060a43590811161020657610024903690600401610218565b6020906003190112610206576004356001600160e01b0319811681036102065790565b346102065760206102e4366102b1565b6102ed816123d7565b908115610344575b8115610329575b811561030e575b506040519015158152f35b6001600160e01b031916630b135d3f60e11b14905038610303565b6001600160e01b03198116630271189760e51b1491506102fc565b6001600160e01b03198116630a85bd0160e11b1491506102f5565b346102065760803660031901126102065761037b6004356101f5565b6103866024356101f5565b6064356001600160401b038111610206576103a5903690600401610218565b5050604051630a85bd0160e11b8152602090f35b600091031261020657565b34610206576000366003190112610206576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610206576003196060368201126102065760048035916001600160401b03831161020657610120838301918436030112610206576001600160a01b03926044359290602435907f0000000000000000000000000000000000000000000000000000000000000000861633036106bf57606401826104878286612436565b9050106106ae576104a461049e6104aa9286612436565b90612468565b90612476565b6001600160e01b03198116156106ae576104c390611e76565b60018101936104d18561220f565b916001600160581b03196104e4846132e9565b1680159081156106a0575b8115610692575b5061065d579061053a61052f610523610523610515888660209861332f565b96516001600160a01b031690565b6001600160a01b031690565b965460a01c60ff1690565b610557604051958693849363c4db8dd960e01b85528985016124f4565b0381600080985af190811561065857610577928592610627575b5061351d565b60408101519094166001600160a01b0316801515908161061b575b5061060c57506105d56105ee9360018060a01b0360408201511665ffffffffffff60a01b602083015160a01b16179065ffffffffffff60d01b905160d01b161790565b91806105f2575b50506040519081529081906020820190565b0390f35b8180809233600019f150610604611e3a565b5038806105dc565b6040516310b1cc1760e31b8152fd5b60019150141538610592565b61064a91925060203d602011610651575b6106428183610f16565b810190612237565b9038610571565b503d610638565b611e6a565b8461066c602085015160ff1690565b6040516314d291c760e21b815260ff9091169181019182529081906020010390fd5b0390fd5b600160591b149050386104f6565b600160581b811491506104ef565b60405163aedb4d1360e01b81528390fd5b604051635c427cd960e01b81528390fd5b9181601f84011215610206578235916001600160401b038311610206576020808501948460051b01011161020657565b60005b8381106107135750506000910152565b8181015183820152602001610703565b9060209161073c81518092818552858086019101610700565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b84831061077e5750505050505090565b909192939495848061079c600193603f198682030187528a51610723565b980193019301919493929061076e565b602080600319360112610206576004906004356001600160401b038111610206576107db9036906004016106d0565b9290916107e66125de565b926107f0856127aa565b9460005b818110610814576105ee87610808886126a3565b60405191829182610748565b61082f61082a6108258385876127f4565b612816565b613740565b610899578061087d61084761082560019486886127f4565b866108538487896127f4565b013561087761087061086686898b6127f4565b6040810190612436565b3691610f94565b916132b7565b610887828a612005565b526108928189612005565b50016107f4565b906108a89350610825926127f4565b604051632738731760e21b81526001600160a01b039091169181019182529081906020010390fd5b6060600319820112610206576004356108e8816101f5565b9160243591604435906001600160401b0382116102065761090b91600401610218565b9091565b906020610920928181520190610723565b90565b61092c366108d0565b91906001600160a01b03841630148015610b74575b610b625781151580610b59575b80610b0f575b610af7573360009081527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfcd602090815260408083206001600160a01b038816845290915290206109a48483612476565b9081815460ff8116600014610ab85760081c60ff16918215610a85575b50508015610a7d575b15610a5357506338997b1160e01b6000527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfcf6020526105ee93610a4792610a419261087790610a39367f07eda5375f0c0049cbc1df9c13c9a2a93f42195e5d3aa188c59b49f74f3e5e516130c1565b963691610f94565b916126a3565b6040519182918261090f565b60405163415b1b4960e01b81523360048201526001600160e01b0319919091166024820152604490fd5b5083156109ca565b610ab19250906001610aaa92019063ffffffff60e01b16600052602052604060002090565b5460ff1690565b81386109c1565b50503360009081527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfcb60205260409020610af29150610aaa565b6109ca565b60405163171b202760e11b8152336004820152602490fd5b503360009081527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfcb60205260409020610b5490610b50905460081c60ff1690565b1590565b610954565b5034821161094e565b6040516305d2fdc960e41b8152600490fd5b50610b7e84613740565b610941565b602090602060408183019282815285518094520193019160005b828110610bab575050505090565b83516001600160a01b031685529381019392810192600101610b9d565b34610206576000366003190112610206577fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfca54610c0481611418565b90610c126040519283610f16565b808252601f19610c2182611418565b0136602084013760008080527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfc86020527fd594a02d3fda915a830c228e795b44eb4af5dfc9cc085b4c42f40bccd958a910546001600160a01b039081165b83831080610d14575b15610d0657610cfa610ced82610cb4610d0094610ca5888b612005565b6001600160a01b039091169052565b6001600160a01b031660009081527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfc86020526040902090565b546001600160a01b031690565b92612836565b91610c7f565b604051806105ee8782610b83565b508181161515610c88565b34610206576000366003190112610206576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b600080600319360112610ddc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681813b15610ddc5760405163b760faf960e01b8152306004820152918290602490829034905af1801561065857610dd0575080f35b610dd990610eac565b80f35b80fd5b346102065760006040366003190112610ddc57600435610dfe816101f5565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691903383141580610e8c575b610e7a578391833b15610e765760449083604051958694859363040b850f60e31b855216600484015260243560248401525af1801561065857610dd0575080f35b8280fd5b604051635c427cd960e01b8152600490fd5b5030331415610e35565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610ebf57604052565b610e96565b606081019081106001600160401b03821117610ebf57604052565b604081019081106001600160401b03821117610ebf57604052565b61016081019081106001600160401b03821117610ebf57604052565b90601f801991011681019081106001600160401b03821117610ebf57604052565b6040519061021682610ec4565b6001600160401b038111610ebf57601f01601f191660200190565b919091610f6b81610f44565b610f786040519182610f16565b8093828252821161020657818160009384602080950137010152565b929192610fa082610f44565b91610fae6040519384610f16565b829481845281830111610206578281602093846000960137010152565b9080601f830112156102065781602061092093359101610f94565b604036600319011261020657600435610ffe816101f5565b6024356001600160401b0381116102065761101d903690600401610fcb565b9061102661284a565b61102e6125de565b61103661284a565b6040516352d1902d60e01b81526020816004816001600160a01b0387165afa600091816110c9575b5061108457604051634c9c8ce360e01b81526001600160a01b0384166004820152602490fd5b600080516020613fc783398151915281939293036110af5750610024926110aa91613d39565b6126a3565b604051632a87526960e21b81526004810191909152602490fd5b6110e391925060203d602011610651576106428183610f16565b903861105e565b34610206576000366003190112610206577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003611143576020604051600080516020613fc78339815191528152f35b60405163703e46dd60e11b8152600490fd5b602080820190602083528351809252602060408094019401926000905b83821061118157505050505090565b90919293948360806001926111d3838a516111b284825160ff6020809260018060a01b038151168552015116910152565b015180516001600160a01b031683880190815260209182015160ff16910152565b0196019493920190611172565b34610206576111f66111f1366102b1565b611e76565b600d810160108201549060138301916016840154936112196011820154866128a4565b946112256000966128b1565b9461122e61381b565b9087915b838310611393575b5050505061124661381b565b601260009201905b838310611267575b868652604051806105ee8882611155565b611278908592959796939497613868565b90946000965b865188101561135b576112bf6112ba6112a061129a8b8b612005565b516132e9565b84906001600160581b031916600052602052604060002090565b612b98565b80519094901561132e576000915b855183101561131a576113126001916112e68c8c612005565b516112f1828b612005565b51526112fd8589612005565b51602061130a838c612005565b510152612836565b9201916112cd565b9992945097600191505b019692909761127e565b97600191999294506113408189612005565b5161135461134d8c612836565b9b88612005565b5152611324565b9794939650945061137b61136e826132e9565b6001600160581b03191690565b1561138e5760019092019193909361124e565b611256565b6113a590829496939592989798613868565b93909560005b8a88518210156113e3579060019160206113da6113d36113cb858e612005565b51939f612836565b9e8d612005565b510152016113ab565b5050939091955096939195966113fb61136e826132e9565b1561140f5760019092019195949395611232565b9594939561123a565b6001600160401b038111610ebf5760051b60200190565b9080601f8301121561020657602090823561144981611418565b936114576040519586610f16565b81855260208086019260051b82010192831161020657602001905b828210611480575050505090565b81358152908301908301611472565b81601f82011215610206578035916020916114a984611418565b936114b76040519586610f16565b808552838086019160051b8301019280841161020657848301915b8483106114e25750505050505090565b82356001600160401b03811161020657869161150384848094890101610fcb565b8152019201916114d2565b34610206576060366003190112610206576001600160401b03600435818111610206573660238201121561020657806004013561154a81611418565b916115586040519384610f16565b8183526020916024602085019160051b8301019136831161020657602401905b8282106115ba5785856024358281116102065761159990369060040161142f565b604435928311610206576115b461002493369060040161148f565b91611eae565b83809183356115c8816101f5565b815201910190611578565b346102065760a06115e3366102b1565b61169f604051916115f383610ec4565b6000835261168060208401611606611fb3565b815261164c600761163f604088019561161d611fb3565b875261162881612945565b156116a1573089525b611645600161163f83611e76565b0161220f565b8552611e76565b83526040805195516000196001891b01168652905180516001600160a01b0316602080880191909152015160ff1690850152565b5180516001600160a01b031660608401526020015160ff166080830152565bf35b6001808b1b036116b082611e76565b54168952611631565b602036600319011261020657600480356001600160401b038111610206576116e49036908301610218565b919081831061180c576116fa6104a48483612468565b6001600160e01b03198116156106ae573360009081527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfcc602090815260408083206001600160e01b031985168452909152902061175a90610b5090610aaa565b6117de5761176781611e76565b80549093906001600160a01b0316156117b6576105ee84610a47610a41886117b0886117a861179a8483600d8a0161319f565b96546001600160a01b031690565b923691610f94565b90613280565b604051632d71321b60e11b81526001600160e01b031990921690820190815281906020010390fd5b6040805163415b1b4960e01b8152338186019081526001600160e01b03199093166020840152918291010390fd5b5060405163aedb4d1360e01b8152fd5b34610206576000366003190112610206576105ee60405161183c81610edf565b601981527f436972636c6520496e7465726e65742046696e616e6369616c000000000000006020820152604051918291602083526020830190610723565b34610206576000366003190112610206576105ee60405161189a81610edf565b60058152640352e302e360dc1b6020820152604051918291602083526020830190610723565b6118c9366108d0565b91906118d36125de565b926118dd85613740565b61190c57936118f892610877610a41936105ee973691610f94565b604051918291602083526020830190610723565b604051632738731760e21b81526001600160a01b0386166004820152602490fd5b346102065760a0366003190112610206576119496004356101f5565b6119546024356101f5565b6001600160401b03604435818111610206576119749036906004016106d0565b50506064358181116102065761198e9036906004016106d0565b5050608435908111610206576119a8903690600401610218565b505060405163bc197c8160e01b8152602090f35b34610206576060366003190112610206576004356119d9816101f5565b6001600160401b0390602435828111610206576119fa903690600401610fcb565b916044359081116102065761002492611aaa611a75611a1f6001943690600401610fcb565b94611a83611a2b6125de565b9660405193849163b58bb5cb60e01b6020840152611a63898060a01b0380961698896024860152606060448601526084850190610723565b83810360231901606485015290610723565b03601f198101845283610f16565b7f00000000000000000000000000000000000000000000000000000000000000001661291e565b507feb7551bad8fd10038dee62a958c2b6f45624499dc800ff8936bb0a4904bdd2fe600080a36126a3565b34610206576000366003190112610206576040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561065857602091600091611b45575b50604051908152f35b611b5c9150823d8411610651576106428183610f16565b38611b3c565b90815180825260208080930193019160005b828110611b82575050505090565b9091929382604082611bac600194895160ff6020809260018060a01b038151168552015116910152565b01950193929101611b74565b3461020657611c02611bc9366102b1565b6105ee611bee6008611be2611be86002611be287611e76565b01612b98565b94611e76565b604051938493604085526040850190611b62565b908382036020850152611b62565b3461020657600036600319011261020657604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610658576105ee91600091611c90575b506040519081529081906020820190565b611ca9915060203d602011610651576106428183610f16565b38611c7f565b346102065760a036600319011261020657611ccb6004356101f5565b611cd66024356101f5565b6084356001600160401b03811161020657611cf5903690600401610218565b505060405163f23a6e6160e01b8152602090f35b3461020657608036600319011261020657600435611d26816101f5565b6001600160401b0360443581811161020657611d46903690600401610fcb565b606435918211610206573660238301121561020657816004013592611d6a84611418565b92604094611d7b6040519586610f16565b8085526020906024602087019160061b8401019236841161020657602401905b838210611db057610024878760243588612246565b878236031261020657875190611dc582610edf565b8235611dd0816101f5565b8252838301359060ff8216820361020657828592838c950152815201910190611d9b565b34610206576000366003190112610206576105ee604051611e1481610edf565b60058152640312e302e360dc1b6020820152604051918291602083526020830190610723565b3d15611e65573d90611e4b82610f44565b91611e596040519384610f16565b82523d6000602084013e565b606090565b6040513d6000823e3d90fd5b63ffffffff60e01b166000527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfcf602052604060002090565b90917fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfd09283549260ff8460081c16159460ff851680159081611fab575b6001149081611fa1575b159081611f98575b50611f865760ff1985166001178155611f1d9486611f74575b505061207b565b611f2357565b7fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfd0805461ff00191690557f80bd505c666aa4feeb94643343d3e5acfd6d0b8c43c826331f5d543cbfa7e575600080a1565b61ffff19166101011790553880611f16565b60405163281f483d60e11b8152600490fd5b90501538611efd565b303b159150611ef5565b879150611eeb565b60405190611fc082610edf565b60006020838281520152565b604051602081018181106001600160401b03821117610ebf576040526000815290565b634e487b7160e01b600052603260045260246000fd5b80518210156120195760209160051b010190565b611fef565b9361204f60809461205d939498979860018060a01b038096168852602088015260a0604088015260a0870190610723565b908582036060870152611b62565b9416910152565b604090610920939281528160208201520190611b62565b9291909280519380518514801590612204575b6121f25761209d949194611fcc565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811696909491929160005b85811061212b575050505050509091507f000000000000000000000000000000000000000000000000000000000000000016307f9ad63ccc518b8ef686178afc6749063718e08d960071488b02568d9f4258f2ac600080a3565b8061214861213b60019386612005565b516001600160a01b031690565b61219d6121558388612005565b516121976121638588612005565b51916121896040958c875195869463c877ea6360e01b602087015230936024870161201e565b03601f198101835282610f16565b8c61291e565b507fbd807faaec7a357be5390445b7efef4a0ca92fa66300ee4827dde3d9387ffb51896121cd61213b8589612005565b6121e98a6121db878c612005565b519551938493169583612064565b0390a2016120d1565b604051635297bbdb60e11b8152600490fd5b50825185141561208e565b9060405161221c81610edf565b91546001600160a01b038116835260a01c60ff166020830152565b90816020910312610206575190565b61229f7fbd807faaec7a357be5390445b7efef4a0ca92fa66300ee4827dde3d9387ffb51916122f1610216966122ad61227d6125de565b9760405195869163c877ea6360e01b60208401528430918b896024870161201e565b03601f198101865285610f16565b6001600160a01b03936122e2907f0000000000000000000000000000000000000000000000000000000000000000861661291e565b50604051938493169583612064565b0390a26126a3565b600436106123c5576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811633036123ab575b6000356001600160e01b03191661234981611e76565b80549091906001600160a01b0316928316156123875750610a4161237461092092600d3691016130c1565b9261237f3636610f5f565b9034906132b7565b604051632d71321b60e11b81526001600160e01b0319919091166004820152602490fd5b6123c06000356001600160e01b031916612d38565b612333565b60405163aedb4d1360e01b8152600490fd5b6001600160e01b0319908116908114612430576301ffc9a760e01b811461242a576000527fc6a0cc20c824c4eecc4b0fbb7fb297d07492a7bd12c83d4fa4d27b4249f9bfce602052604060002054151590565b50600190565b50600090565b903590601e198136030182121561020657018035906001600160401b0382116102065760200191813603831361020657565b906004116102065790600490565b6001600160e01b0319903581811693926004811061249357505050565b60040360031b82901b16169150565b9035601e19823603018112156102065701602081359101916001600160401b03821161020657813603831361020657565b908060209392818452848401376000828201840152601f01601f1916010190565b93929161255a6125d99160ff6040941687526060602088015261252a6060880161251d8361020b565b6001600160a01b03169052565b602081013560808801526125c9612543858301836124a2565b9390610120948560a08c01526101808b01916124d3565b916125c061258261256e60608401846124a2565b605f198d8803810160c08f015296916124d3565b608083013560e08c01526101009560a0840135878d015260c0840135908c01526125af60e08401846124a2565b8c830387016101408e0152906124d3565b938101906124a2565b91888403016101608901526124d3565b930152565b6000356001600160e01b0319166125f481612945565b1561264a5761092090600d90612639907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361264157611e76565b0136906130c1565b6111f181612d38565b602490604051906350f2762560e11b82526004820152fd5b60409060ff61092094931681528160208201520190610723565b60ff610920949360609360018060a01b031683521660208201528160408201520190610723565b80516000905b8082106126b557505050565b909192602090816126c68587612005565b51015180519093906126e290610523906001600160a01b031681565b928401956126f1875160ff1690565b956126fc8183612005565b515196853b15610206576040958651808093631128186d60e01b825260049b8c83019161272892612662565b03815a6000948591f19081612791575b5061277e57878761068e8888612768612760612752611e3a565b93516001600160a01b031690565b955160ff1690565b9051638342a64960e01b8152948594850161267c565b92965093509350600191500190916126a9565b8061279e6127a492610eac565b806103b9565b38612738565b906127b482611418565b6127c16040519182610f16565b82815280926127d2601f1991611418565b019060005b8281106127e357505050565b8060606020809385010152016127d7565b91908110156120195760051b81013590605e1981360301821215610206570190565b35610920816101f5565b634e487b7160e01b600052601160045260246000fd5b60001981146128455760010190565b612820565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114918215612888575b505061114357565b600080516020613fc78339815191525416141590503880612880565b9190820180921161284557565b906128bb82611418565b6040906128cb6040519182610f16565b83815280936128dc601f1991611418565b019160005b8381106128ee5750505050565b60209082516128fc81610edf565b612904611fb3565b81528261290f611fb3565b818301528286010152016128e1565b6000918291602082519201905af4612934611e3a565b901561293d5790565b602081519101fd5b63ffffffff60e01b16635b0e93fb60e11b8114908115612b87575b8115612b76575b8115612b65575b8115612b54575b8115612b43575b8115612b32575b8115612b21575b8115612b10575b8115612aff575b8115612aee575b8115612add575b8115612acc575b8115612abb575b8115612aaa575b8115612a99575b8115612a88575b8115612a77575b8115612a66575b8115612a55575b8115612a44575b8115612a33575b8115612a22575b8115612a11575b8115612a04575090565b6223de2960e01b14919050565b630a85bd0160e11b811491506129fa565b63bc197c8160e01b811491506129f3565b63f23a6e6160e01b811491506129ec565b63335a353d60e11b811491506129e5565b6327729e3b60e11b811491506129de565b630f95d04b60e41b811491506129d7565b6336cf06ff60e01b811491506129d0565b6370c321eb60e01b811491506129c9565b631a10fa5160e31b811491506129c2565b6344ab613f60e01b811491506129bb565b6306608bdf60e21b811491506129b4565b631d06562b60e11b811491506129ad565b63ceaf130960e01b811491506129a6565b63190be77560e21b8114915061299f565b632344486160e21b81149150612998565b6338997b1160e01b81149150612991565b6394ed11e760e01b8114915061298a565b6301ffc9a760e01b81149150612983565b6352d1902d60e01b8114915061297c565b63278f794360e11b81149150612975565b63c1a221f360e01b8114915061296e565b633e15cc3d60e21b81149150612967565b631a7e6adf60e11b81149150612960565b600381015490612ba782611418565b90612bb56040519283610f16565b828252601f19612bc484611418565b0160005b818110612c6557505060008052806020526040600020549160589260581b946000955b85871080612c52575b15612c4857612c3981612c09612c429361383e565b612c138a87612005565b52612c1e8986612005565b5085906001600160581b031916600052602052604060002090565b54851b96612836565b95612beb565b5094509250505090565b506001600160581b031981161515612bf4565b602090612c70611fb3565b82828701015201612bc8565b92909160ff60a09593168452600180861b03166020840152604083015260806060830152806080830152806000848401376000828201840152601f01601f1916010190565b919260809360ff6020969316845260018060a01b0316858401526040830152826060830152808383015280600060a084013760008282018401850152601f01601f191601010190565b909260809260ff610920979516835260018060a01b03166020830152604082015281606082015201916124d3565b612d46600761163f83611e76565b906001600160581b0319612d59836132e9565b169081158015613033575b61302257612d7190611e76565b600b81015490600801612d8261381b565b612d8a611fb3565b506000905b838210612e70575b50505050600160581b03612da85750565b8051909190612dc190610523906001600160a01b031681565b906020830191612dd2835160ff1690565b90803b156102065760405163bfd151c160e01b8152916000918391829084908290612e069036903490339060048601612c7c565b03925af19081612e5d575b50612e58575061068e612e3e612e36612e28611e3a565b94516001600160a01b031690565b925160ff1690565b92604051938493636d4fdb0960e01b85526004850161267c565b915050565b8061279e612e6a92610eac565b38612e11565b612e809083979495969297613868565b9290966000965b8851881015612ff857612ea061136e61129a8a8c612005565b8015908115612fea575b8115612fdc575b50612fa95790879594939291612ede610523610523612ed08a8e612005565b51516001600160a01b031690565b95612ef98b612ef060209c8d92612005565b51015160ff1690565b98873b156102065760409788519063031fb36160e21b8252818060049d8e369034903390850193612f2994612c7c565b03815a6000948591f19081612f96575b50612f7f57508a8961068e8a8a612f698f612ef0612f55611e3a565b94612f63612ed0828b612005565b98612005565b90516340b788e360e01b8152948594850161267c565b600190980199509697509394509192909190612e87565b8061279e612fa392610eac565b38612f39565b61068e612fbb6020612ef08b8d612005565b6040516314d291c760e21b815260ff90911660048201529081906024820190565b600160591b14905038612eb1565b600160581b81149150612eaa565b95949750929091955061300d61136e826132e9565b1561301d57909160010190612d8f565b612d97565b61068e612fbb602085015160ff1690565b50600160591b8214612d64565b9061304a82611418565b60409061305a6040519182610f16565b838152809361306b601f1991611418565b019160005b83811061307d5750505050565b602090825161308b81610edf565b6060815282613098611fb3565b81830152828601015201613070565b604051906130b482610edf565b6060602083600081520152565b91909160068101926009820154916130dd6004820154846128a4565b926130e9600094613040565b906130f261381b565b906000915b818310613123575b50505061311d9495506131106130a7565b9384526020840152613962565b91908252565b6131369089989598979692939497613868565b92909860005b8a5181101561317157806131526001928d612005565b5160206131686131618c612836565b9b8d612005565b5101520161313c565b50985091969396959290949561318961136e826132e9565b1561319a57600190910191906130f7565b6130ff565b90929160068201936009830154926131bb6004820154856128a4565b936131c7600095613040565b906131d061381b565b906000915b8183106131fb575b50505061311d9596506131ee6130a7565b9485526020850152613ae3565b61320e908a99969294979395989a613868565b93909860005b8a5181101561325357808b9c60206132456132348d9e9f95600196612005565b519261323f81612836565b9d612005565b510152019a9998979a613214565b509997949195985091959261326a61136e826132e9565b1561327b57600190910191906131d5565b6131dd565b600091829182602083519301915af13d6040519160208284010160405281835260208301916000833e156132b2575090565b905190fd5b916000928392602083519301915af13d6040519160208284010160405281835260208301916000833e156132b2575090565b6bffffffffffffffffffffffff19815160601b1690602060ff60581b91015160581b161790565b6040519061331d82610ec4565b60006040838281528260208201520152565b91613338613310565b50613341610f37565b9060009081835260209061335c82850165ffffffffffff9052565b604093836040820152956005600282019101549061337861381b565b90613381611fb3565b5085915b838310613399575b50505050505050505090565b6133ac90829b949a95969798999b613868565b99909488905b86518210156134f1576133cb61136e61129a848a612005565b80159081156134e3575b81156134d5575b506134a3579061342c8b93928a8f8a8c918f61340f85612ef08a613409610523610523612ed0848b612005565b96612005565b995180978195829463056ddae160e21b845260049d8e85016124f4565b03925af190811561065857613447928d9261348b575061351d565b808c01519093906001600160a01b0316801515908161347f575b50613471575060010190916133b2565b8b516310b1cc1760e31b8152fd5b60019150141538613461565b61064a9192508c8d3d10610651576106428183610f16565b61068e8b6134b58b612ef0868c612005565b905163520c50ef60e01b815260ff90911660048201529081906024820190565b600160591b149050386133dc565b600160581b811491506133d5565b9a91949b9998979695505061350861136e826132e9565b1561351857600190920191613385565b61338d565b61352e613528613310565b92613c6c565b9061353f815165ffffffffffff1690565b906020810190613563613558835165ffffffffffff1690565b65ffffffffffff1690565b65ffffffffffff8094161161372e57835165ffffffffffff1690602085019184613596613558855165ffffffffffff1690565b91161161372e57604081810180519196916001600160a01b03166135bc610b5082613cbe565b156136bd5750516135e0906001600160a01b03165b6001600160a01b031688880152565b6136006135f3835165ffffffffffff1690565b915165ffffffffffff1690565b9085821690861611156136ad57505165ffffffffffff1685525b61362d6135f3835165ffffffffffff1690565b90838216908416101561369a57505165ffffffffffff1660208401525b825165ffffffffffff169061366b613558602086015165ffffffffffff1690565b9116101580613686575b61367d575090565b60019082015290565b50808201516001600160a01b031615613675565b65ffffffffffff1660208501525061364a565b65ffffffffffff1686525061361a565b82880180519092506136db90610b50906001600160a01b0316613cbe565b156136f95750516136f4906001600160a01b03166135d1565b6135e0565b6001600160a01b03811661371b5750516136f4906001600160a01b03166135d1565b6001600160a01b031688880152506135e0565b60405163a45d8f5360e01b8152600490fd5b6040519060208083018160006301ffc9a760e01b958684528660248201526024815261376b81610ec4565b51617530938685fa933d6000519086613810575b5085613806575b50846137a3575b50505081613799575090565b6109209150613cdc565b83945090600091839460405185810192835263ffffffff60e01b6024820152602481526137cf81610ec4565b5192fa60005190913d836137fb575b5050816137f1575b50159038808061378d565b90501515386137e6565b1015915038806137de565b1515945038613786565b84111595503861377f565b613823611fb3565b5060405161383081610edf565b600081526000602082015290565b613846611fb3565b5060ff6040519161385683610edf565b8060601c835260581c16602082015290565b919061387c90613876611fb3565b506132e9565b6040519261388984610efa565b600a92600a855260005b610140811061394b57506001600160581b031980841615613932575b6000935b85851080613927575b156139175761390b613904826138d46139119461383e565b6138de898c612005565b526138e9888b612005565b5086906001600160581b031916600052602052604060002090565b5460581b90565b94612836565b936138b3565b925050925061092091845261383e565b5081811615156138bc565b9250600080528160205260406000205460581b926138af565b602090613956611fb3565b82828901015201613893565b92919261396d61381b565b916003820154926000905b84821061398f575b50505050506020825192015190565b61399c9084979597613868565b909660005b8851811015613abe576139b761129a828b612005565b6001600160581b031981168015908115613ab0575b8115613aa2575b50613a9057613a106112ba6139f2886139ec868f612005565b51613e3e565b9260058a01906001600160581b031916600052602052604060002090565b8051613a21575b50506001016139a1565b95919893999490969260005b8751811015613a7c578089613a688c613a486001958d612005565b516020613a5c818401938451905190612005565b510152518d5190612005565b5152613a748b51612836565b8b5201613a2d565b509296509398929760019195509038613a17565b61068e612fbb6020612ef0858e612005565b600160591b149050386139d3565b600160581b811491506139cc565b50949650613ace61136e826132e9565b15613ade57600190910190613978565b613980565b90939293613aef61381b565b926003830154936000905b858210613b12575b5050505050506020825192015190565b613b1f9085989698613868565b909760005b8951811015613c4757613b3a61129a828c612005565b6001600160581b031981168015908115613c39575b8115613c2b575b50613c1957613b956112ba613b77888a8f87613b7191612005565b51613ef8565b9260058b01906001600160581b031916600052602052604060002090565b8051613ba6575b5050600101613b24565b969260009b96929a959198949b5b8851811015613c0457808a613bf08d613bcf6001958e612005565b5160209081830191613be48351855190612005565b51015251905190612005565b5152613bfc8c51612836565b8c5201613bb4565b509296509398600191959a9397509038613b9c565b61068e612fbb6020612ef0858f612005565b600160591b14905038613b56565b600160581b81149150613b4f565b50959750613c5761136e826132e9565b15613c6757600190910190613afa565b613b02565b613c74613310565b5065ffffffffffff90818160a01c16918215613cb6575b60405192613c9884610ec4565b60d083901c84521660208301526001600160a01b0316604082015290565b915081613c8b565b6001600160a01b03168015908115613cd4575090565b600191501490565b6000602091604051838101906301ffc9a760e01b825263043140ed60e01b602482015260248152613d0c81610ec4565b5191617530fa6000513d82613d2d575b5081613d26575090565b9050151590565b60201115915038613d1c565b90813b15613dbf57600080516020613fc783398151915280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2805115613da457613da191613f4a565b50565b505034613dad57565b60405163b398979f60e01b8152600490fd5b604051634c9c8ce360e01b81526001600160a01b0383166004820152602490fd5b602081830312610206578051906001600160401b038211610206570181601f82011215610206578051613e1281610f44565b92613e206040519485610f16565b81845260208284010111610206576109209160208085019101610700565b8051909290613e8e90600090613e5c906001600160a01b0316610523565b936020860194613e6d865160ff1690565b8360405180968195829463236b075960e11b84523490339060048601612cc1565b03925af160009181613ed3575b50613ecd57505061068e613eb3612e36612e28611e3a565b92604051938493636d1fbba160e11b85526004850161267c565b92509050565b613ef19192503d806000833e613ee98183610f16565b810190613de0565b9038613e9b565b805190939192613e8e9160009190613f18906001600160a01b0316610523565b602087019583613f29885160ff1690565b60405163236b075960e11b8152968795869485933490339060048701612d0a565b60008061092093602081519101845af4613f62611e3a565b9190613f8a5750805115613f7857805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580613fbd575b613f9b575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15613f9356fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220fb61622171e6cb32be9025719c4beda2e670a5ab036b5284e2bdbc8c1e814d9a64736f6c634300081800330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da03200000000000000000000000000000005e69188224e4deef607801916dc0936d5