0 txs
7 calls
constructor
constructor(address _asset, address _psm, address _feeProvider, address _feeRecipient)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
feePrecision
viewfunction feePrecision() view returns (uint32)
feeProvider
viewfunction feeProvider() view returns (address)
feeRecipient
viewfunction feeRecipient() view returns (address)
getBalanceInUnderlying
viewfunction getBalanceInUnderlying(address account) view returns (uint256)
getDepositFee
viewfunction getDepositFee(address account) view returns (uint32)
getLastTimeManagementFeeCollected
viewfunction getLastTimeManagementFeeCollected() view returns (uint256)
getManagementFee
viewfunction getManagementFee() view returns (uint32)
getPerformanceFee
viewfunction getPerformanceFee(address account) view returns (uint32)
getProfit
viewfunction getProfit(address account) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getWaterline
viewfunction getWaterline(address account) view returns (uint256)
getWithdrawalFee
viewfunction getWithdrawalFee(address account) view returns (uint32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (bytes32)
name
viewfunction name() view returns (string)
paused
viewfunction paused() view returns (bool)
psm
viewfunction psm() view returns (address)
quoteWithdrawalFee
viewfunction quoteWithdrawalFee(address account) view returns (uint256)
sharePrice
viewfunction sharePrice() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
susds
viewfunction susds() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
underlyingTVL
viewfunction underlyingTVL() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
collectManagementFee
nonpayablefunction collectManagementFee()
collectPerformanceFee
nonpayablefunction collectPerformanceFee(address[] accounts)
deposit
nonpayablefunction deposit(uint256 assets, address receiver, uint256 minShares) returns (uint256 shares)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address[] accounts)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin, string name, string symbol, address manager)
pause
nonpayablefunction pause()
redeem
nonpayablefunction redeem(uint256 shares, address receiver, address owner, uint256 minAssets) returns (uint256 assets)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
unpause
nonpayablefunction unpause()
updateFeeDiscountDeposit
nonpayablefunction updateFeeDiscountDeposit(uint256 assets, address receiver, uint256 minShares, uint256 stakedAmount, uint256 deadline, bytes signature) returns (uint256 shares)
withdrawFunds
nonpayablefunction withdrawFunds(address token)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Deposit
event Deposit(address indexed sender, address indexed receiver, uint256 assets, uint256 shares, uint256 depositFee, uint256 totalSupplyBefore, uint256 tvlBefore)
Initialized
event Initialized(uint64 version)
ManagementFeeCollected
event ManagementFeeCollected(uint256 shares)
Paused
event Paused(address account)
PerformanceFeeCollected
event PerformanceFeeCollected(address indexed owner, uint256 fee)
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)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 shares, uint256 assets, uint256 withdrawalFee, uint256 totalSupplyBefore, uint256 tvlBefore)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EnforcedPause
error EnforcedPause()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
InvalidTokenToWithdraw
error InvalidTokenToWithdraw(address token)
NotInitializing
error NotInitializing()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x610160604052348015610010575f80fd5b50604051613e59380380613e5983398101604081905261002f91610293565b838282826001600160a01b03166080816001600160a01b031681525050826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610088573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ac91906102ef565b60ff1660a0526001600160a01b0382161561013f576001600160a01b0380831660c081905290821660e0526040805163094df4c960e21b81529051632537d324916004808201926020929091908290030181865afa158015610110573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101349190610316565b63ffffffff16610100525b5050506001600160a01b0383166101208190526040805163162e3c6760e21b815290516358b8f19c916004808201926020929091908290030181865afa15801561018b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101af9190610339565b6001600160a01b0316610140526101c46101cd565b50505050610354565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561021d5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461027c5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6001600160a01b038116811461027c575f80fd5b5f805f80608085870312156102a6575f80fd5b84516102b18161027f565b60208601519094506102c28161027f565b60408601519093506102d38161027f565b60608601519092506102e48161027f565b939692955090935050565b5f602082840312156102ff575f80fd5b815160ff8116811461030f575f80fd5b9392505050565b5f60208284031215610326575f80fd5b815163ffffffff8116811461030f575f80fd5b5f60208284031215610349575f80fd5b815161030f8161027f565b60805160a05160c05160e05161010051610120516101405161393a61051f5f395f8181610565015281816107e60152818161083b01528181610fad01528181611113015281816124f20152818161271a015261278401525f818161036c015281816107c001528181610c8601528181610f7a01528181610fcf0152818161248601526126f301525f8181610487015281816109eb01528181610ac40152818161143d01528181611a52015281816123d9015281816129320152612acc01525f818161052b015281816114cd01528181611c550152818161245001528181612a200152612bb501525f81816105040152818161095e01528181610a1301528181610aec01528181610e2301528181611347015281816113b60152818161152e015281816116ac015281816118a20152818161197101528181611a7901528181611d58015281816123610152818161295a0152612aef01525f818161045801528181610c5e015281816112410152818161128501528181611c810152611cd101525f81816104d30152818161080701528181610f580152818161167901528181611dba0152818161242e015281816124ad0152818161273b015281816129fe0152612b93015261393a5ff3fe608060405234801561000f575f80fd5b50600436106102da575f3560e01c80635c975abb116101835780639f40a7b3116100e8578063d547741f11610093578063ec87621c1161006e578063ec87621c14610708578063f76ee29a1461072f578063f78b881214610742575f80fd5b8063d547741f1461068b578063dd62ed3e1461069e578063de0d3e77146106f5575f80fd5b8063bc157ac1116100c3578063bc157ac114610652578063c600e1dc14610665578063d3fa348314610678575f80fd5b80639f40a7b314610625578063a217fddf14610638578063a9059cbb1461063f575f80fd5b806387269729116101485780639b2eb34d116101235780639b2eb34d146106025780639c016ffd146106155780639c2b1a951461061d575f80fd5b806387269729146105df57806391d14854146105e757806395d89b41146105fa575f80fd5b80635c975abb14610587578063613d25bb1461059e57806368742da6146105b157806370a08231146105c45780638456cb59146105d7575f80fd5b806323b872dd1161024357806338d52e0f116101ee57806346904840116101c957806346904840146105265780635722dee01461054d57806358b8f19c14610560575f80fd5b806338d52e0f146104d15780633f4ba83a146104f75780634066fdea146104ff575f80fd5b8063313ce5671161021e578063313ce5671461045157806335ff1e281461048257806336568abe146104be575f80fd5b806323b872dd146103fd578063248a9ca3146104105780632f2ff15d1461043e575f80fd5b806304bda262116102a3578063095ea7b31161027e578063095ea7b3146103c35780630b7b3dc7146103d657806318160ddd146103e9575f80fd5b806304bda2621461036757806306fdde03146103a657806308f03f54146103bb575f80fd5b8062eebff1146102de57806301c1dfba1461031457806301e1d1141461032957806301ffc9a71461033157806303949bf914610354575b5f80fd5b7f3723283c6c153be31b346222d4cdfc82d474472705dbc1bceef0b3066f389b01545b6040519081526020015b60405180910390f35b6103276103223660046130f0565b610755565b005b6103016107b5565b61034461033f366004613194565b610925565b604051901515815260200161030b565b6103016103623660046131bb565b61095b565b61038e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161030b565b6103ae610b8f565b60405161030b9190613202565b610301610c4f565b6103446103d1366004613214565b610d18565b6103016103e43660046131bb565b610d2f565b5f8051602061388583398151915254610301565b61034461040b36600461323c565b610d5f565b61030161041e366004613276565b5f9081525f805160206138a5833981519152602052604090206001015490565b61032761044c36600461328d565b610d84565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161030b565b6104a97f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030b565b6103276104cc36600461328d565b610dba565b7f000000000000000000000000000000000000000000000000000000000000000061038e565b610327610ded565b61038e7f000000000000000000000000000000000000000000000000000000000000000081565b61038e7f000000000000000000000000000000000000000000000000000000000000000081565b6104a961055b3660046131bb565b610e02565b61038e7f000000000000000000000000000000000000000000000000000000000000000081565b5f805160206138c58339815191525460ff16610344565b6103276105ac36600461332e565b610e8f565b6103276105bf3660046131bb565b61105f565b6103016105d23660046131bb565b6111ea565b6103276111ff565b610301611211565b6103446105f536600461328d565b6112b2565b6103ae6112e8565b6104a96106103660046131bb565b611326565b610327611378565b6104a961152b565b6103016106333660046133b3565b6115ac565b6103015f81565b61034461064d366004613214565b61162d565b6103016106603660046133f4565b61163a565b6103016106733660046131bb565b611827565b610301610686366004613416565b611889565b61032761069936600461328d565b611920565b6103016106ac366004613497565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104a96107033660046131bb565b611950565b6103017f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b61032761073d3660046130f0565b6119a2565b6103016107503660046131bb565b611ccb565b5f61075f81611d1c565b5f5b82518110156107b0575f83828151811061077d5761077d6134bf565b602002602001015190505f610791826111ea565b905080156107a6576107a4818384611d26565b505b5050600101610761565b505050565b5f6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001662d8088a7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610888573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ac91906134d3565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381865afa1580156108fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092091906134d3565b905090565b5f6001600160e01b03198216637965db0b60e01b148061095557506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661099157505f919050565b5f805160206138e58339815191525f6109a984611ccb565b6001600160a01b0385165f9081526020849052604081205491925081831115610aa557604051639b2eb34d60e01b81526001600160a01b0387811660048301527f000000000000000000000000000000000000000000000000000000000000000063ffffffff16917f000000000000000000000000000000000000000000000000000000000000000090911690639b2eb34d90602401602060405180830381865afa158015610a5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a7e91906134fd565b63ffffffff16610a8e848661352a565b610a98919061353d565b610aa29190613554565b90505b6040516302b916f760e51b81526001600160a01b0387811660048301527f000000000000000000000000000000000000000000000000000000000000000063ffffffff16917f000000000000000000000000000000000000000000000000000000000000000090911690635722dee090602401602060405180830381865afa158015610b33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5791906134fd565b63ffffffff16610b67838661352a565b610b71919061353d565b610b7b9190613554565b610b859082613573565b9695505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f8051602061386583398151915291610bcd90613586565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf990613586565b8015610c445780601f10610c1b57610100808354040283529160200191610c44565b820191905f5260205f20905b815481529060010190602001808311610c2757829003601f168201915b505050505091505090565b5f670de0b6b3a7640000610c847f0000000000000000000000000000000000000000000000000000000000000000600a613699565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0491906134d3565b610d0e919061353d565b6109209190613554565b5f33610d25818585611e62565b5060019392505050565b5f805f805160206138e58339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f33610d6c858285611e6f565b610d77858585611f03565b60019150505b9392505050565b5f8281525f805160206138a58339815191526020526040902060010154610daa81611d1c565b610db48383611f60565b50505050565b6001600160a01b0381163314610de35760405163334bd91960e11b815260040160405180910390fd5b6107b08282612001565b5f610df781611d1c565b610dff61207a565b50565b6040516302b916f760e51b81526001600160a01b0382811660048301525f917f000000000000000000000000000000000000000000000000000000000000000090911690635722dee0906024015b602060405180830381865afa158015610e6b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095591906134fd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f81158015610ed45750825b90505f8267ffffffffffffffff166001148015610ef05750303b155b905081158015610efe575080155b15610f1c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610f4b57845468ff00000000000000001916600160401b1785555b610fa06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000005f196120d9565b610ff56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000005f196120d9565b610fff8888612196565b61100989876121a8565b831561105457845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b5f61106981611d1c565b6001600160a01b038216611111576040515f90339047908381818185875af1925050503d805f81146110b6576040519150601f19603f3d011682016040523d82523d5f602084013e6110bb565b606091505b50509050806107b05760405162461bcd60e51b815260206004820152601260248201527f6661696c656420746f2073656e6420455448000000000000000000000000000060448201526064015b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908316146111c6576040516370a0823160e01b81523060048201526111c29033906001600160a01b038516906370a0823190602401602060405180830381865afa15801561118d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b191906134d3565b6001600160a01b038516919061221d565b5050565b60405163b8f73f4b60e01b81526001600160a01b0383166004820152602401611108565b5f805f80516020613865833981519152610d40565b5f61120981611d1c565b610dff61224e565b5f8061121b6107b5565b90505f6112335f805160206138858339815191525490565b9050801561128057806112677f0000000000000000000000000000000000000000000000000000000000000000600a613699565b611271908461353d565b61127b9190613554565b6112ab565b6112ab7f0000000000000000000000000000000000000000000000000000000000000000600a613699565b9250505090565b5f9182525f805160206138a5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061386583398151915291610bcd90613586565b604051639b2eb34d60e01b81526001600160a01b0382811660048301525f917f000000000000000000000000000000000000000000000000000000000000000090911690639b2eb34d90602401610e50565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086113a281611d1c565b5f5f805160206138e583398151915290505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639c2b1a956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611410573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143491906134fd565b90505f611461827f00000000000000000000000000000000000000000000000000000000000000006136a7565b63ffffffff166301e1338084600101544261147c919061352a565b8463ffffffff166114985f805160206138858339815191525490565b6114a2919061353d565b6114ac919061353d565b6114b69190613554565b6114c09190613554565b42600185015590506114f27f000000000000000000000000000000000000000000000000000000000000000082612296565b6040518181527f147fac6415bee3006ba6002a9a6636f492d311690c9e52a2421afc6392e0fb959060200160405180910390a150505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639c2b1a956040518163ffffffff1660e01b8152600401602060405180830381865afa158015611588573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092091906134fd565b5f336001600160a01b038416146115c8576115c8833387611e6f565b6115d3858585611d26565b9050818110156116255760405162461bcd60e51b815260206004820152601060248201527f435942524f3a206d696e417373657473000000000000000000000000000000006044820152606401611108565b949350505050565b5f33610d25818585611f03565b5f6116436122ca565b835f0361165157505f610d7d565b5f61165a6122fc565b90505f6116725f805160206138858339815191525490565b90506116a97f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333089612305565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316156116e7576116e28761233e565b6116ea565b865f5b90975090506116f88761247c565b5f6117016122fc565b90505f61170e858361352a565b905084158061171b575083155b611739578461172a828661353d565b6117349190613554565b61173b565b805b9550868610156117795760405162461bcd60e51b81526020600482015260096024820152686d696e53686172657360b81b6044820152606401611108565b6001600160a01b0388165f9081525f805160206138e58339815191526020819052604082208054919284926117af908490613573565b909155506117bf90508988612296565b6040805183815260208101899052808201869052606081018790526080810188905290516001600160a01b038b169133917f193fa1e51a172de243b75f244207219f0fc534504ae9142df54912cc47f5838e9181900360a00190a35050505050509392505050565b5f5f805160206138e58339815191528161184084611ccb565b6001600160a01b0385165f908152602084905260409020549091508111611867575f611625565b6001600160a01b0384165f90815260208390526040902054611625908261352a565b6040516317fa36e760e21b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635fe8db9c906118dd9033908890889088906004016136c3565b5f604051808303815f87803b1580156118f4575f80fd5b505af1158015611906573d5f803e3d5ffd5b5050505061191587878761163a565b979650505050505050565b5f8281525f805160206138a5833981519152602052604090206001015461194681611d1c565b610db48383612001565b60405163de0d3e7760e01b81526001600160a01b0382811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063de0d3e7790602401610e50565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086119cc81611d1c565b5f805160206138e58339815191525f5b8351811015610db4575f611a088583815181106119fb576119fb6134bf565b6020026020010151611ccb565b9050825f015f868481518110611a2057611a206134bf565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054811115611cc2575f7f000000000000000000000000000000000000000000000000000000000000000063ffffffff167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639b2eb34d888681518110611ab857611ab86134bf565b60200260200101516040518263ffffffff1660e01b8152600401611aeb91906001600160a01b0391909116815260200190565b602060405180830381865afa158015611b06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b2a91906134fd565b63ffffffff16855f015f898781518110611b4657611b466134bf565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205484611b79919061352a565b611b83919061353d565b611b8d9190613554565b9050611b99818361352a565b845f015f888681518110611baf57611baf6134bf565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2081905550858381518110611bec57611bec6134bf565b60200260200101516001600160a01b03167f15edf35fb4e11a69b84fe0957af501729657cbb5afb5e47bc896438dff4e5dce82604051611c2e91815260200190565b60405180910390a2611cc0868481518110611c4b57611c4b6134bf565b60200260200101517f0000000000000000000000000000000000000000000000000000000000000000611c7c611211565b611ca77f0000000000000000000000000000000000000000000000000000000000000000600a613699565b611cb1908661353d565b611cbb9190613554565b612576565b505b506001016119dc565b5f611cf77f0000000000000000000000000000000000000000000000000000000000000000600a613699565b611cff611211565b611d08846111ea565b611d12919061353d565b6109559190613554565b610dff81336126af565b5f805f611d316122fc565b90505f611d495f805160206138858339815191525490565b9050611d54876126e8565b93507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615611da357611d90848887612891565b509350611d9d8486612aa2565b90945092505b611dad8588612be2565b611de16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016878661221d565b846001600160a01b0316866001600160a01b0316611dfc3390565b604080518b81526020810189905290810187905260608101859052608081018690526001600160a01b0391909116907fd4594021cdd03e2c0abc8108cba8d75a347eaf64acaddede25df63f6ef9e24209060a00160405180910390a45050509392505050565b6107b08383836001612c16565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f198114610db45781811015611ef557604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401611108565b610db484848484035f612c16565b6001600160a01b038316611f2c57604051634b637e8f60e11b81525f6004820152602401611108565b6001600160a01b038216611f555760405163ec442f0560e01b81525f6004820152602401611108565b6107b0838383612cfa565b5f5f805160206138a5833981519152611f7984846112b2565b611ff8575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611fae3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610955565b5f915050610955565b5f5f805160206138a583398151915261201a84846112b2565b15611ff8575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610955565b612082612d72565b5f805160206138c5833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261212a8482612da1565b610db4576040516001600160a01b0384811660248301525f604483015261218c91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612e42565b610db48482612e42565b61219e612ea3565b6111c28282612eec565b6121b0612ea3565b6121b8612f3c565b6121c0612f44565b6121ca5f83611f60565b506121f57f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882611f60565b5050427f3723283c6c153be31b346222d4cdfc82d474472705dbc1bceef0b3066f389b015550565b6040516001600160a01b038381166024830152604482018390526107b091859182169063a9059cbb9060640161215a565b6122566122ca565b5f805160206138c5833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336120bb565b6001600160a01b0382166122bf5760405163ec442f0560e01b81525f6004820152602401611108565b6111c25f8383612cfa565b5f805160206138c58339815191525460ff16156122fa5760405163d93c066560e01b815260040160405180910390fd5b565b5f6109206107b5565b6040516001600160a01b038481166024830152838116604483015260648201839052610db49186918216906323b872dd9060840161215a565b604051632b2d6fbd60e21b81523360048201525f90819081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063acb5bef4906024016060604051808303815f875af11580156123a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123cb91906136f0565b505063ffffffff90811691507f000000000000000000000000000000000000000000000000000000000000000016612403828661353d565b61240d9190613554565b905080156124755761241f818561352a565b93506124756001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008361221d565b9293915050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016631a019e377f000000000000000000000000000000000000000000000000000000000000000060405160e083901b6001600160e01b03191681526001600160a01b0391821660048201527f00000000000000000000000000000000000000000000000000000000000000009091166024820152604481018490525f6064820181905230608483015260a482015260c4016020604051808303815f875af1158015612552573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c291906134d3565b5f805160206138658339815191526001600160a01b0384166125b05781816002015f8282546125a59190613573565b909155506126209050565b6001600160a01b0384165f90815260208290526040902054828110156126025760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401611108565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b03831661263e57600281018054839003905561265c565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126a191815260200190565b60405180910390a350505050565b6126b982826112b2565b6111c25760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401611108565b5f6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016631a019e377f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061276f5f805160206138858339815191525490565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156127d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f591906134d3565b6127ff908861353d565b6128099190613554565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201525f6064820181905230608483015260a482015260c4016020604051808303815f875af115801561286d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095591906134d3565b5f805f805160206138e5833981519152816128ab856111ea565b6001600160a01b0386165f908152602084905260409020546128ce90889061353d565b6128d89190613554565b6001600160a01b0386165f9081526020849052604081208054929350839290919061290490849061352a565b909155505f905081881115612a8957604051639b2eb34d60e01b81526001600160a01b0387811660048301527f000000000000000000000000000000000000000000000000000000000000000063ffffffff16917f000000000000000000000000000000000000000000000000000000000000000090911690639b2eb34d90602401602060405180830381865afa1580156129a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c591906134fd565b63ffffffff166129d5848b61352a565b6129df919061353d565b6129e99190613554565b90508015612a8957612a456001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008361221d565b856001600160a01b03167f15edf35fb4e11a69b84fe0957af501729657cbb5afb5e47bc896438dff4e5dce82604051612a8091815260200190565b60405180910390a25b612a93818961352a565b9450925050505b935093915050565b6040516302b916f760e51b81526001600160a01b0382811660048301525f918291829163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016917f00000000000000000000000000000000000000000000000000000000000000001690635722dee090602401602060405180830381865afa158015612b34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b5891906134fd565b612b689063ffffffff168761353d565b612b729190613554565b90508015612bda57612b84818661352a565b9450612bda6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000008361221d565b939492505050565b6001600160a01b038216612c0b57604051634b637e8f60e11b81525f6004820152602401611108565b6111c2825f83612cfa565b5f805160206138658339815191526001600160a01b038516612c4d5760405163e602df0560e01b81525f6004820152602401611108565b6001600160a01b038416612c7657604051634a1406b160e11b81525f6004820152602401611108565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115612cf357836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051612cea91815260200190565b60405180910390a35b5050505050565b6001600160a01b03831615801590612d1a57506001600160a01b03821615155b15612d675760405162461bcd60e51b815260206004820152601b60248201527f435942524f3a205472616e73666572206e6f7420616c6c6f77656400000000006044820152606401611108565b6107b0838383612576565b5f805160206138c58339815191525460ff166122fa57604051638dfc202b60e01b815260040160405180910390fd5b5f805f846001600160a01b031684604051612dbc9190613730565b5f604051808303815f865af19150503d805f8114612df5576040519150601f19603f3d011682016040523d82523d5f602084013e612dfa565b606091505b5091509150818015612e24575080511580612e24575080806020019051810190612e249190613746565b8015612e3957505f856001600160a01b03163b115b95945050505050565b5f612e566001600160a01b03841683612f54565b905080515f14158015612e7a575080806020019051810190612e789190613746565b155b156107b057604051635274afe760e01b81526001600160a01b0384166004820152602401611108565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166122fa57604051631afcd79f60e31b815260040160405180910390fd5b612ef4612ea3565b5f805160206138658339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03612f2d84826137a9565b5060048101610db483826137a9565b6122fa612ea3565b612f4c612ea3565b6122fa612f61565b6060610d7d83835f612f81565b612f69612ea3565b5f805160206138c5833981519152805460ff19169055565b606081471015612fa65760405163cd78605960e01b8152306004820152602401611108565b5f80856001600160a01b03168486604051612fc19190613730565b5f6040518083038185875af1925050503d805f8114612ffb576040519150601f19603f3d011682016040523d82523d5f602084013e613000565b606091505b5091509150610b858683836060826130205761301b82613067565b610d7d565b815115801561303757506001600160a01b0384163b155b1561306057604051639996b31560e01b81526001600160a01b0385166004820152602401611108565b5080610d7d565b8051156130775780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156130cd576130cd613090565b604052919050565b80356001600160a01b03811681146130eb575f80fd5b919050565b5f60208284031215613100575f80fd5b813567ffffffffffffffff811115613116575f80fd5b8201601f81018413613126575f80fd5b803567ffffffffffffffff81111561314057613140613090565b8060051b613150602082016130a4565b9182526020818401810192908101908784111561316b575f80fd5b6020850194505b8385101561191557613183856130d5565b825260209485019490910190613172565b5f602082840312156131a4575f80fd5b81356001600160e01b031981168114610d7d575f80fd5b5f602082840312156131cb575f80fd5b610d7d826130d5565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610d7d60208301846131d4565b5f8060408385031215613225575f80fd5b61322e836130d5565b946020939093013593505050565b5f805f6060848603121561324e575f80fd5b613257846130d5565b9250613265602085016130d5565b929592945050506040919091013590565b5f60208284031215613286575f80fd5b5035919050565b5f806040838503121561329e575f80fd5b823591506132ae602084016130d5565b90509250929050565b5f8067ffffffffffffffff8411156132d1576132d1613090565b50601f8301601f19166020016132e6816130a4565b9150508281528383830111156132fa575f80fd5b828260208301375f602084830101529392505050565b5f82601f83011261331f575f80fd5b610d7d838335602085016132b7565b5f805f8060808587031215613341575f80fd5b61334a856130d5565b9350602085013567ffffffffffffffff811115613365575f80fd5b61337187828801613310565b935050604085013567ffffffffffffffff81111561338d575f80fd5b61339987828801613310565b9250506133a8606086016130d5565b905092959194509250565b5f805f80608085870312156133c6575f80fd5b843593506133d6602086016130d5565b92506133e4604086016130d5565b9396929550929360600135925050565b5f805f60608486031215613406575f80fd5b83359250613265602085016130d5565b5f805f805f8060c0878903121561342b575f80fd5b8635955061343b602088016130d5565b945060408701359350606087013592506080870135915060a087013567ffffffffffffffff81111561346b575f80fd5b8701601f8101891361347b575f80fd5b61348a898235602084016132b7565b9150509295509295509295565b5f80604083850312156134a8575f80fd5b6134b1836130d5565b91506132ae602084016130d5565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156134e3575f80fd5b5051919050565b805163ffffffff811681146130eb575f80fd5b5f6020828403121561350d575f80fd5b610d7d826134ea565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561095557610955613516565b808202811582820484141761095557610955613516565b5f8261356e57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561095557610955613516565b600181811c9082168061359a57607f821691505b6020821081036135b857634e487b7160e01b5f52602260045260245ffd5b50919050565b6001815b6001841115612a9a578085048111156135dd576135dd613516565b60018416156135eb57908102905b60019390931c9280026135c2565b5f8261360757506001610955565b8161361357505f610955565b816001811461362957600281146136335761364f565b6001915050610955565b60ff84111561364457613644613516565b50506001821b610955565b5060208310610133831016604e8410600b8410161715613672575081810a610955565b61367e5f1984846135be565b805f190482111561369157613691613516565b029392505050565b5f610d7d60ff8416836135f9565b63ffffffff828116828216039081111561095557610955613516565b6001600160a01b0385168152836020820152826040820152608060608201525f610b8560808301846131d4565b5f805f60608486031215613702575f80fd5b61370b846134ea565b9250613719602085016134ea565b9150613727604085016134ea565b90509250925092565b5f82518060208501845e5f920191825250919050565b5f60208284031215613756575f80fd5b81518015158114610d7d575f80fd5b601f8211156107b057805f5260205f20601f840160051c8101602085101561378a5750805b601f840160051c820191505b81811015612cf3575f8155600101613796565b815167ffffffffffffffff8111156137c3576137c3613090565b6137d7816137d18454613586565b84613765565b6020601f821160018114613809575f83156137f25750848201515b5f19600385901b1c1916600184901b178455612cf3565b5f84815260208120601f198516915b828110156138385787850151825560209485019460019092019101613818565b508482101561385557868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0202dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033003723283c6c153be31b346222d4cdfc82d474472705dbc1bceef0b3066f389b00a2646970667358221220d279bdcffc6e52a37365a247157ce4f8c7d65cc5dad11774437e56aa72c64e1364736f6c634300081a0033000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda029130000000000000000000000001601843c5e9bc251a3272907010afa41fa18347e000000000000000000000000a3547c5a2a0bfc01aacfc6c2dc19336ce8d1e5a900000000000000000000000066e424337c0f888dccbcf2e0730a00a526d716f6