2 txs
255 calls
constructor
constructor(address asset_, string name_, string symbol_, address[] providers_, uint256 withdrawFeePercent_, address timelock_, address treasury_)
functions
activeProvider
viewfunction activeProvider() view returns (address)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256 assets)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256 shares)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
EXECUTOR_ROLE
viewfunction EXECUTOR_ROLE() view returns (bytes32)
getBalanceOfAsset
viewfunction getBalanceOfAsset(address owner) view returns (uint256 assets)
getProviders
viewfunction getProviders() view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
maxDeposit
viewfunction maxDeposit(address) view returns (uint256)
maxMint
viewfunction maxMint(address) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256)
minAmount
viewfunction minAmount() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
paused
viewfunction paused(uint8 action) view returns (bool)
previewDeposit
viewfunction previewDeposit(uint256 assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 shares) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 assets) view returns (uint256)
setupCompleted
viewfunction setupCompleted() view returns (bool)
symbol
viewfunction symbol() view returns (string)
timelock
viewfunction timelock() view returns (address)
totalAssets
viewfunction totalAssets() view returns (uint256 assets)
totalSupply
viewfunction totalSupply() view returns (uint256)
treasury
viewfunction treasury() view returns (address)
withdrawFeePercent
viewfunction withdrawFeePercent() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
deposit
nonpayablefunction deposit(uint256 assets, address receiver) returns (uint256)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
mint
nonpayablefunction mint(uint256 shares, address receiver) returns (uint256)
pause
nonpayablefunction pause(uint8 action)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
rebalance
nonpayablefunction rebalance(uint256 assets, address from, address to, uint256 fee) returns (bool)
redeem
nonpayablefunction redeem(uint256 shares, address receiver, address owner) returns (uint256)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setActiveProvider
nonpayablefunction setActiveProvider(address _activeProvider)
setMinAmount
nonpayablefunction setMinAmount(uint256 _minAmount)
setProviders
nonpayablefunction setProviders(address[] providers)
setTimelock
nonpayablefunction setTimelock(address _timelock)
setTreasury
nonpayablefunction setTreasury(address _treasury)
setupVault
nonpayablefunction setupVault(uint256 assets)
setWithdrawFeePercent
nonpayablefunction setWithdrawFeePercent(uint256 _withdrawFeePercent)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
unpause
nonpayablefunction unpause(uint8 action)
withdraw
nonpayablefunction withdraw(uint256 assets, address receiver, address owner) returns (uint256)
events
ActiveProviderUpdated
event ActiveProviderUpdated(address activeProvider)
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
EIP712DomainChanged
event EIP712DomainChanged()
FeeCharged
event FeeCharged(address indexed treasury, uint256 fee)
MinAmountUpdated
event MinAmountUpdated(uint256 minAmount)
Paused
event Paused(address account, uint8 action)
ProvidersUpdated
event ProvidersUpdated(address[] providers)
RebalanceExecuted
event RebalanceExecuted(uint256 assetsFrom, uint256 assetsTo, address indexed from, address indexed to)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SetupCompleted
event SetupCompleted(address indexed setupAddress)
TimelockUpdated
event TimelockUpdated(address indexed timelock)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
TreasuryUpdated
event TreasuryUpdated(address indexed treasury)
Unpaused
event Unpaused(address account, uint8 action)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
WithdrawFeePercentUpdated
event WithdrawFeePercentUpdated(uint256 withdrawFeePercent)
errors
AccessManager__CallerIsNotAdmin
error AccessManager__CallerIsNotAdmin()
AccessManager__CallerIsNotExecutor
error AccessManager__CallerIsNotExecutor()
AccessManager__CallerIsNotOperator
error AccessManager__CallerIsNotOperator()
AddressEmptyCode
error AddressEmptyCode(address target)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
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)
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
ERC2612InvalidSigner
error ERC2612InvalidSigner(address signer, address owner)
FailedCall
error FailedCall()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidShortString
error InvalidShortString()
PausableActions__ActionNotPaused
error PausableActions__ActionNotPaused()
PausableActions__ActionPaused
error PausableActions__ActionPaused()
Rebalancer__ExcessRebalanceFee
error Rebalancer__ExcessRebalanceFee()
Rebalancer__InvalidProvider
error Rebalancer__InvalidProvider()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StringTooLong
error StringTooLong(string str)
Vault__AddressZero
error Vault__AddressZero()
Vault__DepositLessThanMin
error Vault__DepositLessThanMin()
Vault__InvalidInput
error Vault__InvalidInput()
Vault__SetupAlreadyCompleted
error Vault__SetupAlreadyCompleted()
Vault__Unauthorized
error Vault__Unauthorized()
creation bytecode
0x6101a06040523480156200001257600080fd5b506040516200426138038062004261833981016040819052620000359162000bb0565b868686868686868580604051806040016040528060018152602001603160f81b815250888881600390816200006b919062000d96565b5060046200007a828262000d96565b506200008c915083905060056200026b565b610120526200009d8160066200026b565b61014052815160208084019190912060e052815190820120610100524660a0526200012b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525062000142600033620002a4565b6001600160a01b0387166200016a57604051633335653160e01b815260040160405180910390fd5b6001600160a01b0387166101608190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015620001b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dc919062000e62565b60ff1661018052620001ee8262000349565b620001f984620003bb565b620002278460008151811062000213576200021362000e8e565b60200260200101516200054260201b60201c565b6200023281620005b8565b6200023d836200062a565b6200024b620f424062000689565b620002576000620006bf565b505050505050505050505050505062000fec565b60006020835110156200028b5762000283836200075f565b90506200029e565b8162000298848262000d96565b5060ff90505b92915050565b60008281526008602090815260408083206001600160a01b038516845290915290205460ff16620003455760008281526008602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620003043390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6001600160a01b0381166200037157604051633335653160e01b815260040160405180910390fd5b600e80546001600160a01b0319166001600160a01b0383169081179091556040517fc046b9e8f0cd9b70a3b838962e9c229277fbb7abee68ea0fad4acf2898ed2ca990600090a250565b60005b8151811015620004ef5760006001600160a01b0316828281518110620003e857620003e862000e8e565b60200260200101516001600160a01b0316036200041857604051633335653160e01b815260040160405180910390fd5b620004e682828151811062000431576200043162000e8e565b60200260200101516001600160a01b03166373f64d4462000457620007ab60201b60201c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260006044820152606401602060405180830381865afa158015620004a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cf919062000ea4565b610160516001600160a01b031690600019620007b2565b600101620003be565b5080516200050590600a90602084019062000a24565b507f5f589bfb97387c6d7ce41557510dba9ca4a577876489cacc87a22a395b8b13ca8160405162000537919062000ec4565b60405180910390a150565b6200054d816200088d565b6200056b5760405163207562d360e21b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0383161790556040517f34ea2e3abaf449e8227dcf35ffa3aa94f2b89384cdf95fe6fd34dc2aefc59b09906200053790839062000f13565b6001600160a01b038116620005e057604051633335653160e01b815260040160405180910390fd5b600f80546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b66b1a2bc2ec50000811115620006535760405163207562d360e21b815260040160405180910390fd5b600d8190556040518181527fd84a6d804e5eabc5849fa0d39e4545509125b95c297e1ec5ed98fad0f66befb89060200162000537565b600c8190556040518181527f7a94dccf633222d5f6174016b33ae91ce3449a59c8ac979df57cc84ea1a5b2ef9060200162000537565b80620006cb81620008ee565b600160096000846001811115620006e657620006e662000f27565b6001811115620006fa57620006fa62000f27565b81526020810191909152604001600020805460ff19169115159190911790557f534f879afd40abb4e39f8e1b77a316be4c8e3521d9cf5a3a3db8959d574d4559620007423390565b836040516200075392919062000f3d565b60405180910390a15050565b600080829050601f8151111562000796578260405163305a27a960e01b81526004016200078d919062000f79565b60405180910390fd5b8051620007a38262000fae565b179392505050565b6101605190565b6000836001600160a01b031663095ea7b38484604051602401620007d892919062000fd3565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506200081984826200091b60201b60201c565b62000887576200087b84856001600160a01b031663095ea7b38660006040516024016200084892919062000fd3565b60408051808303601f1901815291905260208101805160e09390931b6001600160e01b0393841617905291506200096d16565b6200088784826200096d565b50505050565b600a54600090815b81811015620008e757600a8181548110620008b457620008b462000e8e565b6000918252602090912001546001600160a01b0390811690851603620008de5760019250620008e7565b60010162000895565b5050919050565b620008f981620009db565b1562000918576040516336a4bf2d60e01b815260040160405180910390fd5b50565b6000806000806020600086516020880160008a5af192503d91506000519050828015620009635750811562000954578060011462000963565b6000866001600160a01b03163b115b9695505050505050565b600080602060008451602086016000885af18062000991576040513d6000823e3d81fd5b50506000513d91508115620009ab578060011415620009b8565b6001600160a01b0384163b155b15620008875783604051635274afe760e01b81526004016200078d919062000f13565b600060096000836001811115620009f657620009f662000f27565b600181111562000a0a5762000a0a62000f27565b815260208101919091526040016000205460ff1692915050565b82805482825590600052602060002090810192821562000a7c579160200282015b8281111562000a7c57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000a45565b5062000a8a92915062000a8e565b5090565b5b8082111562000a8a576000815560010162000a8f565b6001600160a01b03811681146200091857600080fd5b805162000ac88162000aa5565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000b0e5762000b0e62000acd565b604052919050565b60005b8381101562000b3357818101518382015260200162000b19565b50506000910152565b600082601f83011262000b4e57600080fd5b81516001600160401b0381111562000b6a5762000b6a62000acd565b62000b7f601f8201601f191660200162000ae3565b81815284602083860101111562000b9557600080fd5b62000ba882602083016020870162000b16565b949350505050565b600080600080600080600060e0888a03121562000bcc57600080fd5b875162000bd98162000aa5565b602089810151919850906001600160401b038082111562000bf957600080fd5b62000c078c838d0162000b3c565b985060408b015191508082111562000c1e57600080fd5b62000c2c8c838d0162000b3c565b975060608b015191508082111562000c4357600080fd5b818b0191508b601f83011262000c5857600080fd5b81518181111562000c6d5762000c6d62000acd565b8060051b915062000c8084830162000ae3565b818152918301840191848101908e84111562000c9b57600080fd5b938501935b8385101562000cc9578451925062000cb88362000aa5565b828252938501939085019062000ca0565b8099505050505050506080880151925062000ce760a0890162000abb565b915062000cf760c0890162000abb565b905092959891949750929550565b600181811c9082168062000d1a57607f821691505b60208210810362000d3b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000d91576000816000526020600020601f850160051c8101602086101562000d6c5750805b601f850160051c820191505b8181101562000d8d5782815560010162000d78565b5050505b505050565b81516001600160401b0381111562000db25762000db262000acd565b62000dca8162000dc3845462000d05565b8462000d41565b602080601f83116001811462000e02576000841562000de95750858301515b600019600386901b1c1916600185901b17855562000d8d565b600085815260208120601f198616915b8281101562000e335788860151825594840194600190910190840162000e12565b508582101562000e525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000e7557600080fd5b815160ff8116811462000e8757600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000eb757600080fd5b815162000e878162000aa5565b6020808252825182820181905260009190848201906040850190845b8181101562000f075783516001600160a01b03168352928401929184019160010162000ee0565b50909695505050505050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0383168152604081016002831062000f6c57634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b602081526000825180602084015262000f9a81604085016020870162000b16565b601f01601f19169190910160400192915050565b8051602080830151919081101562000d3b5760001960209190910360031b1b16919050565b6001600160a01b03929092168252602082015260400190565b60805160a05160c05160e05161010051610120516101405161016051610180516131e162001080600039600061042e015260008181610b4001528181610e5e0152818161144f0152818161161c01528181611e980152611ecc01526000611a7f01526000611a52015260006118ae01526000611886015260006117e10152600061180b0152600061183501526131e16000f3fe6080604052600436106102695760003560e01c806301e1d1141461027557806306fdde031461029d57806307a2d13a146102bf57806307bd0265146102df578063095ea7b3146103135780630a28a477146103435780630fa275391461036357806318160ddd146103855780631b98f6ac1461039a57806323b872dd146103ba5780632f2ff15d146103da578063301c7e5d146103fa578063313ce5671461041a5780633644e5151461045857806338d52e0f1461046d578063402d267d1461048f578063447cb896146104af578063495ef705146104cf5780634cdad506146102bf5780635ac86ab7146104e5578063609da8971461050557806361d027b3146105265780636e553f651461054657806370a082311461056657806371e114301461058657806375b238fc146105a65780637ecebe00146105bb57806384b0196e146105db5780638529727914610603578063897b06371461062357806391d148541461064357806394bf804d1461066357806395d89b411461068357806397f75dd9146106985780639b2cb5d8146106b85780639edd7b23146106ce578063a9059cbb146106ee578063b3d7f6b91461070e578063b460af941461072e578063ba0876521461074e578063bdacb3031461076e578063c63d75b61461048f578063c6e6f5921461078e578063ce96cb77146107ae578063d33219b4146107ce578063d505accf146107ee578063d547741f1461080e578063d905777e1461082e578063dd62ed3e1461084e578063edc922a91461086e578063edf07f1514610890578063ef8b30f71461078e578063f0f44260146108b0578063f5b541a6146108d057600080fd5b3661027057005b600080fd5b34801561028157600080fd5b5061028a6108f2565b6040519081526020015b60405180910390f35b3480156102a957600080fd5b506102b2610901565b6040516102949190612b4a565b3480156102cb57600080fd5b5061028a6102da366004612b5d565b610993565b3480156102eb57600080fd5b5061028a7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b34801561031f57600080fd5b5061033361032e366004612b8b565b6109a6565b6040519015158152602001610294565b34801561034f57600080fd5b5061028a61035e366004612b5d565b6109be565b34801561036f57600080fd5b5061038361037e366004612b5d565b6109cb565b005b34801561039157600080fd5b5060025461028a565b3480156103a657600080fd5b506103836103b5366004612bdd565b610a70565b3480156103c657600080fd5b506103336103d5366004612ca1565b610aa7565b3480156103e657600080fd5b506103836103f5366004612ce2565b610acd565b34801561040657600080fd5b50610383610415366004612d12565b610b03565b34801561042657600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610294565b34801561046457600080fd5b5061028a610b34565b34801561047957600080fd5b50610482610b3e565b6040516102949190612d33565b34801561049b57600080fd5b5061028a6104aa366004612d47565b610b62565b3480156104bb57600080fd5b506103836104ca366004612b5d565b610b84565b3480156104db57600080fd5b5061028a600d5481565b3480156104f157600080fd5b50610333610500366004612d12565b610bb5565b34801561051157600080fd5b50600f5461033390600160a01b900460ff1681565b34801561053257600080fd5b50600f54610482906001600160a01b031681565b34801561055257600080fd5b5061028a610561366004612ce2565b610bf8565b34801561057257600080fd5b5061028a610581366004612d47565b610c1d565b34801561059257600080fd5b506103836105a1366004612d47565b610c38565b3480156105b257600080fd5b5061028a600081565b3480156105c757600080fd5b5061028a6105d6366004612d47565b610c69565b3480156105e757600080fd5b506105f0610c87565b6040516102949796959493929190612d64565b34801561060f57600080fd5b5061028a61061e366004612d47565b610ccd565b34801561062f57600080fd5b5061038361063e366004612b5d565b610cdb565b34801561064f57600080fd5b5061033361065e366004612ce2565b610d0c565b34801561066f57600080fd5b5061028a61067e366004612ce2565b610d37565b34801561068f57600080fd5b506102b2610d5c565b3480156106a457600080fd5b50600b54610482906001600160a01b031681565b3480156106c457600080fd5b5061028a600c5481565b3480156106da57600080fd5b506103336106e9366004612dfd565b610d6b565b3480156106fa57600080fd5b50610333610709366004612b8b565b610f15565b34801561071a57600080fd5b5061028a610729366004612b5d565b610f23565b34801561073a57600080fd5b5061028a610749366004612e45565b610f30565b34801561075a57600080fd5b5061028a610769366004612e45565b610f69565b34801561077a57600080fd5b50610383610789366004612d47565b610fa2565b34801561079a57600080fd5b5061028a6107a9366004612b5d565b610fd6565b3480156107ba57600080fd5b5061028a6107c9366004612d47565b610fe3565b3480156107da57600080fd5b50600e54610482906001600160a01b031681565b3480156107fa57600080fd5b50610383610809366004612e87565b611008565b34801561081a57600080fd5b50610383610829366004612ce2565b611138565b34801561083a57600080fd5b5061028a610849366004612d47565b61116a565b34801561085a57600080fd5b5061028a610869366004612efe565b61118c565b34801561087a57600080fd5b506108836111b7565b6040516102949190612f2c565b34801561089c57600080fd5b506103836108ab366004612d12565b611218565b3480156108bc57600080fd5b506103836108cb366004612d47565b611249565b3480156108dc57600080fd5b5061028a60008051602061318c83398151915281565b60006108fc61127a565b905090565b60606003805461091090612f6d565b80601f016020809104026020016040519081016040528092919081815260200182805461093c90612f6d565b80156109895780601f1061095e57610100808354040283529160200191610989565b820191906000526020600020905b81548152906001019060200180831161096c57829003601f168201915b5050505050905090565b60006109a0826000611337565b92915050565b6000336109b481858561136e565b5060019392505050565b60006109a0826001611380565b600f54600160a01b900460ff16156109f657604051632b2cba5d60e01b815260040160405180910390fd5b600c54811015610a19576040516309bb724360e21b815260040160405180910390fd5b610a2360006113b2565b610a2f33308384611442565b600f805460ff60a01b1916600160a01b17905560405133907fb1fa1aae20fc88a51add616c46f8bc3a8d65d75b8fbe30fb0a6a2df2e773632290600090a250565b600e546001600160a01b03163314610a9b5760405163084312d160e41b815260040160405180910390fd5b610aa481611512565b50565b600033610ab585828561169c565b610ac08585856116ef565b60019150505b9392505050565b610ad8600033610d0c565b610af557604051633dcaff7960e21b815260040160405180910390fd5b610aff828261174e565b5050565b610b0e600033610d0c565b610b2b57604051633dcaff7960e21b815260040160405180910390fd5b610aa4816113b2565b60006108fc6117d4565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610b6e6000610bb5565b15610b7b57506000919050565b50600019919050565b610b8f600033610d0c565b610bac57604051633dcaff7960e21b815260040160405180910390fd5b610aa4816118ff565b600060096000836001811115610bcd57610bcd612fa7565b6001811115610bde57610bde612fa7565b815260208101919091526040016000205460ff1692915050565b600080610c0484610fd6565b9050610c1183858361195c565b610ac633848684611442565b6001600160a01b031660009081526020819052604090205490565b610c43600033610d0c565b610c6057604051633dcaff7960e21b815260040160405180910390fd5b610aa4816119da565b6001600160a01b0381166000908152600760205260408120546109a0565b600060608060008060006060610c9b611a4b565b610ca3611a78565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60006109a06102da83610c1d565b610ce6600033610d0c565b610d0357604051633dcaff7960e21b815260040160405180910390fd5b610aa481611aa5565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080610d4384610f23565b9050610d5083828661195c565b610ac633848387611442565b60606004805461091090612f6d565b6000610d8560008051602061318c83398151915233610d0c565b610da257604051635be2897760e11b815260040160405180910390fd5b610dab84611ada565b1580610dbd5750610dbb83611ada565b155b15610ddb576040516301d9c4ab60e21b815260040160405180910390fd5b610de58286611b34565b610e108560405180604001604052806008815260200167776974686472617760c01b81525086611b74565b610e43610e1d8387612fd3565b6040518060400160405280600781526020016619195c1bdcda5d60ca1b81525085611b74565b8115610eb857600f546001600160a01b0390811690610e85907f0000000000000000000000000000000000000000000000000000000000000000168285611c0a565b806001600160a01b031660008051602061316c83398151915284604051610eae91815260200190565b60405180910390a2505b6001600160a01b038084169085167f086c47503692f7dac9bd7ce63f1c29c814ce3ae59ee29390e242340d6dd8d58f87610ef28682612fd3565b6040805192835260208301919091520160405180910390a3506001949350505050565b6000336109b48185856116ef565b60006109a0826001611337565b600080610f3c856109be565b9050600080610f4e8784338989611c62565b91509150610f5f3387878585611d35565b9695505050505050565b600080610f7585610993565b9050600080610f878388338989611c62565b91509150610f983387878585611d35565b5095945050505050565b600e546001600160a01b03163314610fcd5760405163084312d160e41b815260040160405180910390fd5b610aa481611f8f565b60006109a0826000611380565b6000610fef6001610bb5565b15610ffc57506000919050565b6109a06102da83610c1d565b834211156110315760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861107e8c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006110d982612000565b905060006110e98287878761202d565b9050896001600160a01b0316816001600160a01b03161461112157808a6040516325c0072360e11b8152600401611028929190612fe6565b61112c8a8a8a61136e565b50505050505050505050565b611143600033610d0c565b61116057604051633dcaff7960e21b815260040160405180910390fd5b610aff828261205b565b60006111766001610bb5565b1561118357506000919050565b6109a082610c1d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600a80548060200260200160405190810160405280929190818152602001828054801561098957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111f1575050505050905090565b611223600033610d0c565b61124057604051633dcaff7960e21b815260040160405180910390fd5b610aa4816120c2565b611254600033610d0c565b61127157604051633dcaff7960e21b815260040160405180910390fd5b610aa48161213b565b600a546000908190815b8181101561133157600a818154811061129f5761129f613000565b6000918252602090912001546040516302b844a960e21b81526001600160a01b0390911690630ae112a4906112da9030908190600401612fe6565b602060405180830381865afa1580156112f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131b9190613016565b9250611327838561302f565b9350600101611284565b50505090565b60008061134360025490565b905080156113645761135f6113566108f2565b859083866121ac565b611366565b835b949350505050565b61137b83838360016121f9565b505050565b60008061138c60025490565b9050831580611399575080155b6113645761135f816113a96108f2565b869190866121ac565b806113bc816122c0565b6000600960008460018111156113d4576113d4612fa7565b60018111156113e5576113e5612fa7565b81526020810191909152604001600020805460ff19169115159190911790557f4cd3e1443d03aba343c5d882744f8f172c07b495e955ac3defb325cbd73c8550335b83604051611436929190613042565b60405180910390a15050565b6114776001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168530856122e6565b60408051808201909152600781526619195c1bdcda5d60ca1b6020820152600b546114ac9184916001600160a01b0316611b74565b6114b6838261231f565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051611504929190918252602082015260400190565b60405180910390a350505050565b60005b815181101561164d5760006001600160a01b031682828151811061153b5761153b613000565b60200260200101516001600160a01b03160361156a57604051633335653160e01b815260040160405180910390fd5b61164582828151811061157f5761157f613000565b60200260200101516001600160a01b03166373f64d4461159d610b3e565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260006044820152606401602060405180830381865afa1580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611612919061307d565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690600019612355565b600101611515565b50805161166190600a906020840190612a80565b507f5f589bfb97387c6d7ce41557510dba9ca4a577876489cacc87a22a395b8b13ca816040516116919190612f2c565b60405180910390a150565b60006116a8848461118c565b905060001981146116e957818110156116da57828183604051637dc7a0d960e11b81526004016110289392919061309a565b6116e9848484840360006121f9565b50505050565b6001600160a01b038316611719576000604051634b637e8f60e11b81526004016110289190612d33565b6001600160a01b03821661174357600060405163ec442f0560e01b81526004016110289190612d33565b61137b8383836123e7565b6117588282610d0c565b610aff5760008281526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790556117903390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561182d57507f000000000000000000000000000000000000000000000000000000000000000046145b1561185757507f000000000000000000000000000000000000000000000000000000000000000090565b6108fc604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b66b1a2bc2ec500008111156119275760405163207562d360e21b815260040160405180910390fd5b600d8190556040518181527fd84a6d804e5eabc5849fa0d39e4545509125b95c297e1ec5ed98fad0f66befb890602001611691565b6000611967816124fe565b6001600160a01b03841661198e57604051633335653160e01b815260040160405180910390fd5b821580611999575081155b156119b75760405163207562d360e21b815260040160405180910390fd5b600c548310156116e9576040516309bb724360e21b815260040160405180910390fd5b6119e381611ada565b611a005760405163207562d360e21b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0383161790556040517f34ea2e3abaf449e8227dcf35ffa3aa94f2b89384cdf95fe6fd34dc2aefc59b0990611691908390612d33565b60606108fc7f00000000000000000000000000000000000000000000000000000000000000006005612525565b60606108fc7f00000000000000000000000000000000000000000000000000000000000000006006612525565b600c8190556040518181527f7a94dccf633222d5f6174016b33ae91ce3449a59c8ac979df57cc84ea1a5b2ef90602001611691565b600a54600090815b81811015611b2d57600a8181548110611afd57611afd613000565b6000918252602090912001546001600160a01b0390811690851603611b255760019250611b2d565b600101611ae2565b5050919050565b6000611b51826702c68af0bb140000670de0b6b3a76400006125d0565b90508083111561137b576040516337fa464560e21b815260040160405180910390fd5b600082604051602001611b8791906130bb565b60408051601f1981840301815290829052602482018690523060448301529060640160408051601f198184030181529082905291611bc4916130f0565b6040519081900390206020820180516001600160e01b03166001600160e01b03199092169190911790529050611c036001600160a01b0383168261268b565b5050505050565b61137b83846001600160a01b031663a9059cbb8585604051602401611c3092919061310c565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506126f8565b6000806001611c70816124fe565b6001600160a01b0385161580611c8d57506001600160a01b038416155b15611cab57604051633335653160e01b815260040160405180910390fd5b871580611cb6575086155b15611cd45760405163207562d360e21b815260040160405180910390fd5b6000611cdf85610fe3565b905080891115611cfe57925082611cf781898b6125d0565b9250611d05565b8893508792505b846001600160a01b0316876001600160a01b031614611d2957611d2985888561169c565b50509550959350505050565b600d54600090611d4f908490670de0b6b3a76400006125d0565b90506000611d5d8285612fd3565b9050611d698584612760565b600a5460005b81811015611e82576000600a8281548110611d8c57611d8c613000565b60009182526020822001546040516302b844a960e21b81526001600160a01b0390911692508290630ae112a490611dc99030908190600401612fe6565b602060405180830381865afa158015611de6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0a9190613016565b905080600003611e1b575050611e7a565b600088821015611e2b5781611e2d565b885b9050611e5a8160405180604001604052806008815260200167776974686472617760c01b81525085611b74565b611e64818a612fd3565b985088600003611e7657505050611e82565b5050505b600101611d6f565b50600f546001600160a01b0390811690611ebf907f0000000000000000000000000000000000000000000000000000000000000000168286611c0a565b611ef36001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168985611c0a565b806001600160a01b031660008051602061316c83398151915285604051611f1c91815260200190565b60405180910390a2866001600160a01b0316886001600160a01b03168a6001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8689604051611f7c929190918252602082015260400190565b60405180910390a4505050505050505050565b6001600160a01b038116611fb657604051633335653160e01b815260040160405180910390fd5b600e80546001600160a01b0319166001600160a01b0383169081179091556040517fc046b9e8f0cd9b70a3b838962e9c229277fbb7abee68ea0fad4acf2898ed2ca990600090a250565b60006109a061200d6117d4565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061203f88888888612796565b92509250925061204f828261285b565b50909695505050505050565b6120658282610d0c565b15610aff5760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b806120cc816124fe565b6001600960008460018111156120e4576120e4612fa7565b60018111156120f5576120f5612fa7565b81526020810191909152604001600020805460ff19169115159190911790557f534f879afd40abb4e39f8e1b77a316be4c8e3521d9cf5a3a3db8959d574d455933611427565b6001600160a01b03811661216257604051633335653160e01b815260040160405180910390fd5b600f80546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b60006121db6121ba83612914565b80156121d65750600084806121d1576121d1613125565b868809115b151590565b6121e68686866125d0565b6121f0919061302f565b95945050505050565b6001600160a01b03841661222357600060405163e602df0560e01b81526004016110289190612d33565b6001600160a01b03831661224d576000604051634a1406b160e11b81526004016110289190612d33565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156116e957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161150491815260200190565b6122c981610bb5565b610aa4576040516360f8581d60e01b815260040160405180910390fd5b6040516001600160a01b0384811660248301528381166044830152606482018390526116e99186918216906323b872dd90608401611c30565b6001600160a01b03821661234957600060405163ec442f0560e01b81526004016110289190612d33565b610aff600083836123e7565b6000836001600160a01b031663095ea7b3848460405160240161237992919061310c565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506123b28482612941565b6116e9576123dd84856001600160a01b031663095ea7b3866000604051602401611c3092919061310c565b6116e984826126f8565b6001600160a01b038316612412578060026000828254612407919061302f565b909155506124719050565b6001600160a01b038316600090815260208190526040902054818110156124525783818360405163391434e360e21b81526004016110289392919061309a565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661248d576002805482900390556124ac565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124f191815260200190565b60405180910390a3505050565b61250781610bb5565b15610aa4576040516336a4bf2d60e01b815260040160405180910390fd5b606060ff831461253f576125388361298b565b90506109a0565b81805461254b90612f6d565b80601f016020809104026020016040519081016040528092919081815260200182805461257790612f6d565b80156125c45780601f10612599576101008083540402835291602001916125c4565b820191906000526020600020905b8154815290600101906020018083116125a757829003601f168201915b505050505090506109a0565b6000838302816000198587098281108382030391505080600003612607578382816125fd576125fd613125565b0492505050610ac6565b80841161261e5761261e60038515026011186129ca565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6060600080846001600160a01b0316846040516126a891906130f0565b600060405180830381855af49150503d80600081146126e3576040519150601f19603f3d011682016040523d82523d6000602084013e6126e8565b606091505b50915091506121f08583836129dc565b600080602060008451602086016000885af18061271b576040513d6000823e3d81fd5b50506000513d91508115612733578060011415612740565b6001600160a01b0384163b155b156116e95783604051635274afe760e01b81526004016110289190612d33565b6001600160a01b03821661278a576000604051634b637e8f60e11b81526004016110289190612d33565b610aff826000836123e7565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156127c75750600091506003905082612851565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561281b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661284757506000925060019150829050612851565b9250600091508190505b9450945094915050565b600082600381111561286f5761286f612fa7565b03612878575050565b600182600381111561288c5761288c612fa7565b036128aa5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156128be576128be612fa7565b036128df5760405163fce698f760e01b815260048101829052602401611028565b60038260038111156128f3576128f3612fa7565b03610aff576040516335e2f38360e21b815260048101829052602401611028565b6000600282600381111561292a5761292a612fa7565b612934919061313b565b60ff166001149050919050565b6000806000806020600086516020880160008a5af192503d91506000519050828015610f5f575081156129775780600114610f5f565b50505050506001600160a01b03163b151590565b6060600061299883612a2f565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b634e487b71600052806020526024601cfd5b6060826129f1576129ec82612a57565b610ac6565b8151158015612a0857506001600160a01b0384163b155b15612a285783604051639996b31560e01b81526004016110289190612d33565b5080610ac6565b600060ff8216601f8111156109a057604051632cd44ac360e21b815260040160405180910390fd5b805115612a675780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b828054828255906000526020600020908101928215612ad5579160200282015b82811115612ad557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612aa0565b50612ae1929150612ae5565b5090565b5b80821115612ae15760008155600101612ae6565b60005b83811015612b15578181015183820152602001612afd565b50506000910152565b60008151808452612b36816020860160208601612afa565b601f01601f19169290920160200192915050565b602081526000610ac66020830184612b1e565b600060208284031215612b6f57600080fd5b5035919050565b6001600160a01b0381168114610aa457600080fd5b60008060408385031215612b9e57600080fd5b8235612ba981612b76565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b8035612bd881612b76565b919050565b60006020808385031215612bf057600080fd5b82356001600160401b0380821115612c0757600080fd5b818501915085601f830112612c1b57600080fd5b813581811115612c2d57612c2d612bb7565b8060051b604051601f19603f83011681018181108582111715612c5257612c52612bb7565b604052918252848201925083810185019188831115612c7057600080fd5b938501935b82851015612c9557612c8685612bcd565b84529385019392850192612c75565b98975050505050505050565b600080600060608486031215612cb657600080fd5b8335612cc181612b76565b92506020840135612cd181612b76565b929592945050506040919091013590565b60008060408385031215612cf557600080fd5b823591506020830135612d0781612b76565b809150509250929050565b600060208284031215612d2457600080fd5b813560028110610ac657600080fd5b6001600160a01b0391909116815260200190565b600060208284031215612d5957600080fd5b8135610ac681612b76565b60ff60f81b881681526000602060e06020840152612d8560e084018a612b1e565b8381036040850152612d97818a612b1e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015612deb57835183529284019291840191600101612dcf565b50909c9b505050505050505050505050565b60008060008060808587031215612e1357600080fd5b843593506020850135612e2581612b76565b92506040850135612e3581612b76565b9396929550929360600135925050565b600080600060608486031215612e5a57600080fd5b833592506020840135612e6c81612b76565b91506040840135612e7c81612b76565b809150509250925092565b600080600080600080600060e0888a031215612ea257600080fd5b8735612ead81612b76565b96506020880135612ebd81612b76565b95506040880135945060608801359350608088013560ff81168114612ee157600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215612f1157600080fd5b8235612f1c81612b76565b91506020830135612d0781612b76565b6020808252825182820181905260009190848201906040850190845b8181101561204f5783516001600160a01b031683529284019291840191600101612f48565b600181811c90821680612f8157607f821691505b602082108103612fa157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156109a0576109a0612fbd565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561302857600080fd5b5051919050565b808201808211156109a0576109a0612fbd565b6001600160a01b0383168152604081016002831061307057634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b60006020828403121561308f57600080fd5b8151610ac681612b76565b6001600160a01b039390931683526020830191909152604082015260600190565b600082516130cd818460208701612afa565b702875696e743235362c616464726573732960781b920191825250601101919050565b60008251613102818460208701612afa565b9190910192915050565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601260045260246000fd5b600060ff83168061315c57634e487b7160e01b600052601260045260246000fd5b8060ff8416069150509291505056fe55bb3cade9d43b798a4fe5ffdd05024b2d7870df53920673bfc7e68047cd0ab197667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a26469706673582212209072f6c1a5cebcbc3d7ac7397a183d4692082a244a53764886c8095d31dadddb64736f6c63430008170033000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e583100000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000038d7ea4c680000000000000000000000000000e967f6e27a2ae5a78e237421a3bf66bfc899626000000000000000000000000afa9ed53c33bbd8de300481ce150db3d35738f9d000000000000000000000000000000000000000000000000000000000000000e546865736175726f7320555344430000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005745553444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000001df21fca039e23413134aa34fc79289673a47aa3000000000000000000000000c7049a78c55368ec039c785b37656afed36c710c