0 txs
2 calls
constructor
constructor()
functions
allowance
purefunction allowance(address, address) pure returns (uint256)
approve
purefunction approve(address, uint256) pure returns (bool)
balanceOf
viewfunction balanceOf(address user) view returns (uint256)
computeReleasableAmount
viewfunction computeReleasableAmount(bytes32 vestingScheduleId) view returns (uint256)
computeVestingScheduleIdForAddressAndIndex
purefunction computeVestingScheduleIdForAddressAndIndex(address holder, uint256 index) pure returns (bytes32)
coolDownPeriod
viewfunction coolDownPeriod() view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getVestingSchedule
viewfunction getVestingSchedule(bytes32 vestingScheduleId) view returns (tuple)
getVestingScheduleByAddressAndIndex
viewfunction getVestingScheduleByAddressAndIndex(address holder, uint256 index) view returns (tuple)
getWithdrawableAmount
viewfunction getWithdrawableAmount() view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
holdersVestingScheduleCount
viewfunction holdersVestingScheduleCount(address) view returns (uint256)
MAX_VESTING_SCHEDULES_PER_USER
viewfunction MAX_VESTING_SCHEDULES_PER_USER() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
transfer
purefunction transfer(address, uint256) pure returns (bool)
transferFrom
purefunction transferFrom(address, address, uint256) pure returns (bool)
underlyingToken
viewfunction underlyingToken() view returns (address)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _underlyingToken, string _name, string _symbol, uint256 _coolDownPeriod)
release
nonpayablefunction release(bytes32 vestingScheduleId, uint256 amount)
releaseAvailableTokensForHolder
nonpayablefunction releaseAvailableTokensForHolder(address holder)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revoke
nonpayablefunction revoke(bytes32 vestingScheduleId)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setPaused
nonpayablefunction setPaused(bool paused)
vest
nonpayablefunction vest(address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, uint256 _slicePeriodSeconds, bool _revokable, uint256 _amount)
withdraw
nonpayablefunction withdraw(uint256 amount)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
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)
ScheduleCreated
event ScheduleCreated(bytes32 indexed scheduleId, address indexed beneficiary, uint256 amount, uint256 start, uint256 cliff, uint256 duration, uint256 slicePeriodSeconds, bool revokable)
ScheduleRevoked
event ScheduleRevoked(bytes32 indexed scheduleId)
TokensReleased
event TokensReleased(bytes32 indexed scheduleId, address indexed beneficiary, uint256 amount)
TokenWithdrawn
event TokenWithdrawn(address indexed recipient, uint256 amount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
CannotRevokeBeforeCooldownPeriod
error CannotRevokeBeforeCooldownPeriod()
DecimalsError
error DecimalsError()
DurationShorterThanCliff
error DurationShorterThanCliff()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InsufficientReleasableTokens
error InsufficientReleasableTokens()
InsufficientTokensInContract
error InsufficientTokensInContract()
InvalidAddress
error InvalidAddress()
InvalidAmount
error InvalidAmount()
InvalidDuration
error InvalidDuration()
InvalidInitialization
error InvalidInitialization()
InvalidSchedule
error InvalidSchedule()
InvalidSlicePeriod
error InvalidSlicePeriod()
InvalidStart
error InvalidStart()
NotInitializing
error NotInitializing()
NotRevokable
error NotRevokable()
NotSupported
error NotSupported()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ScheduleWasRevoked
error ScheduleWasRevoked()
TooManySchedulesForBeneficiary
error TooManySchedulesForBeneficiary()
Unauthorized
error Unauthorized()
VestingScheduleCapacityReached
error VestingScheduleCapacityReached()
ZeroVestedAmount
error ZeroVestedAmount()
creation bytecode
0x608080604052346100b8577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100a957506001600160401b036002600160401b031982821601610064575b6040516128ff90816100bd8239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f8080610055565b63f92ee8a960e01b8152600490fd5b5f80fdfe608080604052600480361015610013575f80fd5b5f3560e01c91826301ffc9a714611b8357508163022d63fb14611b6657816305d6cc5914611a9557816306fdde0314611a0f578163095ea7b314610b4f5781630aa6220b1461196657816316c38b3c1461189257816318160ddd1461187557816323b872dd14611843578163248a9ca31461180c5781632495a599146117e45781632e1a7d4d1461174a5781632f2ff15d146116fa57816330f1ebb9146116de578163313ce567146116c357816336568abe146115c05781634b866a2d146115885781634d12d4b6146110df5781635c975abb146110b1578163634e93da14610fcd578163649a5ec714610e2557816366afd8ef14610db257816370a0823114610d7a57816384ef8ffc14610d1f5781638af104da14610d535781638da5cb5b14610d1f57816390be10cc14610d0557816391d1485414610cb157816395d89b4114610bf95781639ef346b414610bdb578163a1eda53c14610b6e578163a217fddf14610b54578163a9059cbb14610b4f578163ab7b071d14610b34578163b75c7dc614610932578163cc8463c814610908578163cefc142914610830578163cf6eefb7146107f6578163d547741f14610793578163d602b9fd14610726578163db8f743f14610317578163dd62ed3e146102ea578163ea1bb3d51461024f575063f51321d714610202575f80fd5b3461024b57604036600319011261024b5761024761023b610236610224611bef565b61022c611eef565b5060243590611e0d565b611f39565b60405191829182611d78565b0390f35b5f80fd5b3461024b57602036600319011261024b57803590815f526005602052600260405f200154156102db57815f52600560205260ff600660405f2001541660038110156102c8576002146102b957505f52600560205260206102b160405f206120c3565b604051908152f35b604051632957a17760e01b8152fd5b602182634e487b7160e01b5f525260245ffd5b604051631b742d9d60e31b8152fd5b3461024b57604036600319011261024b57610303611bef565b5061030c611c05565b5060206040515f8152f35b3461024b5760e036600319011261024b57610330611bef565b9060249060a435801515810361024b5761034861238b565b6002546040516323b872dd60e01b6020820152338582015230604482015260c4356064808301919091528152906001600160a01b031660a082016001600160401b03811183821017610714576040526103a191906123b5565b6001600160a01b03841615610704576001600160a01b0384165f908152600660205260409020546064106106f45760c4356103da611e71565b106106e457630114db0042018042116106d2578335116106c25762093a806064351080156106b3575b6106a35760c435158015610694575b61068457608435158015610678575b6106685760443560643510610658576001600160a01b0384165f9081526006602052604090208054905f198214610646576001820190556104629085611e0d565b916104706044358535611fda565b906040519161047e83611c53565b82526020820190853582526040830160643581526060840160843581526080850160c435815260a08601915f835260c08701936001855260018060a01b038c1660e089015233610100890152881515610120890152895f52600560205260405f209688518855516001880155516002870155516003860155518385015551600584015551906003821015610634575081600791600660ff95940154610100600160a81b0360e086015160081b169160018060a81b031996879116911617176006820155019160018060a01b03610100830151169083549261012060ff60a01b910151151560a01b1692161717905561057a60c435600354611fda565b60035560018060a01b0384165f52600760205261059d60c43560405f2054611fda565b60018060a01b0385165f52600760205260405f20556040519260c4358452356020840152604435604084015260643560608401526084356080840152151560a08301527f6a4b2f118c5372782b73db45bdf54f9241247604d5414fef92818ca34ad7d46260c060018060a01b03851693a35f5f8051602061282a83398151915260206040519360c435855260018060a01b031693a3005b60218791634e487b7160e01b5f52525ffd5b84601185634e487b7160e01b5f52525ffd5b5060405163625a1c5760e11b8152fd5b5060405163c36476e960e01b8152fd5b50603c60843511610421565b5060405163162908e360e11b8152fd5b50600160c81b60c43511610412565b50604051637616640160e01b8152fd5b50635dfc0f0060643511610403565b50604051630e0d5b9360e21b8152fd5b83601184634e487b7160e01b5f52525ffd5b506040516314a83c1960e01b8152fd5b506040516338cf51e560e01b8152fd5b5060405163e6c4247b60e01b8152fd5b85604186634e487b7160e01b5f52525ffd5b3461024b575f36600319011261024b5761073e612291565b65ffffffffffff61074d612038565b90505f8051602061280a8339815191528260d01b81541690551661076d57005b7f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a96051095f80a1005b3461024b57604036600319011261024b5780356107ae611c05565b9080156107e5576107e39250805f525f8051602061284a8339815191526020526107de600160405f2001546122d4565b6124a8565b005b604051631fe1e13d60e11b81528390fd5b3461024b575f36600319011261024b57604065ffffffffffff610817612038565b83516001600160a01b0390921682529091166020820152f35b3461024b575f36600319011261024b57610848612038565b506001600160a01b039190821633036108f05765ffffffffffff9061086b612038565b909216801580156108e6575b6108cf575f805160206128aa83398151915280546001600160a01b031981169091556108b09084906108aa908716612685565b50612457565b505f8051602061280a83398151915280546001600160d01b0319169055005b6040516319ca5ebb60e01b81529182015260249150fd5b5042811015610877565b60249060405190636116401160e11b82523390820152fd5b3461024b575f36600319011261024b576020610922611fe7565b65ffffffffffff60405191168152f35b3461024b576020908160031936011261024b578035805f5260058352600260405f20015415610b2457805f526005835260ff600660405f200154166003811015610b1157600214610b01575f81815260058452604090206007810180546001600160a01b0392919083811633141580610ad6575b610ac65760a01c60ff1615610ab5576109c785830154600584015490611e50565b948515610aa6576109da86600354611e50565b600355600683019284845460081c16805f52600789526109fe8860405f2054611e50565b905f526007895260405f20558480600260ff198754161780875560081c169354168314610a7c575b5f875f8051602061282a8339815191528a898989610a49868b8460025416612320565b604051927f3672cfd57034e1b586da46ec42eea7bc449af89ac0ff5a795c3c00a0d1ae64c98880a25460081c16938152a3005b600101548154610a8b91611fda565b4210610a975780610a26565b604051634dbbcb5f60e11b8152fd5b60405163234e901d60e11b8152fd5b604051633c34e69d60e01b81528590fd5b6040516282b42960e81b81528690fd5b505f80525f8051602061284a833981519152875260405f20335f52875260ff60405f205416156109a6565b50604051632957a17760e01b8152fd5b602183634e487b7160e01b5f525260245ffd5b50604051631b742d9d60e31b8152fd5b3461024b575f36600319011261024b57602060405160648152f35b611ceb565b3461024b575f36600319011261024b5760206040515f8152f35b3461024b575f36600319011261024b575f805160206128aa833981519152548060d01c9081151580610bd1575b15610bc85760a01c65ffffffffffff165b6040805165ffffffffffff928316815292909116602083015290f35b50505f80610bac565b5042821015610b9b565b3461024b57602036600319011261024b5761023b6102479135611f39565b3461024b575f36600319011261024b576040515f906001805490610c1c82611c1b565b908184526020926001811690815f14610c915750600114610c54575b61024784610c4881880382611c83565b60405191829182611ca4565b91935060015f52835f20915f925b828410610c7e575050508161024793610c489282010193610c38565b8054858501870152928501928101610c62565b60ff1916858501525050151560051b8201019150610c4881610247610c38565b3461024b57604036600319011261024b57610cca611c05565b90355f525f8051602061284a83398151915260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461024b575f36600319011261024b5760206102b1611e71565b3461024b575f36600319011261024b575f805160206128aa833981519152546040516001600160a01b039091168152602090f35b3461024b57604036600319011261024b5760206102b1610d71611bef565b60243590611e0d565b3461024b57602036600319011261024b576001600160a01b03610d9b611bef565b165f526007602052602060405f2054604051908152f35b3461024b57604036600319011261024b578035610dcd612063565b805f526005602052600260405f20015415610b2457805f52600560205260ff600660405f200154166003811015610b1157600214610b0157610e129060243590612169565b60015f8051602061288a83398151915255005b3461024b57602036600319011261024b57803565ffffffffffff80821680830361024b57610e51612291565b610e5a4261253f565b9382610e64611fe7565b1680831115610f8257505092610eac917ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b94620697808082105f14610f7b57505b1690612371565b905f805160206128aa83398151915280548060d01c80610f13575b505080546001600160a01b031660a083901b65ffffffffffff60a01b161760d084901b6001600160d01b0319161790556040805165ffffffffffff9283168152919092166020820152a1005b421115610f51575f8051602061280a83398151915280546001600160d01b031660309290921b6001600160d01b0319169190911790555b8480610ec7565b507f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec55f80a1610f4a565b9050610ea5565b91909103918211610fba57507ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b92610eac9190612371565b601190634e487b7160e01b5f525260245ffd5b3461024b57602036600319011261024b57610fe6611bef565b610fee612291565b7f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed6602061102b61101d4261253f565b611025611fe7565b90612371565b611033612038565b5f8051602061280a83398151915280546001600160d01b0319166001600160a01b0390971696871760a085901b65ffffffffffff60a01b1617905565ffffffffffff91508116611088575b60405191168152a2005b7f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a96051095f80a161107e565b3461024b575f36600319011261024b57602060ff5f8051602061286a83398151915254166040519015158152f35b3461024b57608036600319011261024b5780356001600160a01b0381169081900361024b576001600160401b039160243583811161024b576111249036908301611d32565b9060443584811161024b5761113c9036908301611d32565b907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009485549360ff8560401c16159382861695861580611581575b60018098149081611577575b15908161156e575b5061155d5767ffffffffffffffff198116871789558561153e575b506111af6124fe565b6111b76124fe565b5f8051602061286a833981519152805460ff191690556111d56124fe565b6111dd6124fe565b855f8051602061288a833981519152556111f56124fe565b6111fd6124fe565b3315611527575f8051602061280a83398151915280546001600160d01b0316905561122733612457565b50600280546001600160a01b0319168817905560405163313ce56760e01b815260209788908290879082905afa90811561151c575f916114e4575b5060ff60129116036114d35781518381116114c057806112825f54611c1b565b93601f94858111611472575b508990858311600114611413575f92611408575b50505f19600383901b1c191690871b175f555b80519283116113f5579082916112cb8754611c1b565b8281116113a5575b5087918311600114611346575f9261133b575b50505f19600383901b1c191690841b1783555b606435905561130457005b825460ff60401b19169092556040519182527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d291a1005b0151905087806112e6565b90869350601f19831691845f52885f20925f5b8a82821061138f5750508411611377575b505050811b0183556112f9565b01515f1960f88460031b161c1916905587808061136a565b8385015186558a97909501949384019301611359565b90919250865f52875f208380860160051c8201928a87106113ec575b9186958a929594930160051c01915b8281106113de5750506112d3565b5f81558695508991016113d0565b925081926113c1565b604184634e487b7160e01b5f525260245ffd5b015190508a806112a2565b90899350601f198316915f80528b5f20925f5b8d82821061145c5750508411611444575b505050811b015f556112b5565b01515f1960f88460031b161c191690558a8080611437565b8385015186558d97909501949384019301611426565b9091505f8052895f208580850160051c8201928c86106114b7575b918b91869594930160051c01915b8281106114a957505061128e565b5f81558594508b910161149b565b9250819261148d565b604185634e487b7160e01b5f525260245ffd5b604051631273be1d60e31b81528490fd5b90508781813d8311611515575b6114fb8183611c83565b8101031261024b575160ff8116810361024b5760ff611262565b503d6114f1565b6040513d5f823e3d90fd5b604051636116401160e11b81525f81860152602490fd5b68ffffffffffffffffff191668010000000000000001178855886111a6565b60405163f92ee8a960e01b81528590fd5b9050158a61118b565b303b159150611183565b5085611177565b3461024b57602036600319011261024b576001600160a01b036115a9611bef565b165f526006602052602060405f2054604051908152f35b3461024b57604036600319011261024b5780356115db611c05565b908015806116a0575b611614575b336001600160a01b03831603611603576107e392506124a8565b60405163334bd91960e11b81528390fd5b61161c612038565b906001600160a01b031615801590611690575b801561167e575b61165e57505f8051602061280a833981519152805465ffffffffffff60a01b191690556115e9565b6040516319ca5ebb60e01b815265ffffffffffff90911681850152602490fd5b504265ffffffffffff82161015611636565b5065ffffffffffff81161561162f565b505f805160206128aa833981519152546001600160a01b038381169116146115e4565b3461024b575f36600319011261024b57602060405160128152f35b3461024b575f36600319011261024b5760209054604051908152f35b3461024b57604036600319011261024b578035611715611c05565b9080156107e5576107e39250805f525f8051602061284a833981519152602052611745600160405f2001546122d4565b6125fb565b3461024b57602036600319011261024b57803590611766612063565b61176e612291565b611776611e71565b82116117d5575060025461179690829033906001600160a01b0316612320565b6040519081527fa2bd9fcfcdba69f52bcd9a520846ad4bd685b187483f53efc42d035b2ddebff060203392a260015f8051602061288a83398151915255005b6040516314a83c1960e01b8152fd5b3461024b575f36600319011261024b576002546040516001600160a01b039091168152602090f35b3461024b57602036600319011261024b57355f525f8051602061284a8339815191526020526020600160405f200154604051908152f35b3461024b57606036600319011261024b5761185c611bef565b50611865611c05565b50604051630280e1e560e61b8152fd5b3461024b575f36600319011261024b576020600354604051908152f35b3461024b57602036600319011261024b578035801515810361024b576118b6612291565b1561190957506118c461238b565b5f8051602061286a833981519152600160ff198254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b5f8051602061286a8339815191529081549060ff821615611957575060ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b604051638dfc202b60e01b8152fd5b3461024b575f36600319011261024b5761197e612291565b5f805160206128aa83398151915280548060d01c806119a7575b82546001600160a01b03168355005b4211156119e5575f8051602061280a83398151915280546001600160d01b031660309290921b6001600160d01b0319169190911790555b8180611998565b507f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec55f80a16119de565b3461024b575f36600319011261024b576040515f905f54611a2f81611c1b565b808352602091600190818116908115610c915750600114611a5a5761024784610c4881880382611c83565b5f808052838120939550925b828410611a82575050508161024793610c489282010193610c38565b8054858501870152928501928101611a66565b3461024b5760208060031936011261024b57611aaf611bef565b91611ab8612063565b6001600160a01b038381169190338314159081611b4b575b50611b3d57505f52600660205260405f2054905f5b828110611aff5760015f8051602061288a83398151915255005b80611b0c60019286611e0d565b805f5260058452611b1f60405f206120c3565b80611b2d575b505001611ae5565b611b3691612169565b8580611b25565b6040516282b42960e81b8152fd5b90505f805160206128aa833981519152541633141585611ad0565b3461024b575f36600319011261024b576020604051620697808152f35b903461024b57602036600319011261024b57359063ffffffff60e01b821680920361024b576020916318a4c3c360e11b8114908115611bc4575b5015158152f35b637965db0b60e01b811491508115611bde575b5083611bbd565b6301ffc9a760e01b14905083611bd7565b600435906001600160a01b038216820361024b57565b602435906001600160a01b038216820361024b57565b90600182811c92168015611c49575b6020831014611c3557565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611c2a565b61014081019081106001600160401b03821117611c6f57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b03821117611c6f57604052565b602080825282518183018190529093925f5b828110611cd757505060409293505f838284010152601f8019910116010190565b818101860151848201604001528501611cb6565b3461024b57604036600319011261024b57611d04611bef565b50604051630280e1e560e61b8152600490fd5b6001600160401b038111611c6f57601f01601f191660200190565b81601f8201121561024b57803590611d4982611d17565b92611d576040519485611c83565b8284526020838301011161024b57815f926020809301838601378301015290565b919091610140810192805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c08101516003811015611df95760c083015260e081015160018060a01b0380911660e084015261010090818301511690830152610120809101511515910152565b634e487b7160e01b5f52602160045260245ffd5b604051606091821b6001600160601b031916602082019081526034808301949094529281529081016001600160401b03811182821017611c6f5760405251902090565b91908203918211611e5d57565b634e487b7160e01b5f52601160045260245ffd5b6002546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa801561151c575f90611ebb575b611eb8915060035490611e50565b90565b506020813d602011611ee7575b81611ed560209383611c83565b8101031261024b57611eb89051611eaa565b3d9150611ec8565b60405190611efc82611c53565b5f610120838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201520152565b611f41611eef565b505f52600560205260405f2060405190611f5a82611c53565b8054825260018101546020830152600281015460408301526003810154606083015260048101546080830152600581015460a0830152600681015460ff81166003811015611df95760c084015260081c6001600160a01b0390811660e084015260079091015490811661010083015260a01c60ff16151561012082015290565b91908201809211611e5d57565b5f805160206128aa833981519152548060d01c801515908161202e575b50156120185760a01c65ffffffffffff1690565b505f8051602061280a8339815191525460d01c90565b905042115f612004565b5f8051602061280a833981519152546001600160a01b0381169160a09190911c65ffffffffffff1690565b5f8051602061288a83398151915260028154146120805760029055565b604051633ee5aeb560e01b8152600490fd5b811561209c570490565b634e487b7160e01b5f52601260045260245ffd5b81810292918115918404141715611e5d57565b80544210801561214f575b156120d857505f90565b6001810154906002810154916120ee8382611fda565b421061210a5750611eb891506005600482015491015490611e50565b612146611eb89361214161213761212360059542611e50565b61213260038801548092612092565b6120b0565b60048601546120b0565b612092565b91015490611e50565b5060ff6006820154166003811015611df9576002146120ce565b90815f526005602052604091825f2090600682019060018060a01b0392825484805f805160206128aa833981519152541633149160081c163314159081612288575b50612278576121b9816120c3565b8511612267579260209261225a865f98979460055f8051602061282a83398151915298016121e8838254611fda565b90556121f682600354611e50565b60035584845460081c16808b5260078852612214838b8d2054611e50565b908b5260078852898b205584845460081c1680917f62eb4bd96d9a7a66875a9f46f9f9d8bf6cfed3fe0578671b752301427d2a4f66898c51868152a38460025416612320565b5460081c169351908152a3565b855163110c741b60e31b8152600490fd5b85516282b42960e81b8152600490fd5b9050155f6121ab565b335f9081525f805160206127ea833981519152602052604090205460ff16156122b657565b60405163e2517d3f60e01b81523360048201525f6024820152604490fd5b805f525f8051602061284a83398151915260205260405f20335f5260205260ff60405f205416156123025750565b6044906040519063e2517d3f60e01b82523360048301526024820152fd5b60405163a9059cbb60e01b60208201526001600160a01b03909216602483015260448083019390935291815260808101916001600160401b03831182841017611c6f5761236f926040526123b5565b565b91909165ffffffffffff80809416911601918211611e5d57565b60ff5f8051602061286a83398151915254166123a357565b60405163d93c066560e01b8152600490fd5b5f806123fd9260018060a01b03169360208151910182865af13d1561244f573d906123df82611d17565b916123ed6040519384611c83565b82523d5f602084013e5b83612786565b805190811515918261242b575b50506124135750565b60249060405190635274afe760e01b82526004820152fd5b819250906020918101031261024b576020015180159081150361024b575f8061240a565b6060906123f7565b5f805160206128aa83398151915280546001600160a01b03929190838116612496576001600160a01b03191692821692909217909155611eb890612571565b604051631fe1e13d60e11b8152600490fd5b90611eb8918015806124db575b15612707575f805160206128aa83398151915280546001600160a01b0319169055612707565b505f805160206128aa833981519152546001600160a01b038381169116146124b5565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561252d57565b604051631afcd79f60e31b8152600490fd5b65ffffffffffff90818111612552571690565b604490604051906306dfcc6560e41b8252603060048301526024820152fd5b6001600160a01b03165f8181525f805160206127ea83398151915260205260409020545f8051602061284a8339815191529060ff166125f5575f805260205260405f20815f5260205260405f20600160ff1982541617905533905f7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50505f90565b90815f525f8051602061284a8339815191528060205260405f209160018060a01b031691825f5260205260ff60405f205416155f1461267e57825f5260205260405f20815f5260205260405f20600160ff1982541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b5050505f90565b6001600160a01b03165f8181525f805160206127ea83398151915260205260409020545f8051602061284a8339815191529060ff16156125f5575f805260205260405f20815f5260205260405f2060ff19815416905533905f7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8180a4600190565b90815f525f8051602061284a8339815191528060205260405f209160018060a01b031691825f5260205260ff60405f2054165f1461267e57825f5260205260405f20815f5260205260405f2060ff19815416905533917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b906127ad575080511561279b57805190602001fd5b604051630a12f52160e11b8152600490fd5b815115806127e0575b6127be575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156127b656feb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97deef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698400ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00eef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401a26469706673582212200a8601d3b8774fd866bb030321464e48387648dc6cf75dae075db4222c7d42de64736f6c63430008170033