0 txs
2 calls
constructor
constructor()
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getExpectedShareAmount
viewfunction getExpectedShareAmount(address asset, uint256 amount) view returns (uint256 shareAmount, uint256 depositFee)
getExpectedShareAmountMultiple
viewfunction getExpectedShareAmountMultiple(address[] assets, uint256[] amounts) view returns (uint256 shareAmount, uint256 depositFee)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSupportedTokens
viewfunction getSupportedTokens() view returns (address[] tokens)
getTokenBalance
viewfunction getTokenBalance(address token) view returns (uint256 balance)
getTokenBalances
viewfunction getTokenBalances() view returns (uint256[] tokenBalances, address[] tokens, uint256 kingBalance)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isSupportedAsset
viewfunction isSupportedAsset(address asset) view returns (bool supported)
kingProtocol
viewfunction kingProtocol() view returns (address)
kingToken
viewfunction kingToken() view returns (address)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
supportedTokens
viewfunction supportedTokens(address acceptedToken) view returns (bool isAccepted)
supportedTokensList
viewfunction supportedTokensList(uint256) view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
addSupportedToken
nonpayablefunction addSupportedToken(address token)
depositMultipleToKingProtocol
nonpayablefunction depositMultipleToKingProtocol(address[] assets, uint256[] amounts) returns (uint256 shareReceived)
depositToKingProtocol
nonpayablefunction depositToKingProtocol(address asset, uint256 amount) returns (uint256 shareReceived)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, address recipient, uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin, address manager, address _kingProtocol, address _kingToken, address[] initialSupportedTokens)
pause
nonpayablefunction pause()
removeSupportedToken
nonpayablefunction removeSupportedToken(address token)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setKingProtocol
nonpayablefunction setKingProtocol(address _kingProtocol)
setKingToken
nonpayablefunction setKingToken(address _kingToken)
unpause
nonpayablefunction unpause()
withdrawKing
nonpayablefunction withdrawKing(address recipient, uint256 amount)
events
Initialized
event Initialized(uint8 version)
KingProtocolUpdated
event KingProtocolUpdated(address indexed oldProtocol, address indexed newProtocol)
KingWithdrawn
event KingWithdrawn(address indexed recipient, uint256 amount, address indexed caller)
Paused
event Paused(address account)
PauseStateChanged
event PauseStateChanged(bool paused)
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)
SupportedTokenAdded
event SupportedTokenAdded(address indexed token)
SupportedTokenRemoved
event SupportedTokenRemoved(address indexed token)
TokenAddressUpdated
event TokenAddressUpdated(string indexed tokenType, address indexed oldToken, address indexed newToken)
TokensDeposited
event TokensDeposited(address indexed asset, uint256 amount, uint256 shareReceived, address indexed caller)
Unpaused
event Unpaused(address account)
errors
ArrayLengthMismatch
error ArrayLengthMismatch()
CannotRemoveLastToken
error CannotRemoveLastToken()
InsufficientBalance
error InsufficientBalance()
TokenAlreadySupported
error TokenAlreadySupported()
TokenNotSupported
error TokenNotSupported()
UnsupportedAsset
error UnsupportedAsset()
ZeroAddressNotAllowed
error ZeroAddressNotAllowed()
ZeroAmount
error ZeroAmount()
creation bytecode
0x6080604052348015600e575f5ffd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b613527806100e05f395ff3fe608060405234801561000f575f5ffd5b50600436106101d1575f3560e01c80636d69fcaf116100fe578063a1dc90311161009e578063d547741f1161006e578063d547741f1461044c578063e63ea4081461045f578063ec87621c14610472578063f8453e7c14610499575f5ffd5b8063a1dc903114610406578063a217fddf1461041d578063c458a50d14610424578063d3c7c2c714610437575f5ffd5b80637ef81c1f116100d95780637ef81c1f146103885780638456cb591461039b57806391d14854146103a35780639be918e6146103db575f5ffd5b80636d69fcaf1461033a578063763191901461034d5780637c79a05014610360575f5ffd5b806336568abe116101745780635c975abb116101445780635c975abb146102e75780635d3546ae146102f257806363c918771461030557806368c4ac2614610318575f5ffd5b806336568abe146102a65780633aecd0e3146102b95780633f4ba83a146102cc5780634fab4836146102d4575f5ffd5b80631ff2441a116101af5780631ff2441a1461023d578063248a9ca31461025e5780632f2ff15d14610280578063331928db14610293575f5ffd5b806301ffc9a7146101d5578063081be426146101fd5780630b423aed14610228575b5f5ffd5b6101e86101e3366004612eab565b6104ac565b60405190151581526020015b60405180910390f35b60fb54610210906001600160a01b031681565b6040516001600160a01b0390911681526020016101f4565b61023b610236366004612f05565b610544565b005b61025061024b366004612f1e565b610638565b6040519081526020016101f4565b61025061026c366004612f46565b5f9081526065602052604090206001015490565b61023b61028e366004612f5d565b610a40565b61023b6102a1366004612f05565b610a69565b61023b6102b4366004612f5d565b610b8f565b6102506102c7366004612f05565b610c1b565b61023b610c83565b61023b6102e2366004612f1e565b610d3e565b60975460ff166101e8565b60fc54610210906001600160a01b031681565b610210610313366004612f46565b610f38565b6101e8610326366004612f05565b60fd6020525f908152604090205460ff1681565b61023b610348366004612f05565b610f60565b61023b61035b366004612f05565b610fe9565b61037361036e366004612f1e565b6110fc565b604080519283526020830191909152016101f4565b610373610396366004613079565b611279565b61023b6113f0565b6101e86103b1366004612f5d565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101e86103e9366004612f05565b6001600160a01b03165f90815260fd602052604090205460ff1690565b61040e6114a6565b6040516101f4939291906131aa565b6102505f81565b610250610432366004613079565b6116c1565b61043f611be4565b6040516101f491906131df565b61023b61045a366004612f5d565b611c44565b61023b61046d3660046131f1565b611c68565b6102507f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b61023b6104a736600461322b565b611d2b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061053e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff166105c65760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206973206e6f74206d616e61676572000000000000000000000060448201526064015b60405180910390fd5b6105cf81611f6a565b60fb80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f7877af81b00ef61ec89a573cdf899a4d5662677d975600410a837a0bd0487d06905f90a35050565b5f610641611faa565b610649612003565b335f9081527fffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b602052604090205460ff161580156106b55750335f9081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16155b156107025760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206973206e6f742061646d696e206f72206d616e61676572000060448201526064016105bd565b815f0361072257604051631f2a200560e01b815260040160405180910390fd5b6001600160a01b0383165f90815260fd602052604090205460ff16610773576040517f24a0114400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516370a0823160e01b815230600482015283905f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156107b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dd91906132a6565b905083811015610819576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833701905050905086825f8151811061086f5761086f6132bd565b60200260200101906001600160a01b031690816001600160a01b03168152505085815f815181106108a2576108a26132bd565b602090810291909101015260fb546040517f43998bdd0000000000000000000000000000000000000000000000000000000081525f916001600160a01b0316906343998bdd906108f890869086906004016132ea565b6040805180830381865afa158015610912573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610936919061330e565b5060fb54909650869150610957906001600160a01b03878116911689612058565b60fb546040517f98c601aa0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906398c601aa906109a490869086903090600401613330565b5f604051808303815f87803b1580156109bb575f5ffd5b505af11580156109cd573d5f5f3e3d5ffd5b505060fb546109eb92506001600160a01b038881169250165f612058565b604080518881526020810188905233916001600160a01b038b16917f36accfe11c6cc617e1cd7edfe90e7cb6ad84a57612903b2a204d74aeb78434eb910160405180910390a3505050505061053e600160c955565b5f82815260656020526040902060010154610a5a8161219a565b610a6483836121a4565b505050565b335f9081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16610ae65760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206973206e6f74206d616e61676572000000000000000000000060448201526064016105bd565b610aef81611f6a565b60fc80546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604051911691908290610b5c907f4b494e4700000000000000000000000000000000000000000000000000000000815260040190565b604051908190038120907f2993ebde550a85ab4438c5c98e75942219cacc99a981372774e7732cb57ccd1d905f90a45050565b6001600160a01b0381163314610c0d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016105bd565b610c178282612244565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610c5f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053e91906132a6565b335f9081527fffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b602052604090205460ff16610d005760405162461bcd60e51b815260206004820152601360248201527f43616c6c6572206973206e6f742061646d696e0000000000000000000000000060448201526064016105bd565b610d086122c5565b6040515f81527f4543baa938cb97f5073ec206ad35638cdb1f4db8f677d31579b2f6fe7d18c14a906020015b60405180910390a1565b610d46611faa565b610d4e612003565b335f9081527fffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b602052604090205460ff16158015610dba5750335f9081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16155b15610e075760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206973206e6f742061646d696e206f72206d616e61676572000060448201526064016105bd565b805f03610e2757604051631f2a200560e01b815260040160405180910390fd5b610e3082611f6a565b60fc546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9a91906132a6565b905081811015610ed6576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fc54610eed906001600160a01b03168484612312565b60405182815233906001600160a01b038516907f24f113bd096303baf89f8542b0cb2194fc5685f70d43637e0f61da2ca3d21c019060200160405180910390a350610c17600160c955565b60fe8181548110610f47575f80fd5b5f918252602090912001546001600160a01b0316905081565b335f9081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16610fdd5760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206973206e6f74206d616e61676572000000000000000000000060448201526064016105bd565b610fe68161235b565b50565b335f9081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff166110665760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206973206e6f74206d616e61676572000000000000000000000060448201526064016105bd565b6001600160a01b0381165f90815260fd602052604090205460ff166110b7576040517f3dd1b30500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fe546001106110f3576040517facd4638000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fe681612459565b6001600160a01b0382165f90815260fd6020526040812054819060ff1661114f576040517f24a0114400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833701905050905085825f815181106111a5576111a56132bd565b60200260200101906001600160a01b031690816001600160a01b03168152505084815f815181106111d8576111d86132bd565b602090810291909101015260fb546040517f43998bdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906343998bdd9061122e90859085906004016132ea565b6040805180830381865afa158015611248573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126c919061330e565b9350935050509250929050565b5f5f83515f0361129c57604051631f2a200560e01b815260040160405180910390fd5b82518451146112d7576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b845181101561135b5760fd5f8683815181106112f7576112f76132bd565b6020908102919091018101516001600160a01b031682528101919091526040015f205460ff16611353576040517f24a0114400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016112d9565b5060fb546040517f43998bdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906343998bdd906113a790879087906004016132ea565b6040805180830381865afa1580156113c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e5919061330e565b915091509250929050565b335f9081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff1661146d5760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206973206e6f74206d616e61676572000000000000000000000060448201526064016105bd565b6114756125bc565b604051600181527f4543baa938cb97f5073ec206ad35638cdb1f4db8f677d31579b2f6fe7d18c14a90602001610d34565b60fe5460609081905f908067ffffffffffffffff8111156114c9576114c9612f87565b6040519080825280602002602001820160405280156114f2578160200160208202803683370190505b5093508067ffffffffffffffff81111561150e5761150e612f87565b604051908082528060200260200182016040528015611537578160200160208202803683370190505b5092505f5b8181101561164e5760fe8181548110611557576115576132bd565b905f5260205f20015f9054906101000a90046001600160a01b0316848281518110611584576115846132bd565b60200260200101906001600160a01b031690816001600160a01b03168152505060fe81815481106115b7576115b76132bd565b5f918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611605573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162991906132a6565b85828151811061163b5761163b6132bd565b602090810291909101015260010161153c565b5060fc546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611695573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b991906132a6565b915050909192565b5f6116ca611faa565b6116d2612003565b335f9081527fffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b602052604090205460ff1615801561173e5750335f9081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16155b1561178b5760405162461bcd60e51b815260206004820152601e60248201527f43616c6c6572206973206e6f742061646d696e206f72206d616e61676572000060448201526064016105bd565b82515f036117ac57604051631f2a200560e01b815260040160405180910390fd5b81518351146117e7576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b835181101561198457828181518110611804576118046132bd565b60200260200101515f0361182b57604051631f2a200560e01b815260040160405180910390fd5b60fd5f858381518110611840576118406132bd565b6020908102919091018101516001600160a01b031682528101919091526040015f205460ff1661189c576040517f24a0114400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8482815181106118af576118af6132bd565b60209081029190910101516040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611901573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192591906132a6565b9050848381518110611939576119396132bd565b602002602001015181101561197a576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506001016117e9565b5060fb546040517f43998bdd0000000000000000000000000000000000000000000000000000000081525f916001600160a01b0316906343998bdd906119d090879087906004016132ea565b6040805180830381865afa1580156119ea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0e919061330e565b5091508190505f5b8451811015611a865760fb548451611a7e916001600160a01b031690869084908110611a4457611a446132bd565b6020026020010151878481518110611a5e57611a5e6132bd565b60200260200101516001600160a01b03166120589092919063ffffffff16565b600101611a16565b5060fb546040517f98c601aa0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906398c601aa90611ad490879087903090600401613330565b5f604051808303815f87803b158015611aeb575f5ffd5b505af1158015611afd573d5f5f3e3d5ffd5b505f925050505b8451811015611b3c5760fb548551611b34916001600160a01b0316905f90889085908110611a5e57611a5e6132bd565b600101611b04565b505f5b8451811015611bd857336001600160a01b0316858281518110611b6457611b646132bd565b60200260200101516001600160a01b03167f36accfe11c6cc617e1cd7edfe90e7cb6ad84a57612903b2a204d74aeb78434eb868481518110611ba857611ba86132bd565b60200260200101515f604051611bc8929190918252602082015260400190565b60405180910390a3600101611b3f565b505061053e600160c955565b606060fe805480602002602001604051908101604052809291908181526020018280548015611c3a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611c1c575b5050505050905090565b5f82815260656020526040902060010154611c5e8161219a565b610a648383612244565b335f9081527fffdfc1249c027f9191656349feb0761381bb32c9f557e01f419fd08754bf5a1b602052604090205460ff16611ce55760405162461bcd60e51b815260206004820152601360248201527f43616c6c6572206973206e6f742061646d696e0000000000000000000000000060448201526064016105bd565b611cee83611f6a565b611cf782611f6a565b805f03611d1757604051631f2a200560e01b815260040160405180910390fd5b610a646001600160a01b0384168383612312565b5f54610100900460ff1615808015611d4957505f54600160ff909116105b80611d625750303b158015611d6257505f5460ff166001145b611dd45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105bd565b5f805460ff191660011790558015611e12575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b611e1b86611f6a565b611e2485611f6a565b611e2d84611f6a565b611e3683611f6a565b611e3e6125f9565b611e46612675565b611e4e6126f9565b611e585f876121a4565b611e827f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08866121a4565b60fb80546001600160a01b038087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc8054928616929091169190911790555f5b8251811015611eff57611ef7838281518110611eea57611eea6132bd565b602002602001015161235b565b600101611ecc565b508015611f62575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6001600160a01b038116610fe6576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260c95403611ffc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105bd565b600260c955565b60975460ff16156120565760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016105bd565b565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b3000000000000000000000000000000000000000000000000000000001790526120d7848261277d565b61218d576040516001600160a01b03841660248201525f60448201526121839085907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261281e565b61218d848261281e565b50505050565b600160c955565b610fe68133612904565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16610c17575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556122003390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff1615610c17575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6122cd612978565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610d34565b6040516001600160a01b038316602482015260448101829052610a649084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161211f565b61236481611f6a565b6001600160a01b0381165f90815260fd602052604090205460ff16156123b6576040517fc78e82ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381165f81815260fd6020526040808220805460ff1916600190811790915560fe8054918201815583527f54075df80ec1ae6ac9100e1fd0ebf3246c17f5c933137af392011f4c5f61513a0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055517fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d79190a250565b6001600160a01b0381165f90815260fd60205260408120805460ff191690555b60fe5481101561258557816001600160a01b031660fe82815481106124a0576124a06132bd565b5f918252602090912001546001600160a01b03160361257d5760fe80546124c99060019061339b565b815481106124d9576124d96132bd565b5f9182526020909120015460fe80546001600160a01b039092169183908110612504576125046132bd565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060fe805480612540576125406133ae565b5f8281526020902081015f1990810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055612585565b600101612479565b506040516001600160a01b038216907fbea12876694c4055c71f74308f752b9027cf3d554194000a366abddfc239a306905f90a250565b6125c4612003565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122fa3390565b5f54610100900460ff166120565760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bd565b5f54610100900460ff166126f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bd565b6120566129ca565b5f54610100900460ff166127755760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bd565b612056612a52565b5f5f5f846001600160a01b03168460405161279891906133f2565b5f604051808303815f865af19150503d805f81146127d1576040519150601f19603f3d011682016040523d82523d5f602084013e6127d6565b606091505b509150915081801561280057508051158061280057508080602001905181019061280091906133fd565b801561281557506001600160a01b0385163b15155b95945050505050565b5f612872826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612ace9092919063ffffffff16565b905080515f148061289257508080602001905181019061289291906133fd565b610a645760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016105bd565b5f8281526065602090815260408083206001600160a01b038516845290915290205460ff16610c175761293681612ae4565b612941836020612af6565b60405160200161295292919061341c565b60408051601f198184030181529082905262461bcd60e51b82526105bd9160040161347d565b60975460ff166120565760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105bd565b5f54610100900460ff16612a465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bd565b6097805460ff19169055565b5f54610100900460ff166121935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bd565b6060612adc84845f85612d20565b949350505050565b606061053e6001600160a01b03831660145b60605f612b048360026134b2565b612b0f9060026134c9565b67ffffffffffffffff811115612b2757612b27612f87565b6040519080825280601f01601f191660200182016040528015612b51576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110612b8757612b876132bd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612be957612be96132bd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f612c238460026134b2565b612c2e9060016134c9565b90505b6001811115612cca577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612c6f57612c6f6132bd565b1a60f81b828281518110612c8557612c856132bd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c93612cc3816134dc565b9050612c31565b508315612d195760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105bd565b9392505050565b606082471015612d985760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016105bd565b5f5f866001600160a01b03168587604051612db391906133f2565b5f6040518083038185875af1925050503d805f8114612ded576040519150601f19603f3d011682016040523d82523d5f602084013e612df2565b606091505b5091509150612e0387838387612e0e565b979650505050505050565b60608315612e7c5782515f03612e75576001600160a01b0385163b612e755760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105bd565b5081612adc565b612adc8383815115612e915781518083602001fd5b8060405162461bcd60e51b81526004016105bd919061347d565b5f60208284031215612ebb575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612d19575f5ffd5b80356001600160a01b0381168114612f00575f5ffd5b919050565b5f60208284031215612f15575f5ffd5b612d1982612eea565b5f5f60408385031215612f2f575f5ffd5b612f3883612eea565b946020939093013593505050565b5f60208284031215612f56575f5ffd5b5035919050565b5f5f60408385031215612f6e575f5ffd5b82359150612f7e60208401612eea565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612fdd57612fdd612f87565b604052919050565b5f67ffffffffffffffff821115612ffe57612ffe612f87565b5060051b60200190565b5f82601f830112613017575f5ffd5b813561302a61302582612fe5565b612fb4565b8082825260208201915060208360051b86010192508583111561304b575f5ffd5b602085015b8381101561306f5761306181612eea565b835260209283019201613050565b5095945050505050565b5f5f6040838503121561308a575f5ffd5b823567ffffffffffffffff8111156130a0575f5ffd5b6130ac85828601613008565b925050602083013567ffffffffffffffff8111156130c8575f5ffd5b8301601f810185136130d8575f5ffd5b80356130e661302582612fe5565b8082825260208201915060208360051b850101925087831115613107575f5ffd5b6020840193505b8284101561312957833582526020938401939091019061310e565b809450505050509250929050565b5f8151808452602084019350602083015f5b82811015613167578151865260209586019590910190600101613149565b5093949350505050565b5f8151808452602084019350602083015f5b828110156131675781516001600160a01b0316865260209586019590910190600101613183565b606081525f6131bc6060830186613137565b82810360208401526131ce8186613171565b915050826040830152949350505050565b602081525f612d196020830184613171565b5f5f5f60608486031215613203575f5ffd5b61320c84612eea565b925061321a60208501612eea565b929592945050506040919091013590565b5f5f5f5f5f60a0868803121561323f575f5ffd5b61324886612eea565b945061325660208701612eea565b935061326460408701612eea565b925061327260608701612eea565b9150608086013567ffffffffffffffff81111561328d575f5ffd5b61329988828901613008565b9150509295509295909350565b5f602082840312156132b6575f5ffd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081525f6132fc6040830185613171565b82810360208401526128158185613137565b5f5f6040838503121561331f575f5ffd5b505080516020909101519092909150565b606081525f6133426060830186613171565b82810360208401526133548186613137565b9150506001600160a01b0383166040830152949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561053e5761053e61336e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f612d1982846133db565b5f6020828403121561340d575f5ffd5b81518015158114612d19575f5ffd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f61344d60178301856133db565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000815261281560118201856133db565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b808202811582820484141761053e5761053e61336e565b8082018082111561053e5761053e61336e565b5f816134ea576134ea61336e565b505f19019056fea2646970667358221220b9365e9f945982811777f740ddfd4789ef4efbb1ee694e718a20caf5223b53c364736f6c634300081b0033