0 txs
378 calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
COLLATERAL_MANAGER_ROLE
viewfunction COLLATERAL_MANAGER_ROLE() view returns (bytes32)
collateralManager
viewfunction collateralManager() view returns (address)
contractShareTokenBalance
viewfunction contractShareTokenBalance() view returns (uint256)
convertFromShares
viewfunction convertFromShares(address token, uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(address token, uint256 amount) view returns (uint256)
CUSTODIAN_MANAGER_ROLE
viewfunction CUSTODIAN_MANAGER_ROLE() view returns (bytes32)
CUSTODIAN_ROLE
viewfunction CUSTODIAN_ROLE() view returns (bytes32)
custodians
viewfunction custodians(address, uint256) view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
depositEnabled
viewfunction depositEnabled() view returns (bool)
depositTokenRegistry
viewfunction depositTokenRegistry() view returns (address)
FEE_MANAGER_ROLE
viewfunction FEE_MANAGER_ROLE() view returns (bytes32)
getAvailableBalance
viewfunction getAvailableBalance(address token) view returns (uint256)
getCustodianNetPosition
viewfunction getCustodianNetPosition(address token, address custodian) view returns (uint256 withdrawals, uint256 deposits, int256 netBalance)
getCustodiansForToken
viewfunction getCustodiansForToken(address token) view returns (address[])
getRedemptionTokenStatus
viewfunction getRedemptionTokenStatus(address token) view returns (uint256 lockedAmount, uint256 availableAmount)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTotalDepositFeeAmount
viewfunction getTotalDepositFeeAmount(address token) view returns (uint256)
getTotalDepositsFromCustodian
viewfunction getTotalDepositsFromCustodian(address token, address custodian) view returns (uint256)
getTotalWithdrawalsToCustodian
viewfunction getTotalWithdrawalsToCustodian(address token, address custodian) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isCustodian
viewfunction isCustodian(address token, address custodian) view returns (bool)
kycRegistry
viewfunction kycRegistry() view returns (address)
lastClaimedDepositFeeAmount
viewfunction lastClaimedDepositFeeAmount() view returns (uint256)
name
viewfunction name() view returns (string)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
previewDeposit
viewfunction previewDeposit(address token, uint256 amount) view returns (uint256 shares, uint256 depositFees, bool isAllowed, string errorMessage)
previewMint
viewfunction previewMint(address token, uint256 shares) view returns (uint256 amount, uint256 depositFees, bool isAllowed, string errorMessage)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
redemptionManager
viewfunction redemptionManager() view returns (address)
sharePriceCalculator
viewfunction sharePriceCalculator() view returns (address)
shareToken
viewfunction shareToken() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
UPGRADER_ROLE
viewfunction UPGRADER_ROLE() view returns (bytes32)
userRedemptionDeposits
viewfunction userRedemptionDeposits(address) view returns (uint256)
addCustodian
nonpayablefunction addCustodian(address token, address custodian)
burnShareTokens
nonpayablefunction burnShareTokens(uint256 amount)
claimDepositFees
nonpayablefunction claimDepositFees(address token, address recipient) returns (uint256)
deposit
nonpayablefunction deposit(address token, uint256 amount, uint256 minShares)
depositFromCustodian
nonpayablefunction depositFromCustodian(address token, uint256 amount)
depositNative
payablefunction depositNative(uint256 minShares) payable
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address initialAdmin_, string tokenName, string tokenSymbol, address kycRegistry_, address operator_, address depositTokenRegistry_, address _sharePriceCalculator)
lockCollateralTokens
nonpayablefunction lockCollateralTokens(address token, uint256 amount)
lockRedemptionTokens
nonpayablefunction lockRedemptionTokens(address token, uint256 amount)
pause
nonpayablefunction pause()
processPrestakedDeposit
nonpayablefunction processPrestakedDeposit(address token, uint256 amount, uint256 minShares, address receiver)
receiveShareTokens
nonpayablefunction receiveShareTokens(address from, uint256 amount)
receiveTokens
nonpayablefunction receiveTokens(address token, address from, uint256 amount)
removeCustodian
nonpayablefunction removeCustodian(address token, address custodian)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setCollateralManager
nonpayablefunction setCollateralManager(address _collateralManager)
setDepositEnabled
nonpayablefunction setDepositEnabled(bool depositEnabled_)
setDepositTokenRegistry
nonpayablefunction setDepositTokenRegistry(address depositTokenRegistry_)
setKycRegistry
nonpayablefunction setKycRegistry(address kycRegistry_)
setRedemptionManager
nonpayablefunction setRedemptionManager(address _redemptionManager)
setSharePriceCalculator
nonpayablefunction setSharePriceCalculator(address sharePriceCalculator_)
setShareToken
nonpayablefunction setShareToken(address token)
transferRedemptionTokens
nonpayablefunction transferRedemptionTokens(address token, address to, uint256 amount)
transferShareTokens
nonpayablefunction transferShareTokens(address to, uint256 amount)
transferTokens
nonpayablefunction transferTokens(address token, address recipient, uint256 amount)
unlockCollateralTokens
nonpayablefunction unlockCollateralTokens(address token, uint256 amount)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawToCustodian
nonpayablefunction withdrawToCustodian(address custodian, address token, uint256 amount)
events
AssetDepositedFromCustodian
event AssetDepositedFromCustodian(address indexed custodian, address indexed token, uint256 amount, uint256 indexed timestamp)
AssetWithdrawnToCustodian
event AssetWithdrawnToCustodian(address indexed custodian, address indexed token, uint256 amount, uint256 indexed timestamp)
CollateralManagerUpdated
event CollateralManagerUpdated(address collateralManager)
CollateralTokensLocked
event CollateralTokensLocked(address indexed token, uint256 amount)
CollateralTokensUnlocked
event CollateralTokensUnlocked(address indexed token, uint256 amount)
CustodianAdded
event CustodianAdded(address indexed source, address indexed token, address indexed custodian)
CustodianAdded
event CustodianAdded(address indexed token, address indexed custodian)
CustodianRemoved
event CustodianRemoved(address indexed source, address indexed token, address indexed custodian)
CustodianRemoved
event CustodianRemoved(address indexed token, address indexed custodian)
Deposited
event Deposited(address user, address token, uint256 amount)
DepositedToPool
event DepositedToPool(address pool, uint256 amount)
DepositFeeClaimed
event DepositFeeClaimed(address indexed token, address indexed recipient, uint256 amount)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
RedemptionTokensLocked
event RedemptionTokensLocked(address indexed token, uint256 amount)
RedemptionTokensTransferred
event RedemptionTokensTransferred(address indexed token, address indexed to, uint256 amount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
ShareTokensBurned
event ShareTokensBurned(uint256 amount)
ShareTokenSet
event ShareTokenSet(address indexed token)
ShareTokensReceived
event ShareTokensReceived(address indexed from, uint256 amount)
ShareTokensTransferred
event ShareTokensTransferred(address indexed to, uint256 amount)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
WithdrawnFromPool
event WithdrawnFromPool(address pool, uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
CustodianAlreadySet
error CustodianAlreadySet(address custodian, address token)
DepositNotEnabled
error DepositNotEnabled()
DepositStateAlreadySet
error DepositStateAlreadySet(bool depositEnabled)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InsufficientAllowance
error InsufficientAllowance(address sender, uint256 allowance, uint256 needed)
InsufficientAvailableBalance
error InsufficientAvailableBalance(uint256 available, uint256 required)
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 amount)
InsufficientLockedCollateral
error InsufficientLockedCollateral(address token, uint256 locked, uint256 requested)
InsufficientLockedRedeemableBalance
error InsufficientLockedRedeemableBalance(address token, uint256 locked, uint256 requested)
InsufficientShares
error InsufficientShares(uint256 received, uint256 minimum)
InvalidAdminAddress
error InvalidAdminAddress()
InvalidAmount
error InvalidAmount(uint256 amount)
InvalidCalculatorAddress
error InvalidCalculatorAddress()
InvalidCollateralManagerAddress
error InvalidCollateralManagerAddress()
InvalidCustodian
error InvalidCustodian(address custodian, address token)
InvalidInitialization
error InvalidInitialization()
InvalidKYCRegistryAddress
error InvalidKYCRegistryAddress()
InvalidOperatorAddress
error InvalidOperatorAddress()
InvalidRecipient
error InvalidRecipient(address recipient)
InvalidRedemptionManagerAddress
error InvalidRedemptionManagerAddress()
InvalidRegistryAddress
error InvalidRegistryAddress()
InvalidSender
error InvalidSender(address sender)
InvalidToken
error InvalidToken(address token)
NoFeesToClaim
error NoFeesToClaim()
NoNativeTokenSent
error NoNativeTokenSent()
NotInitializing
error NotInitializing()
OnlyApprovedKYCUser
error OnlyApprovedKYCUser()
OnlyCollateralManager
error OnlyCollateralManager()
OnlyRedemptionManager
error OnlyRedemptionManager()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ShareTokenAlreadySet
error ShareTokenAlreadySet()
TokenNotEnabledForDeposit
error TokenNotEnabledForDeposit(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a08060405234620000d157306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000c257506001600160401b036002600160401b0319828216016200007c575b60405161495f9081620000d7823960805181818161268301526127260152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880806200005c565b63f92ee8a960e01b8152600490fd5b600080fdfe6080604081815260048036101561001557600080fd5b600092833560e01c90816301ffc9a7146137005750806305db2f41146136c5578063061525371461366c57806306fdde03146135825780630df9ef2c146135225780630efe6a8b14613209578063156c2a6e146131e057806320483dd114613134578063205023d3146130f957806322b6fea914612fd957806323be345c14612fb0578063248a9ca314612f795780632b38e26614612f225780632ccbef8b14612d8d5780632e08ebcd14612d1c5780632e718ab714612ce15780632eebe78e14612cbd5780632f2ff15d14612c945780633278eb0414612c6b57806336568abe14612c24578063383e6d4a14612b6a5780633e5541f114612ab95780633f4ba83a14612a4257806340f797bb146129b65780634788a26b146129565780634b155b971461292d5780634efde8d01461290e5780634f1ef286146126d557806352d1902d1461266e5780635a8f00c81461261e5780635b17d04b146125b95780635c975abb14612588578063608fc37a146121fb578063635b6a3a1461219b57806363f926231461208157806366c4257b146120495780636c24a76f14611f635780636c9fa59e14611f3b57806375b238fc14611f00578063842a05d414611e775780638456cb5914611e0f57806384b594dc14611c405780638795feb814611adf5780638863e5c4146117a55780638dcfbfab146115ba5780639137c1771461157d57806391d148541461152b57806395d89b411461143757806399caf5dd1461120e5780639b18847e1461116d5780639f5bd0f3146110ba578063a217fddf1461109f578063a64b6e5f14610f52578063a819462514610d6a578063a981c7b414610d3d578063ad3cb1cc14610cf8578063b008690c14610a32578063b04b3f57146109f3578063b8b99b7a146109a5578063b8f82b2614610973578063beb96acf14610855578063c5cc6bb314610807578063c79445d0146107cc578063cc2b2523146107ad578063cf177dbc14610655578063d1f810a514610611578063d547741f146105c5578063e63ab1e91461058a578063f5b541a614610561578063f72c0d8b146105345763fade00fe1461033057600080fd5b3461044f57602090816003193601126104415780359061034e614255565b61035661422a565b6009546001600160a01b03908116330361052557821561050f5785541684516370a0823160e01b9081815230848201528581602481865afa801561050557859189916104d4575b501061045357509085916103b384600c54613f89565b600c55803b1561044f578383916103e093838951809681958294632770a7eb60e21b845230908401613eb0565b03925af180156104455761042d575b50507f0158b5c01453469bf562bebba531d45a08d8162682a2d56d652909caf8e9cbaa9251908152a1600160008051602061490a8339815191525580f35b610436906137c4565b6104415783386103ef565b8380fd5b85513d84823e3d90fd5b8280fd5b9380879395602488949851809981938252308a8301525afa9283156104c95792610493575b505163cf47918160e01b815292830152602482015260449150fd5b90915084813d83116104c2575b6104aa8183613823565b810103126104bd57604493519085610478565b600080fd5b503d6104a0565b8251903d90823e3d90fd5b809250878092503d83116104fe575b6104ed8183613823565b810103126104bd578490513861039d565b503d6104e3565b87513d8a823e3d90fd5b50602491845191633728b83d60e01b8352820152fd5b5083516367a3563f60e01b8152fd5b50503461055d578160031936011261055d576020905160008051602061484a8339815191528152f35b5080fd5b50503461055d578160031936011261055d57602090516000805160206148aa8339815191528152f35b50503461055d578160031936011261055d57602090517f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8152f35b50903461044f578060031936011261044f5761060d913561060860016105e961376a565b938387526000805160206148ca83398151915260205286200154613a6e565b613cda565b5080f35b50503461055d578060031936011261055d5761065190610643610632613754565b61063a61422a565b60243590614363565b919492935194859485613929565b0390f35b503461044f578160031936011261044f5761066e613754565b6024359061067a614255565b61068261422a565b6009546001600160a01b0391908216330361079d5716928051926370a0823160e01b845230818501526020938481602481895afa908115610793578791610766575b50858752600d85526106ed6106dc8489205486614285565b878952600e87528489205490614285565b9081811061074d57505050907f3b3cc6e6e4f41ea6d60a8a018c24e335d06b91f3eaa9dfc6e7f51cd00155c4e49291848652600d8352808620610731838254614285565b905551908152a2600160008051602061490a8339815191525580f35b604493519263adb9e04360e01b84528301526024820152fd5b90508481813d831161078c575b61077d8183613823565b810103126104bd5751386106c4565b503d610773565b83513d89823e3d90fd5b84516367a3563f60e01b81528490fd5b50503461055d578160031936011261055d576020906005549051908152f35b50503461055d578160031936011261055d57602090517fe28434228950b641dbbc0178de89daa359a87c6ee0d8399aeace52a98fe902b98152f35b50503461055d578060031936011261055d57602091610824613754565b8261082d61376a565b6001600160a01b039283168452600f8652922091166000908152908352819020549051908152f35b503461044f5761086436613884565b91939061086f614255565b61087761422a565b6009546001600160a01b039590861633036109635785821695861561094c57841561093557811694858852600d6020528388205485811061091657505050916020916108fc827f466568d995c4d20c1611745da0ee5c713e401f183df24615614ad6ce33e67fce95878a52600d8652838a206108f4838254613f89565b9055876147e4565b51908152a3600160008051602061490a8339815191525580f35b8561093191865194859463162f9a1960e31b8652850161480b565b0390fd5b8351633728b83d60e01b8152808701869052602490fd5b8351630bc2c5df60e11b8152808701889052602490fd5b82516367a3563f60e01b81528590fd5b50503461055d578060031936011261055d5761065190610643610994613754565b61099c61422a565b60243590613fac565b50503461055d578060031936011261055d576020916109c2613754565b826109cb61376a565b6001600160a01b03928316845260108652922091166000908152908352819020549051908152f35b50503461055d578060031936011261055d57602090610a29610a13613754565b610a1b61376a565b90610a2461422a565b614746565b90519015158152f35b503461044f5760e036600319011261044f57610a4c613754565b906001600160401b03602435818111610cf457610a6c903690840161390b565b50604435818111610cf457610a84903690840161390b565b50610a8d613780565b926001600160a01b0392608435908482168083036104bd5760a435868116928382036104bd5760c435938885168095036104bd578a987ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009a60ff8c54809c1c1615998b169a8b1580610ced575b6001809d149081610ce3575b159081610cda575b50610cca5767ffffffffffffffff1981168c178d558a610cab575b50610b32613df0565b610b3a613df0565b8a60008051602061490a83398151915255610b53613df0565b610b5b613df0565b610b63613df0565b6000805160206148ea833981519152805460ff19169055610b82613df0565b81891615610c9b5716938415610c8b5715610c7c5715610c6e578315610c60575086546001600160a01b0319908116909217875560068054610100600160a81b03191660089290921b610100600160a81b0316919091179055600780549091169091179055610c199190610c0990610bf983613aa1565b50610c0333613aa1565b50613b2f565b50610c1333613b2f565b50613bcd565b50610c22578380f35b815460ff60401b191690915590519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880808380f35b8951630538eaff60e51b8152fd5b8951637bfd2e8360e01b8152fd5b50895163eb32d3bf60e01b8152fd5b8b51630201aae160e21b81528390fd5b8c5163016ed19f60e21b81528490fd5b68ffffffffffffffffff191668010000000000000001178c5538610b29565b8d5163f92ee8a960e01b81528590fd5b90501538610b0e565b303b159150610b06565b508a610afa565b8580fd5b50503461055d578160031936011261055d57805161065191610d19826137ed565b60058252640352e302e360dc1b602083015251918291602083526020830190613844565b50503461055d578160031936011261055d57600654905160089190911c6001600160a01b03168152602090f35b5082903461055d578260031936011261055d57610d85613754565b92602490813590610d94614255565b610d9c61422a565b6009546001600160a01b039081163303610f4257808716948515610f2c578315610f175781875416908351956370a0823160e01b808852308389015260209788818481885afa908115610f0d579088918c91610edc575b5010610e6e5750505050828697610e5492877f3a19b6efdb4fa34812cbff59a94c0d953fa352016b0c438a40a5520d69b26492989952600b8752848a20610e3b848254613f89565b9055610e4983600c54613f89565b600c558954166147e4565b51908152a2600160008051602061490a8339815191525580f35b90898689808a95858451809a81938252308b8301525afa9283156104c95792610eab575b505163cf47918160e01b81529384015282015260449150fd5b90915085813d8311610ed5575b610ec28183613823565b810103126104bd57604494519086610e92565b503d610eb8565b8092508a8092503d8311610f06575b610ef58183613823565b810103126104bd578790518d610df3565b503d610eeb565b87513d8d823e3d90fd5b939450505191633728b83d60e01b8352820152fd5b8251630bc2c5df60e11b81529081018690528490fd5b81516367a3563f60e01b81528590fd5b5082903461055d57610f6336613884565b92610f6f929192614255565b610f7761422a565b6008546001600160a01b0392908316330361109057821691821561107a57831680156110645750831561104d5785516370a0823160e01b81523082820152602081602481865afa908115611043578691611012575b50848110610ff6575050610fe19394506147e4565b600160008051602061490a8339815191525580f35b865163adb9e04360e01b81529182015260248101849052604490fd5b90506020813d821161103b575b8161102c60209383613823565b810103126104bd575187610fcc565b3d915061101f565b87513d88823e3d90fd5b8551633728b83d60e01b8152908101849052602490fd5b8651630bc2c5df60e11b81529182015260249150fd5b5060249186519163961c9a4f60e01b8352820152fd5b50855163b693a60960e01b8152fd5b50503461055d578160031936011261055d5751908152602090f35b50503461055d5760208060031936011261044f576110d6613754565b926110df61422a565b6001600160a01b039384168152600a825282812083518154808252918352838320818501949192859190855b8181106111575750505082611121910383613823565b8451948186019282875251809352850193925b8281106111415785850386f35b8351871685529381019392810192600101611134565b82548a168452928401926001928301920161110b565b50913461120b578160031936011261120b57611187613754565b9161119061376a565b60018060a01b03809416938484526010602052828420911690816000526020528160002054938352600f60205281832090600052602052806000205483810392808512828512811690838613901516176111f857506060945081519384526020840152820152f35b634e487b7160e01b815260118652602490fd5b80fd5b50903461044f578060031936011261044f57611228613754565b9060243590611235614255565b61123d61422a565b6001600160a01b03831692831561142057821561140957331580156113f0575b6113d457508051636eb1769f60e11b8082526020959186818061128330338884016145bf565b0381895afa9081156113ca579085918991611399575b501061130d575050828552600f8452808520336000528452806000206112c0838254614285565b90556112ce823033866142b4565b519081527fdad7dfd8821ceb98a6dd83b8f330e604bd0e832f55ca902bbfadabde5e40132342933392a4600160008051602061490a8339815191525580f35b9480919583949593519384918252818061132a30338c84016145bf565b03915afa95861561138e579561135a575b505051630c95cf2760e11b81529283926109319291903390850161480b565b908093929550813d8311611387575b6113738183613823565b810103126104bd579051926109313861133b565b503d611369565b8351903d90823e3d90fd5b809250888092503d83116113c3575b6113b28183613823565b810103126104bd5784905138611299565b503d6113a8565b84513d8a823e3d90fd5b815163188fe79360e21b815290819061093190338389016145bf565b506113f961422a565b6114033382614746565b1561125d565b8151633728b83d60e01b8152808601849052602490fd5b815163961c9a4f60e01b8152808601859052602490fd5b50913461120b578060031936011261120b575080519060009060035491600183811c90808516948515611521575b602095868410811461150e578388528794939291879082156114ec5750506001146114ac575b5050610651929161149d910385613823565b51928284938452830190613844565b90859250600360005282600020916000925b8284106114d4575050508201018161149d61148b565b8054848a0186015288955087949093019281016114be565b60ff19168682015292151560051b8501909201925083915061149d905061148b565b634e487b7160e01b855260228952602485fd5b91607f1691611465565b503461044f578160031936011261044f578160209361154861376a565b923581526000805160206148ca8339815191528552209060018060a01b0316600052825260ff81600020541690519015158152f35b50503461055d5736600319011261120b576115b7611599613754565b6115a161376a565b906115aa61422a565b6115b26139b6565b6145e8565b80f35b5082903461055d578260031936011261055d576115d5613754565b92602435906115e2614255565b6115ea61422a565b6009546001600160a01b0390811633036117955780861693841561177e5783156117675785548351636eb1769f60e11b80825260209695949392841691878180611637308f838a016145bf565b0381865afa90811561175d579087918b9161172c575b50106116af5750505082610e54918798877f6926ad0f7f6f6814be2630ac9d46a2d1988f933254ad20700c1425aaf64a27a4989952600b8752848a20611694848254614285565b90556116a283600c54614285565b600c5530918a54166142b4565b8993508885888089948351968791825281806116ce308d8d84016145bf565b03915afa9283156104c957926116fa575b5051630c95cf2760e11b81529485946109319450850161480b565b90915083813d8311611725575b6117118183613823565b810103126104bd57610931925190866116df565b503d611707565b809250898092503d8311611756575b6117458183613823565b810103126104bd578690518c61164d565b503d61173b565b86513d8c823e3d90fd5b8251633728b83d60e01b8152908101849052602490fd5b82516313053d9360e21b8152908101859052602490fd5b81516367a3563f60e01b81528490fd5b503461044f57608036600319011261044f576117bf613754565b6024803592604435916117d0613780565b926117d9614255565b6117e161422a565b60015487516373bed91960e11b81526001600160a01b0386811686830152939160209190829082908590829089165afa908115611ad5578b91611ab8575b5015611aa85761182d61422a565b60065460ff811615611a98578815611a825789516313a9822560e31b8152888616878201819052949160081c86169083818681855afa9081156119fa578d91611a55575b5015611a3f578a5163146f4ea360e21b815295949392919082908790818061189c8f8f838f01613eb0565b03915afa928315611a35578c93611a04575b6118e09650826118be858d613f89565b8d8c8b8a6007541692519b8c9485938493633e5541f160e01b85528401613eb0565b03915afa9687156119fa578d976119cb575b508187106119b05750508261192692878b938e9a999897968b525261191b8c8a20918254614285565b9055309033906142b4565b845416803b156119ac57611951938580948a51968795869485936340c10f1960e01b85528401613eb0565b03925af1801561044557611998575b505061198060008051602061488a83398151915293519283923384614292565b0390a1600160008051602061490a8339815191525580f35b6119a1906137c4565b610441578338611960565b8480fd5b6044918891888e519363658ec5dd60e11b8552840152820152fd5b9096508281813d83116119f3575b6119e38183613823565b810103126104bd575195386118f2565b503d6119d9565b8c513d8f823e3d90fd5b92508186813d8311611a2e575b611a1b8183613823565b810103126104bd576118e09551926118ae565b503d611a11565b8b513d8e823e3d90fd5b8a51639d42b4b360e01b81528088018690528490fd5b611a759150843d8611611a7b575b611a6d8183613823565b810190613e63565b38611871565b503d611a63565b8951633728b83d60e01b81528087018a90528390fd5b895163bb60b89360e01b81528690fd5b885163110781d160e31b81528590fd5b611acf9150823d8411611a7b57611a6d8183613823565b3861181f565b8a513d8d823e3d90fd5b50903461044f578060031936011261044f57611af9613754565b92611b0261376a565b93611b0b614255565b611b1361422a565b7f6c0757dc3e6b28b2580c03fd9e96c274acf4f99d91fbec9b418fa1d70604ff1c94856000526020956000805160206148ca83398151915287528460002033600052875260ff85600020541615611c2257506001600160a01b03918216918215611c0b578116928315611bf45782815285875284812054958615611be657838252875284812055611ba6908590836147e4565b7fd74e462593ae4127bbc183389b3775357426f157e9625f81271612b86b8000a6858451868152a3600160008051602061490a8339815191525551908152f35b855163211b631760e21b8152fd5b8451630bc2c5df60e11b8152808701859052602490fd5b845163961c9a4f60e01b8152808701849052602490fd5b845163e2517d3f60e01b815233818801526024810191909152604490fd5b50903461044f57611c5036613884565b93909192611c5c61394e565b611c64614255565b611c6c61422a565b6001600160a01b0383811694908515611df8578615611de15781169384158015611dc8575b611dac575081516370a0823160e01b815230848201526020939084816024818a5afa908115611da2578991611d73575b50611cda611ceb91888b52600d8752858b205490613f89565b878a52600e8652848a205490613f89565b878110611d5757505090611d3b867ff7924cd170ae143405ff2557ce6b4615c3a29b30bcd8a70b49d4d0b3475efb0c9493878a5260108552838a20876000528552836000206108f4838254614285565b519485524294a4600160008051602061490a8339815191525580f35b835163adb9e04360e01b81529182015260248101879052604490fd5b90508481813d8311611d9b575b611d8a8183613823565b810103126104bd5751611cda611cc1565b503d611d80565b84513d8b823e3d90fd5b915163188fe79360e21b815292839261093192909184016145bf565b50611dd161422a565b611ddb8282614746565b15611c91565b8251633728b83d60e01b8152808501889052602490fd5b825163961c9a4f60e01b8152808501879052602490fd5b50503461055d578160031936011261055d5760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891611e4d613a12565b611e5561422a565b6000805160206148ea833981519152805460ff1916600117905551338152a180f35b50903461044f57602036600319011261044f57611e92613754565b611e9a61422a565b611ea261394e565b6001600160a01b0316918215611ef25750600880546001600160a01b03191683179055519081527f507e88d0e3541203c8e7dba038a3e807ac9121f0872ed9ed895cd7f3358334eb90602090a180f35b9051630d432b0160e21b8152fd5b50503461055d578160031936011261055d57602090517fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758152f35b50503461055d578160031936011261055d57905490516001600160a01b039091168152602090f35b503461044f576020928360031936011261120b576001600160a01b03611f87613754565b84516370a0823160e01b8152308582015291168582602481845afa91821561203f578392612010575b508252600d85528382205490600e8652848320549386528483205492611fdf84611fda8786614285565b614285565b821115612005575092611ff8611ff892611ffd95613f89565b613f89565b905b51908152f35b935050505090611fff565b9091508581813d8311612038575b6120288183613823565b810103126104bd57519038611fb0565b503d61201e565b85513d85823e3d90fd5b50503461055d57602036600319011261055d5760209181906001600160a01b03612071613754565b168152600b845220549051908152f35b503461044f578160031936011261044f5761209a613754565b600854602435916001600160a01b03918216330361218b576120ba61422a565b16928051926370a0823160e01b845230818501526020938481602481895afa90811561079357879161215e575b50858752600e85526121106120ff8489205486614285565b878952600d87528489205490614285565b9081811061074d57505050907f36bea377ee4a4c4516cc608cc232173faafbeb7ee10ad11c6420f2863a97644b9291848652600e8352808620612154838254614285565b905551908152a280f35b90508481813d8311612184575b6121758183613823565b810103126104bd5751386120e7565b503d61216b565b845163b693a60960e01b81528490fd5b503461044f57602036600319011261044f576121b5613754565b6121bd61422a565b6121c561394e565b6001600160a01b03169182156121ee575050600780546001600160a01b03191691909117905580f35b51630538eaff60e51b8152fd5b5082906020928360031936011261044f57813591612217614255565b61221f61422a565b60015482516373bed91960e11b815233838201526001600160a01b03949187908290602490829089165afa90811561257e578691612561575b50156125525734156125435760065460ff81161561253357849060081c1683519463e861e90760e01b865287868581855afa9586156125295787966124ed575b5084516313a9822560e31b815286821685820181905293908981602481875afa9081156124735789916124d0575b50156124b857888651809463146f4ea360e21b825281806122ea348d8c8401613eb0565b03915afa9081156124ae57889161247d575b61232c93508961230c8334613f89565b84600754168a8a51809881948293633e5541f160e01b84528d8401613eb0565b03915afa938415612473578994612444575b508084106124275750848899858a98999a525261235f878720918254614285565b9055845416803b156119ac5785516340c10f1960e01b8152918591839182908490829061238f90338b8401613eb0565b03925af1801561241d57908491612409575b5050803b1561044f578290845192838092630d0e30db60e41b825234905af180156123ff576123eb575b50815160008051602061488a833981519152908061198034873384614292565b6123f4906137c4565b61044f5782846123cb565b83513d84823e3d90fd5b612412906137c4565b61044f5782876123a1565b85513d86823e3d90fd5b93505050604493519263658ec5dd60e11b84528301526024820152fd5b9093508981813d831161246c575b61245c8183613823565b810103126104bd5751928a61233e565b503d612452565b87513d8b823e3d90fd5b90508883813d83116124a7575b6124948183613823565b810103126104bd5761232c9251906122fc565b503d61248a565b86513d8a823e3d90fd5b50509251639d42b4b360e01b81529182015260249150fd5b6124e791508a3d8c11611a7b57611a6d8183613823565b8a6122c6565b9095508781813d8311612522575b6125058183613823565b8101031261251e5751858116810361251e579488612298565b8680fd5b503d6124fb565b85513d89823e3d90fd5b835163bb60b89360e01b81528390fd5b509051633b903ec760e01b8152fd5b50905163110781d160e31b8152fd5b6125789150873d8911611a7b57611a6d8183613823565b87612258565b84513d88823e3d90fd5b50503461055d578160031936011261055d5760209060ff6000805160206148ea833981519152541690519015158152f35b503461044f57602036600319011261044f57803590811515809203610441576125e061422a565b6125e861394e565b600654928260ff851615151461260957505060ff169060ff19161760065580f35b91602492519163ca255b0b60e01b8352820152fd5b503461044f57602036600319011261044f576001600160a01b03612640613754565b16801561265a579282916020948252845220549051908152f35b602492519163961c9a4f60e01b8352820152fd5b50913461120b578060031936011261120b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036126c8576020905160008051602061486a8339815191528152f35b5163703e46dd60e11b8152fd5b50908060031936011261044f576126ea613754565b9060249384356001600160401b03811161055d573660238201121561055d5761271b903690878188013591016138d4565b6001600160a01b03937f000000000000000000000000000000000000000000000000000000000000000085163081149081156128f2575b506128e25760008051602061484a83398151915294856000526020956000805160206148ca83398151915287528560002033600052875260ff866000205416156128c5575081169484516352d1902d60e01b8152818189818a5afa859181612896575b506127d05750505050505191634c9c8ce360e01b8352820152fd5b868996899260008051602061486a833981519152908181036128815750853b1561286c5780546001600160a01b0319168317905551869392917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2855115612850575050835161060d94839201845af461284a613d5d565b91613d8d565b9350935050503461286057505080f35b63b398979f60e01b8152fd5b5051634c9c8ce360e01b815291820152859150fd5b848a91845191632a87526960e21b8352820152fd5b9091508281813d83116128be575b6128ae8183613823565b81010312610cf4575190386127b5565b503d6128a4565b855163e2517d3f60e01b815233818a0152808a0191909152604490fd5b835163703e46dd60e11b81528690fd5b90508560008051602061486a8339815191525416141538612752565b50503461055d578160031936011261055d57602090600c549051908152f35b50503461055d578160031936011261055d5760015490516001600160a01b039091168152602090f35b503461044f57602036600319011261044f57612970613754565b61297861422a565b61298061394e565b6001600160a01b03169182156129a9575050600180546001600160a01b03191691909117905580f35b51630201aae160e21b8152fd5b50903461044f57602036600319011261044f5781356001600160a01b0381169290839003610441576129e661394e565b6011549160ff8316612a3557505082546001600160a01b0319168217835560ff19166001176011557fdb40a5259506fa101ac4485d4ccbd019c99ada5fb7212fe1254374f7a10e02dc8280a280f35b51630f4bac1b60e21b8152fd5b503461044f578260031936011261044f57612a5b613a12565b6000805160206148ea8339815191529081549060ff821615612aab575060ff19169055513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a180f35b8351638dfc202b60e01b8152fd5b5091903461055d578060031936011261055d576020612b1093612ada613754565b612ae261422a565b6007548451633e5541f160e01b81529687936001600160a01b03909216928492839291602435918401613eb0565b03915afa918215612b5f5791612b2b575b6020925051908152f35b90506020823d8211612b57575b81612b4560209383613823565b810103126104bd576020915190612b21565b3d9150612b38565b9051903d90823e3d90fd5b50903461044f578060031936011261044f57612b84613754565b6008546024359291906001600160a01b039081163303612c1457612ba661422a565b811693848652600e60205282862054848110612bf9575050507fbcb639e764c5cd7d736acef943167eb10be8fc46f9e33b29c69c89473fb79fd791602091848652600e8352808620612154838254613f89565b84610931918551948594631664bf6360e01b8652850161480b565b825163b693a60960e01b81528590fd5b5091903461055d578060031936011261055d57612c3f61376a565b90336001600160a01b03831603612c5c575061060d919235613cda565b5163334bd91960e11b81528390fd5b50503461055d578160031936011261055d5760095490516001600160a01b039091168152602090f35b50903461044f578060031936011261044f5761060d9135612cb860016105e961376a565b613c65565b50503461055d578160031936011261055d5760209060ff6006541690519015158152f35b50503461055d578160031936011261055d57602090517f85e8f2d6819d6b24108062d87ea08f54651bcb8960d98062d3faf96e7873b8b98152f35b503461044f57602036600319011261044f57612d36613754565b91612d3f61422a565b612d4761394e565b6001600160a01b03831615612d8057505060068054610100600160a81b03191660089290921b610100600160a81b031691909117905580f35b51637bfd2e8360e01b8152fd5b50903461044f57612d9d36613884565b93909192612da9614255565b612db161422a565b6008546001600160a01b03949085163303612f14578416938415612efd5783168015612ee857508415612ed2578051636eb1769f60e11b808252602091828180612dfe308a8a84016145bf565b03818a5afa908115611da2579088918a91612ea1575b5010612e275787610fe18830888a6142b4565b81908398949795985196879182528180612e44308d8d84016145bf565b03915afa9283156104c95792612e6f575051630c95cf2760e11b81529485946109319450850161480b565b90915083813d8311612e9a575b612e868183613823565b810103126104bd57610931925190386116df565b503d612e7c565b809250848092503d8311612ecb575b612eba8183613823565b810103126104bd5787905138612e14565b503d612eb0565b51633728b83d60e01b8152908101849052602490fd5b90516313053d9360e21b815291820152602490fd5b815163961c9a4f60e01b8152808401869052602490fd5b505163b693a60960e01b8152fd5b5091903461055d578060031936011261055d576020612b1093612f43613754565b612f4b61422a565b600754845163159c713360e11b81529687936001600160a01b03909216928492839291602435918401613eb0565b503461044f57602036600319011261044f57816020936001923581526000805160206148ca83398151915285522001549051908152f35b50503461055d578160031936011261055d5760085490516001600160a01b039091168152602090f35b50903461044f578060031936011261044f57612ff3613754565b91612ffc61376a565b9061300561422a565b61300d6139b6565b6001600160a01b0384811693908415612efd5783169485156130e05761303161422a565b61303b8482614746565b6130c75750838652600a6020528520805491600160401b8310156130b457508161306e91600161308d9594018155613796565b90919082549060031b9160018060a01b03809116831b921b1916179055565b7f2c79891dd909910a9ed2116eb868a4783a4abeb6da7c8dc217cd5b198b329b5d8380a380f35b634e487b7160e01b875260419052602486fd5b610931915193849363aebbe4f960e01b855284016145bf565b610931915193849363188fe79360e21b855284016145bf565b50503461055d578160031936011261055d57602090517f0792b37891b8244bb8149106fc05e84f10f266ef581c099bf3d880350e979b2f8152f35b50823461120b576020908160031936011261120b576001600160a01b03613159613754565b1690818152600d835282858220549460248751809581936370a0823160e01b835230908301525afa9081156131d55784916131a4575b6131999250613f89565b908351928352820152f35b50508181813d83116131ce575b6131bb8183613823565b810103126104bd5782613199915161318f565b503d6131b1565b8551903d90823e3d90fd5b50503461055d578160031936011261055d5760075490516001600160a01b039091168152602090f35b50913461120b57606036600319011261120b57613224613754565b92602493843591604435613236614255565b61323e61422a565b60015486516373bed91960e11b815233848201526020986001600160a01b0393929091908a9082908490829088165afa9081156135185788916134fb575b50156134eb5761328a61422a565b60065460ff8116156134db5786156134c657839060081c1698899289516313a9822560e31b815282818581898c1698898c8301525afa9081156134bc578a9161349f575b501561348957818a51809c63146f4ea360e21b825281806132f28d8d8d8401613eb0565b03915afa92831561347f578993613449575b88999a9b50826133188561333b9a9b613f89565b6007548e51633e5541f160e01b81529a8b92918a1691839182918f838f01613eb0565b03915afa97881561343f578b9861340c575b508188106133f15750509187918561337194838c525261191b8b8b20918254614285565b85541690813b15610cf45791859161339f938389518096819582946340c10f1960e01b845233908401613eb0565b03925af1801561241d576133ce575b5061198060008051602061488a8339815191529394519283923384614292565b60008051602061488a833981519152936133ea611980926137c4565b93506133ae565b6044918791898e519363658ec5dd60e11b8552840152820152fd5b9097508281813d8311613438575b6134248183613823565b810103126134345751963861334d565b8a80fd5b503d61341a565b8c513d8d823e3d90fd5b9250818b813d8311613478575b6134608183613823565b8101031261347457995198998a9992613304565b8880fd5b503d613456565b8a513d8b823e3d90fd5b8951639d42b4b360e01b81528087018590528390fd5b6134b69150833d8511611a7b57611a6d8183613823565b386132ce565b8b513d8c823e3d90fd5b508751633728b83d60e01b8152808501879052fd5b885163bb60b89360e01b81528590fd5b875163110781d160e31b81528490fd5b61351291508a3d8c11611a7b57611a6d8183613823565b3861327c565b89513d8a823e3d90fd5b503461044f57602036600319011261044f5761353c613754565b61354461422a565b61354c61394e565b6001600160a01b0316918215613575575050600980546001600160a01b03191691909117905580f35b516348db2b6f60e11b8152fd5b50913461120b578060031936011261120b578151918160025492600184811c91818616958615613662575b602096878510811461364f578899509688969785829a5291826000146136285750506001146135ea575b505050610651929161149d910385613823565b9190869350600283528383205b828410613610575050508201018161149d6106516135d7565b8054848a0186015288955087949093019281016135f7565b60ff19168782015293151560051b8601909301935084925061149d915061065190506135d7565b634e487b7160e01b835260228a52602483fd5b92607f16926135ad565b50503461055d578060031936011261055d57613686613754565b6001600160a01b039081168352600a6020528183208054602435949085101561120b57506020936136b691613796565b92905490519260031b1c168152f35b50503461055d578160031936011261055d57602090517f6c0757dc3e6b28b2580c03fd9e96c274acf4f99d91fbec9b418fa1d70604ff1c8152f35b9250503461044f57602036600319011261044f573563ffffffff60e01b811680910361044f5760209250637965db0b60e01b8114908115613743575b5015158152f35b6301ffc9a760e01b1490503861373c565b600435906001600160a01b03821682036104bd57565b602435906001600160a01b03821682036104bd57565b606435906001600160a01b03821682036104bd57565b80548210156137ae5760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b6001600160401b0381116137d757604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176137d757604052565b602081019081106001600160401b038211176137d757604052565b90601f801991011681019081106001600160401b038211176137d757604052565b919082519283825260005b848110613870575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161384f565b60609060031901126104bd576001600160a01b039060043582811681036104bd579160243590811681036104bd579060443590565b6001600160401b0381116137d757601f01601f191660200190565b9291926138e0826138b9565b916138ee6040519384613823565b8294818452818301116104bd578281602093846000960137010152565b9080601f830112156104bd57816020613926933591016138d4565b90565b9092608092613926959483526020830152151560408201528160608201520190613844565b3360009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260409020546000805160206148aa8339815191529060ff16156139985750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b3360009081527f4e5d4d14b1d64b65403760d275670011644f8f7998f1ef964b0082bdadeaa41460205260409020547f0792b37891b8244bb8149106fc05e84f10f266ef581c099bf3d880350e979b2f9060ff16156139985750565b3360009081527f75442b0a96088b5456bc4ed01394c96a4feec0f883c9494257d76b96ab1c9b6b60205260409020547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a9060ff16156139985750565b806000526000805160206148ca83398151915260205260406000203360005260205260ff60406000205416156139985750565b6001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120549091906000805160206148ca8339815191529060ff16613b2a578280526020526040822081835260205260408220600160ff19825416179055339160008051602061482a8339815191528180a4600190565b505090565b6001600160a01b031660008181527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260408120549091906000805160206148aa833981519152906000805160206148ca8339815191529060ff16613bc7578184526020526040832082845260205260408320600160ff1982541617905560008051602061482a833981519152339380a4600190565b50505090565b6001600160a01b031660008181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a8602052604081205490919060008051602061484a833981519152906000805160206148ca8339815191529060ff16613bc7578184526020526040832082845260205260408320600160ff1982541617905560008051602061482a833981519152339380a4600190565b906000918083526000805160206148ca83398151915280602052604084209260018060a01b03169283855260205260ff60408520541615600014613bc7578184526020526040832082845260205260408320600160ff1982541617905560008051602061482a833981519152339380a4600190565b906000918083526000805160206148ca83398151915280602052604084209260018060a01b03169283855260205260ff604085205416600014613bc757818452602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4600190565b3d15613d88573d90613d6e826138b9565b91613d7c6040519384613823565b82523d6000602084013e565b606090565b90613db45750805115613da257805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580613de7575b613dc5575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15613dbd565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613e1f57565b604051631afcd79f60e31b8152600490fd5b60405190613e3e826137ed565b601682527511195c1bdcda5d081a5cc81b9bdd08195b98589b195960521b6020830152565b908160209103126104bd575180151581036104bd5790565b60405190613e88826137ed565b6019825278151bdad95b8819195c1bdcda5d081b9bdd08195b98589b1959603a1b6020830152565b6001600160a01b039091168152602081019190915260400190565b60009060033d11613ed857565b905060046000803e60005160e01c90565b600060443d1061392657604051600319913d83016004833e81516001600160401b03918282113d602484011117613f4657818401948551938411613f4e573d85010160208487010111613f46575061392692910160200190613823565b949350505050565b50949350505050565b60405190613f64826137ed565b60168252754572726f722063616c63756c6174696e67206665657360501b6020830152565b91908203918211613f9657565b634e487b7160e01b600052601160045260246000fd5b6006549160ff83161561421657604080516313a9822560e31b81526001600160a01b03848116600483015260209592949260081c8116918681602481865afa90811561420b576000916141ee575b50156141d75783156141a357858551809363146f4ea360e21b82528180614025898960048401613eb0565b03915afa60009281614174575b5061407d57505050505050614045613ecb565b6308c379a014614061575b600090600090600090613926613f57565b614069613ee9565b806140745750614050565b60009182918291565b6140ae9261408d87938096613f89565b9160075416908651809581948293633e5541f160e01b845260048401613eb0565b03915afa60009181614145575b5061412d5750506140ca613ecb565b6308c379a01461410f575b600092600092774572726f722063616c63756c6174696e672073686172657360401b6000935191614105836137ed565b6018835282015290565b614117613ee9565b8061412257506140d5565b600093849350839250565b909250926001915161413e81613808565b6000815290565b90918582813d831161416d575b61415c8183613823565b8101031261120b57505190386140bb565b503d614152565b90928782813d831161419c575b61418b8183613823565b8101031261120b5750519138614032565b503d614181565b505050506000926000926d125b9d985b1a5908185b5bdd5b9d60921b60009351916141cd836137ed565b600e835282015290565b505050505050600090600090600090613926613e7b565b6142059150873d8911611a7b57611a6d8183613823565b38613ffa565b86513d6000823e3d90fd5b505050600090600090600090613926613e31565b60ff6000805160206148ea833981519152541661424357565b60405163d93c066560e01b8152600490fd5b60008051602061490a83398151915260028154146142735760029055565b604051633ee5aeb560e01b8152600490fd5b91908201809211613f9657565b6001600160a01b03918216815291166020820152604081019190915260600190565b906142ea906142dc6142ef956040519586936323b872dd60e01b602086015260248501614292565b03601f198101845283613823565b6142f1565b565b60008061431a9260018060a01b03169360208151910182865af1614313613d5d565b9083613d8d565b8051908115159182614348575b50506143305750565b60249060405190635274afe760e01b82526004820152fd5b61435b9250602080918301019101613e63565b153880614327565b906006549160ff83161561421657604080516313a9822560e31b81526001600160a01b038381166004830152602095929460089390931c81169392918681602481885afa90811561420b576000916145a2575b50156141d757858215614566576143e992600092600754168751808096819463159c713360e11b83528960048401613eb0565b03915afa90918282614534575b505061446457505050614407613ecb565b6308c379a014614451575b6000926000927f4572726f722063616c63756c6174696e6720746f6b656e20616d6f756e7400006000935191614447836137ed565b601e835282015290565b614459613ee9565b806141225750614412565b9380916144889386918651809681948293637b897f3960e01b845260048401613eb0565b03915afa918291600093614503575b50506144dd5750506144a7613ecb565b6308c379a0146144c1575b90600090600090613926613f57565b6144c9613ee9565b806144d457506144b2565b90916000918291565b806144ea91949293614285565b90600192516144f881613808565b600081529193929190565b8181949293943d831161452d575b61451b8183613823565b8101031261120b575051903880614497565b503d614511565b909192508682813d831161455f575b61454d8183613823565b8101031261120b5750519038806143f6565b503d614543565b505050505060009260009274125b9d985b1a59081cda185c995cc8185b5bdd5b9d605a1b6000935191614598836137ed565b6015835282015290565b6145b99150873d8911611a7b57611a6d8183613823565b386143b6565b6001600160a01b0391821681529116602082015260400190565b6000198114613f965760010190565b90916001600160a01b03808316801561472e5781851691821561471257600090828252600a60205260408220825b8154808210156146f657838761462c8486613796565b929054600393841b1c161461464b575050614646906145d9565b614616565b9495969798509850600092919219988981019081116146e2579061306e836146766146849487613796565b905490881b1c169185613796565b81549788156146ce577f1c0cdcc74010449d4477f9576aaf31cee9e18d2611031462fcd5bf5329dec88e9596979801926146be8484613796565b81939154921b1b191690555580a3565b634e487b7160e01b85526031600452602485fd5b634e487b7160e01b86526011600452602486fd5b60405163188fe79360e21b8152806109318b8d600484016145bf565b60405163188fe79360e21b8152806109318789600484016145bf565b6024906040519063961c9a4f60e01b82526004820152fd5b9060018060a01b03806000931683526020600a815260408420604051808284829454938481520190885284882092885b868282106147cc5750505061478d92500382613823565b845b81518110156147c45783838260051b8401015116848616146147b9576147b4906145d9565b61478f565b505050505050600190565b505050505090565b85548916845260019586019587955093019201614776565b6142ea6142ef93926142dc60405194859263a9059cbb60e01b602085015260248401613eb0565b604091949392606082019560018060a01b031682526020820152015256fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a797667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220be2fce2831af35267343bb59637196e7fb5fc02321f7ed193c9efa949d4b67c464736f6c63430008140033