0 txs
1 call
constructor
constructor()
functions
addresses
viewfunction addresses() view returns (address)
getOperators
viewfunction getOperators() view returns (address[])
getVaultBalancesByProduct
viewfunction getVaultBalancesByProduct(address product) view returns (tuple[])
getVaultInfo
viewfunction getVaultInfo(address product, address vault) view returns (tuple)
getVaultMembers
viewfunction getVaultMembers(address product, address vault) view returns (tuple[])
getWithdrawableAmount
viewfunction getWithdrawableAmount(address product, address vault, address user) view returns (uint256 withdrawableAmount, uint256 userShares, uint256 estimatedLeaderFee)
isVault
viewfunction isVault(address product, address vault) view returns (bool)
isVaultMember
viewfunction isVaultMember(address product, address vault, address user) view returns (bool)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
userBalances
viewfunction userBalances(address product, address vault, address user) view returns (uint256 depositBalance, uint256 currentValue, uint256 sharePercentage)
vaultsByProduct
viewfunction vaultsByProduct(address product) view returns (address[])
addOperator
nonpayablefunction addOperator(address operator)
addVaultBalance
nonpayablefunction addVaultBalance(address product, address vault, uint256 amount)
closeVault
nonpayablefunction closeVault(address product, address vault, address leader)
createVault
nonpayablefunction createVault(address product, address leader, uint256 sharePercentage) returns (address)
depositToVault
nonpayablefunction depositToVault(address product, address vault, address user, uint256 amount) returns (uint256)
initialize
nonpayablefunction initialize(address _adminAddress)
pause
nonpayablefunction pause()
removeOperator
nonpayablefunction removeOperator(address operator)
renounceOwnership
nonpayablefunction renounceOwnership()
setAdmin
nonpayablefunction setAdmin(address _adminAddress)
subtractVaultBalance
nonpayablefunction subtractVaultBalance(address product, address vault, uint256 amount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawAllFromVault
nonpayablefunction withdrawAllFromVault(address product, address vault) returns (tuple[])
withdrawFromVault
nonpayablefunction withdrawFromVault(address product, address vault, address user, uint256 amount) returns (uint256)
events
DebugLog
event DebugLog(string message)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
VaultClosed
event VaultClosed(address indexed product, address indexed vault, address indexed leader)
VaultCreated
event VaultCreated(address indexed product, address indexed vault, address indexed leader, uint256 sharePercentage)
VaultTransaction
event VaultTransaction(address indexed product, address indexed vault, address indexed user, uint256 amount, bool isDeposit, uint256 balance)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
CannotWithdrawFromNonExistentMember
error CannotWithdrawFromNonExistentMember()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance()
InsufficientShares
error InsufficientShares()
InvalidAddress
error InvalidAddress()
InvalidAmount
error InvalidAmount()
InvalidInitialization
error InvalidInitialization()
InvalidLeaderAddress
error InvalidLeaderAddress()
InvalidTime
error InvalidTime()
InvalidVaultAddress
error InvalidVaultAddress()
InvalidVaultOperation
error InvalidVaultOperation()
LeaderCannotBeVault
error LeaderCannotBeVault()
NonZeroBalance
error NonZeroBalance()
NotInitializing
error NotInitializing()
OnlyAdmin
error OnlyAdmin()
OnlyOperator
error OnlyOperator()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
Unauthorized
error Unauthorized()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
VaultAlreadyClosed
error VaultAlreadyClosed()
VaultAlreadyExists
error VaultAlreadyExists()
VaultBalanceIsZero
error VaultBalanceIsZero()
VaultCannotDeposit
error VaultCannotDeposit()
VaultNotClosed
error VaultNotClosed()
VaultNotFound
error VaultNotFound()
VaultSpecificError
error VaultSpecificError()
creation bytecode
0x60a080604052346100cc57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100bd57506001600160401b036002600160401b031982821601610078575b604051612a1490816100d282396080518181816110a8015261118b0152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080610059565b63f92ee8a960e01b8152600490fd5b600080fdfe608060405260048036101561001357600080fd5b60003560e01c9081630eab18f7146119af5781631c4b1248146118aa57816327a099d81461181a5781632dc5af3c146117e5578163323e9d83146116d95781633f4ba83a1461165657816341dcf90b1461136e5781634f1ef2861461110f57816352d1902d1461109557816358b4b71114610e545781635c975abb14610e24578163704b6c0214610dc6578163715018a614610d5c5781638456cb5914610cd65781638da5cb5b14610ca05781639436030e14610b9657816396a66dd514610b625781639870d7fe14610aa5578163aa0ceaa21461094a578163ac8a584a14610801578163ad3cb1cc1461077d578163b6742a4714610725578163c30cdfe2146106a8578163c4d66de8146104fa578163c97eb6aa146104c4578163da0321cd1461048e578163da5e19fd1461027157508063f2fde38b14610246578063f5475317146101f45763fc749c601461016957600080fd5b346101ef576020806003193601126101ef5761018b610186611b84565b611d9b565b906040519081602084549182815201936000526020600020916000905b8282106101cf576101cb856101bf81890382611cb6565b60405191829182611bc6565b0390f35b83546001600160a01b0316865294850194600193840193909101906101a8565b600080fd5b346101ef5760603660031901126101ef576101cb610229610213611b84565b61021b611b9a565b610223611bb0565b91612204565b604080519384526020840192909252908201529081906060820190565b346101ef5760203660031901126101ef5761026f610262611b84565b61026a612836565b612190565b005b346101ef5761027f36611c0b565b61028a9291926122ed565b60ff61029533611d29565b54161561047d576102a6838561213a565b801561046b575b61045b57801561044a576102c084611d62565b9160018060a01b03808216938460005260205260406000209080825416156104395760ff60058301541661042857600282015492848410610417576103119361030a88838b61231d565b9590611eb9565b941561040757610336899a61032c6040936060890151611f01565b9086015490611f14565b940151808511156103fe5761034b9085611e7e565b935b826001850154169360030154610366918787878c6123b1565b93858389169883868b14159c7f7247e697207b1a65c7c0989fd960d48fe9db2a3e8853b515126005dc23bc9ced9860609860209f97886103b2996103f5575b6103e2575b50505061261a565b966040519485526000898601528760408601521692a460016000805160206129bf83398151915255604051908152f35b6103eb9361240d565b508b8e80836103aa565b508215156103a5565b5060009361034d565b6040516282b42960e81b81528a90fd5b604051631e9acf1760e31b81528990fd5b60405163fc5c1c4560e01b81528890fd5b60405163dee790fb60e01b81528890fd5b60405163162908e360e11b81528590fd5b6040516282b42960e81b81528590fd5b506104778383866120c7565b156102ad565b6040516327e1f1e560e01b81528590fd5b346101ef5760003660031901126101ef5760008051602061293f833981519152546040516001600160a01b039091168152602090f35b346101ef5760403660031901126101ef5760206104f06104e2611b84565b6104ea611b9a565b9061213a565b6040519015158152f35b346101ef5760203660031901126101ef57610513611b84565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009182549160ff8360401c16159267ffffffffffffffff8116801590816106a0575b6001149081610696575b15908161068d575b5061067d5767ffffffffffffffff19811660011785558361065e575b5061058d61289a565b61059561289a565b61059d61289a565b6105a633612190565b6105ae61289a565b6105b661289a565b6105be61289a565b60016000805160206129bf833981519152556001600160a01b0382161561064f575060008051602061293f83398151915280546001600160a01b0319166001600160a01b0390921691909117905561061257005b68ff00000000000000001981541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60405163e6c4247b60e01b8152fd5b68ffffffffffffffffff19166801000000000000000117845584610584565b5060405163f92ee8a960e01b8152fd5b90501586610568565b303b159150610560565b859150610556565b346101ef576106b636611cf4565b926106c29291926122ed565b60ff6106cd33611d29565b54161561071657506106de90611d62565b9060018060a01b03166000526020526107006002604060002001918254611e7e565b905560016000805160206129bf83398151915255005b6040516327e1f1e560e01b8152fd5b346101ef5761073336611cf4565b9261073f9291926122ed565b60ff61074a33611d29565b541615610716575061075b90611d62565b9060018060a01b0316600052602052610700600260406000200191825461212d565b346101ef5760003660031901126101ef5760405161079a81611c4c565b60058152602090640352e302e360dc1b60208201526040518092602082528251908160208401526000935b8285106107e8575050604092506000838284010152601f80199101168101030190f35b84810182015186860160400152938101938593506107c5565b346101ef5760203660031901126101ef5761081a611b84565b60008051602061293f833981519152546001600160a01b0392908316330361093b579061084681611d29565b805460ff19169055821660005b60008051602061297f83398151915280548083101561026f57858461087785611e0d565b929054600393841b1c161461089157505050600101610853565b9195600019959450919085810190811161092657916108c3916108b76108e19594611e0d565b9054911b1c1691611e0d565b90919060018060a01b038084549260031b9316831b921b1916179055565b82549081156109115750019061090e6108f983611e0d565b81549060018060a01b039060031b1b19169055565b55005b603190634e487b7160e01b6000525260246000fd5b601185634e487b7160e01b6000525260246000fd5b604051634755657960e01b8152fd5b346101ef576020806003193601126101ef57610964611b84565b9061096e82611d9b565b549161099261097c84611ea1565b9361098a6040519586611cb6565b808552611ea1565b601f19018260005b828110610a815750505060005b6109b082611d9b565b54811015610a2257806109cd6001926109c885611d9b565b611e66565b838060a01b0391549060031b1c166109e484611d62565b81600052855260026040600020015460405191610a0083611c4c565b825285820152610a108287612029565b52610a1b8186612029565b50016109a7565b505090604051908282018383528151809152836040840192019360005b828110610a4c5784840385f35b90919282604082610a726001948a516020809160018060a01b0381511684520151910152565b01960191019492919094610a3f565b604051610a8d81611c4c565b6000815260008382015282828801015201839061099a565b346101ef5760203660031901126101ef57610abe611b84565b60008051602061293f833981519152546001600160a01b039081163303610b5157811615610b4157610aef81611d29565b805460ff1916600117905560008051602061297f833981519152805492600160401b841015610b2c5750826108c391600161026f95019055611e0d565b604190634e487b7160e01b6000525260246000fd5b5060405163e6c4247b60e01b8152fd5b604051634755657960e01b81528390fd5b346101ef5760603660031901126101ef5760206104f0610b80611b84565b610b88611b9a565b610b90611bb0565b916120c7565b346101ef5760403660031901126101ef5760e090610bb2611b84565b610bf6610bbd611b9a565b91600060c0604051610bce81611c9a565b8281528260208201528260408201528260608201528260808201528260a08201520152611d62565b60018060a01b03809216600052602052604060002060405191610c1883611c9a565b80825416938484528160018401541691602085019283526002840154906040860191825260038501549260608701938452850154936080870194855260c0600660ff6005890154169760a08a019815158952015497019687526040519788525116602087015251604086015251606085015251608084015251151560a08301525160c0820152f35b346101ef5760003660031901126101ef5760008051602061295f833981519152546040516001600160a01b039091168152602090f35b346101ef5760003660031901126101ef57610cef61286f565b60008051602061293f833981519152546001600160a01b0316330361093b57610d1661286f565b60008051602061299f833981519152600160ff198254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346101ef5760003660031901126101ef57610d75612836565b60008051602061295f83398151915280546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101ef5760203660031901126101ef57610ddf611b84565b610de7612836565b6001600160a01b03811615610b415760008051602061293f83398151915280546001600160a01b0319166001600160a01b03909216919091179055005b346101ef5760003660031901126101ef57602060ff60008051602061299f83398151915254166040519015158152f35b346101ef57610e6236611cf4565b610e6e939291936122ed565b60ff610e7933611d29565b541615611084576001600160a01b0384811692831561107357612710831161044a57610ea5868261213a565b61107357817fea3b1d7ca1ebf098300cc1ec860093e4cd9adedd8feb804f8268ccf691708c07610ed5815461201a565b809155604051602098898201924284526001600160601b0319809260601b16604084015260548301528460601b16607482015260688152610f1581611c7e565b5190201694610f24868361213a565b6110645785851461105557610f3882611d62565b8660005287526040600020805484811661104457876001600160601b0360a01b809216178255866001830191825416179055600060028201558460038201556005810160ff198154169055600642910155610f9282611d9b565b805491600160401b831015610b2c5750927f4dda9a6d0ba03769e9813c47681795a7210f951e6ef31e64772e13b9ea0f140692610fdc886108c38582999860018e98018155611e66565b610fe581611dd4565b86600052835261102160406000206040519061100082611c7e565b8882528986830152600060408301526000606083015242608083015261203d565b6040519485521692a460016000805160206129bf83398151915255604051908152f35b6040516304aabf3360e01b81528390fd5b60405163c70e1c2760e01b8152fd5b6040516304aabf3360e01b8152fd5b604051637dddaccb60e11b81528590fd5b6040516327e1f1e560e01b81528390fd5b346101ef5760003660031901126101ef577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036111005760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60405163703e46dd60e11b8152fd5b60403660031901126101ef57611123611b84565b90602491823567ffffffffffffffff81116101ef57366023820112156101ef578083013561115081611cd8565b9261115e6040519485611cb6565b81845260209182850193368883830101116101ef5781600092898693018737860101526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116308114908115611340575b5061132f576111c4612836565b8116936040516352d1902d60e01b815283818881895afa60009181611300575b5061120057604051634c9c8ce360e01b81528088018790528890fd5b858791897f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc918281036112ea5750853b156112d5575080546001600160a01b03191682179055604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28251156112bc575050600061026f9481925190845af4903d156112b3573d61129681611cd8565b906112a46040519283611cb6565b8152600081943d92013e6128db565b606092506128db565b935093505050346112c957005b63b398979f60e01b8152fd5b604051634c9c8ce360e01b8152808501849052fd5b604051632a87526960e21b815280860191909152fd5b9091508481813d8311611328575b6113188183611cb6565b810103126101ef575190896111e4565b503d61130e565b60405163703e46dd60e11b81528690fd5b9050817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415886111b7565b346101ef5760403660031901126101ef57611387611b84565b61138f611b9a565b916113986122ed565b60ff6113a333611d29565b541615610716576113b382611d62565b6001600160a01b03808516600081815260209390935260409092208054909592911615611645576113e384611dd4565b906000526020526040600020916002850154818601541590811561163c575b5061162d5760009160008454905b8181106115fd57505061142561097c84611ea1565b601f190160005b8181106115d85750506000926000935b855485101561156b5787868860036114548984611ffe565b5001541561155f57611502611531938389896114b29560026114b88f61147d8160019e9c611ffe565b508d808060a01b0391015416998a966114a8600361149b858c611ffe565b500154868c015490611f01565b908a015490611f14565b96611ffe565b50015480851115611556576114cd9085611e7e565b945b6114ec60038c8060a01b038d8401541692015486808985896123b1565b818514158061154d575b61153a575b505061261a565b6040519161150f83611c4c565b825260208201526115208286612029565b5261152b8185612029565b5061201a565b945b019361143c565b61154591848461240d565b5038806114fb565b508015156114f6565b506000946114cf565b50505093600190611533565b5060016000805160206129bf8339815191525560405180916020820160208352815180915260206040840192019060005b8181106115aa575050500390f35b825180516001600160a01b03168552602090810151818601528695506040909401939092019160010161159c565b6020906040516115e781611c4c565b600081526000838201528282880101520161142c565b60036116098288611ffe565b500154611619575b600101611410565b9361162560019161201a565b949050611611565b604051630d4ed82560e01b8152fd5b90501586611402565b60405163dee790fb60e01b81528390fd5b346101ef5760003660031901126101ef5761166f6125ee565b60008051602061293f833981519152546001600160a01b0316330361093b576116966125ee565b60008051602061299f83398151915260ff1981541690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b346101ef576116e736611c0b565b6116f3939291936122ed565b60ff6116fe33611d29565b54161561047d5761170f848461213a565b6117d457801561044a5761172283611d62565b9160018060a01b03958682169384600052602052604060002087815416156117c4576005015460ff166117b5575060608660209761178385897f7247e697207b1a65c7c0989fd960d48fe9db2a3e8853b515126005dc23bc9ced968a61240d565b9760405195865260018a87015288604087015216951692a460016000805160206129bf83398151915255604051908152f35b60405163fc5c1c4560e01b8152fd5b5060405163dee790fb60e01b8152fd5b604051631351bb3760e01b81528590fd5b346101ef5760603660031901126101ef576101cb610229611804611b84565b61180c611b9a565b611814611bb0565b91611f34565b346101ef5760003660031901126101ef576040518060008051602061297f8339815191529182548082526020809201936000527f5c755801b59d4845143e73add69370d0233450824293ba32c58752ee126c84e5916000905b82821061188a576101cb856101bf81890382611cb6565b83546001600160a01b031686529485019460019384019390910190611873565b346101ef5760403660031901126101ef576118c3611b84565b6118d46118ce611b9a565b91611dd4565b6001600160a01b0391821660009081526020918252604090208054916118f983611ea1565b926119076040519485611cb6565b8084528184018093600052826000206000915b83831061198c575050505060405192818401908285525180915260408401929160005b82811061194a5785850386f35b83518051881686528083015188168684015260408082015190870152606080820151908701526080908101519086015260a0909401939281019260010161193d565b60058560019261199e859a989a611eb9565b81520192019201919095939561191a565b346101ef5760603660031901126101ef576119c8611b84565b906119d1611b9a565b6119d9611bb0565b926119e26122ed565b60ff6119ed33611d29565b541615611084576119fd81611d62565b9260018060a01b0380931693846000526020526040600020908382541615611b755760019184806001830154169716809703611b6657600501805460ff8116611b555760ff19166001179055906000815b611a90575b505050167f79fac780d6eaa49773fa00f43621e2c1accc4e65b399c0e16c2bd8417557890e600080a460016000805160206129bf83398151915255005b611a9984611d9b565b54811015611b50578486611ab0836109c888611d9b565b929054600393841b1c1614611ac85750810181611a4e565b9150611ad384611d9b565b91611add85611d9b565b5460001993848201918211611b3b57611b0f9392611aff6108c3938a93611e66565b9054911b1c16916109c887611d9b565b611b1883611d9b565b91825490811561091157500190611b326108f98383611e66565b55848080611a53565b601186634e487b7160e01b6000525260246000fd5b611a53565b60405163fc5c1c4560e01b81528390fd5b506040516282b42960e81b8152fd5b60405163dee790fb60e01b8152fd5b600435906001600160a01b03821682036101ef57565b602435906001600160a01b03821682036101ef57565b604435906001600160a01b03821682036101ef57565b602090602060408183019282815285518094520193019160005b828110611bee575050505090565b83516001600160a01b031685529381019392810192600101611be0565b60809060031901126101ef576001600160a01b0360043581811681036101ef579160243582811681036101ef579160443590811681036101ef579060643590565b6040810190811067ffffffffffffffff821117611c6857604052565b634e487b7160e01b600052604160045260246000fd5b60a0810190811067ffffffffffffffff821117611c6857604052565b60e0810190811067ffffffffffffffff821117611c6857604052565b90601f8019910116810190811067ffffffffffffffff821117611c6857604052565b67ffffffffffffffff8111611c6857601f01601f191660200190565b60609060031901126101ef576001600160a01b039060043582811681036101ef579160243590811681036101ef579060443590565b6001600160a01b031660009081527fea3b1d7ca1ebf098300cc1ec860093e4cd9adedd8feb804f8268ccf691708c026020526040902090565b6001600160a01b031660009081527fea3b1d7ca1ebf098300cc1ec860093e4cd9adedd8feb804f8268ccf691708c036020526040902090565b6001600160a01b031660009081527fea3b1d7ca1ebf098300cc1ec860093e4cd9adedd8feb804f8268ccf691708c066020526040902090565b6001600160a01b031660009081527fea3b1d7ca1ebf098300cc1ec860093e4cd9adedd8feb804f8268ccf691708c046020526040902090565b60008051602061297f8339815191528054821015611e50576000527f5c755801b59d4845143e73add69370d0233450824293ba32c58752ee126c84e50190600090565b634e487b7160e01b600052603260045260246000fd5b8054821015611e505760005260206000200190600090565b91908203918211611e8b57565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8111611c685760051b60200190565b90604051611ec681611c7e565b82546001600160a01b039081168252600184015416602082015260028301546040820152600383015460608201526004909201546080830152565b81810292918115918404141715611e8b57565b8115611f1e570490565b634e487b7160e01b600052601260045260246000fd5b91611f6a611f4184611d62565b92611f638360018060a01b03926000968482168852602052604087209761231d565b9290611eb9565b9115611ff357606082015194600481015460028201548115611fe557926040926003611fa7611fd49794611fa2611fdb9a988d611f01565b611f14565b98899586950151808611600014611fde57611fc3915085611e7e565b925b600183015416910154946123b1565b8092611e7e565b92565b5092611fc5565b505050505050809150918190565b505050809150918190565b8054821015611e50576000526005602060002091020190600090565b6000198114611e8b5760010190565b8051821015611e505760209160051b010190565b8054600160401b811015611c685761205a91600182018155611ffe565b9190916120b157608060049160018060a01b03808251166001600160601b0360a01b908187541617865560018601916020840151169082541617905560408101516002850155606081015160038501550151910155565b634e487b7160e01b600052600060045260246000fd5b6120d090611dd4565b6001600160a01b03918216600090815260209190915260408120805493915b848110612100575050505050600090565b61210a8183611ffe565b5084600180920154168585161461212457506001016120ef565b94505050505090565b91908201809211611e8b57565b9060005b61214783611d9b565b548110156121885761215c816109c885611d9b565b905460039190911b1c6001600160a01b03908116908316146121805760010161213e565b505050600190565b505050600090565b6001600160a01b039081169081156121eb5760008051602061295f83398151915280546001600160a01b031981168417909155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b604051631e4fbdf760e01b815260006004820152602490fd5b92919061223d9161221485611d62565b946122368260018060a01b03946000988682168a52602052604089209361231d565b9490611eb9565b93156122e25760408401519560048201549485156122d757606001948551612710908181029181830414901517156122c3579161229782611fa261228a6122b197956122b79a9997611f14565b9951600286015490611f01565b94859283928b8411156122ba57506003611fc38c85611e7e565b90611e7e565b91565b60039092611fc5565b634e487b7160e01b83526011600452602483fd5b509485945092505050565b505050509080918190565b6000805160206129bf833981519152600281541461230b5760029055565b604051633ee5aeb560e01b8152600490fd5b61232a9093929193611dd4565b6001600160a01b03938416600090815260209190915260408120805491949092855b8381106123795750505015612365578252602082209190565b634e487b7160e01b83526032600452602483fd5b6123838186611ffe565b5083600180920154168484161461239d575060010161234c565b9650925050506123ac91611ffe565b509190565b939492936001600160a01b039081169116148015612405575b6123fc57612710936123ee9381156123f2576123e992611fa291611f01565b611f01565b0490565b5050506000611f01565b50505050600090565b5080156123ca565b9192909360009160009261242085611dd4565b6001600160a01b0397881680865260209182526040808720969890928992916124488a611d62565b838552825260029b600286862001549c6124618c611d62565b858752845260049d600488882001549081156000146125db57505088975b865b8c548110156125c657612494818e611ffe565b508460018092015416858716146124ae5750600101612481565b9e5091939597999b90508c9e61251c8a9c9e8e612515888f8d9f9d8f8d9f9d6125309c9e6124fc60036124eb8f8f8c6124f58c6124eb8585611ffe565b500191825461212d565b9055611ffe565b905561250788611d62565b91835252200191825461212d565b9055611d62565b898b5288528a8a20016124f58c825461212d565b500154995b15612548575b5050505050505050909150565b6125b697995099612597612507926004989a9c61256484611dd4565b87895286528888209089519261257984611c7e565b88845216868301528c898301528b606083015242608083015261203d565b6125a081611d62565b84865283526002868620016125158b825461212d565b905581388080808080808061253b565b509c929496989a505091939597999b50612535565b611fa26125e8928c611f01565b9761247f565b60ff60008051602061299f83398151915254161561260857565b604051638dfc202b60e01b8152600490fd5b91929360009161262984611dd4565b60018060a01b03821660005260205260406000209360009661264a82611d62565b60018060a01b0384166000526020526002604060002001549061266c83611d62565b60018060a01b0385166000526020526004604060002001549560005b88548110156128255761269b818a611ffe565b50600101546001600160a01b038b81169116146126ba57600101612688565b949596979899505090611fa26126f9926126e789611fa28560036126df8f8c90611ffe565b500154611f01565b908181111561281d5750975b88611f01565b93846003612707858a611ffe565b5001541061280b5761278b6127c5936127716127ee9a898060039661272b89611d62565b6001600160a01b038c81166000908152602092909252604090912060010154166127548a611d62565b60018060a01b038d166000526020528860406000200154946123b1565b98600261277e8383611ffe565b50016124f58a8254611e7e565b5001612798858254611e7e565b90556127a381611d62565b60018060a01b0384166000526020526002604060002001612515868254611e7e565b9060018060a01b03166000526020526127e76004604060002001918254611e7e565b9055611e7e565b9060015b156127f957565b60405163141cc34760e11b8152600490fd5b604051633999656760e01b8152600490fd5b9050976126f3565b5099989750505050505050506127f2565b60008051602061295f833981519152546001600160a01b0316330361285757565b60405163118cdaa760e01b8152336004820152602490fd5b60ff60008051602061299f833981519152541661288857565b60405163d93c066560e01b8152600490fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156128c957565b604051631afcd79f60e31b8152600490fd5b9061290257508051156128f057805190602001fd5b60405163d6bda27560e01b8152600490fd5b81511580612935575b612913575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561290b56feea3b1d7ca1ebf098300cc1ec860093e4cd9adedd8feb804f8268ccf691708c019016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300ea3b1d7ca1ebf098300cc1ec860093e4cd9adedd8feb804f8268ccf691708c05cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220079cda96fbe23f37e623fa44bedba5e2f2a5cc8180be902ae38acbae7a59ed5264736f6c63430008160033