0 txs
6 calls
constructor
No constructor.
functions
CFO_ROLE
viewfunction CFO_ROLE() view returns (bytes32)
cfo
viewfunction cfo() view returns (address)
decimals
viewfunction decimals() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
emmet
viewfunction emmet() view returns (address emmet, uint256 minAmount, uint256 fee)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
HALF
viewfunction HALF() view returns (uint128)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (bytes32)
manager
viewfunction manager() view returns (address)
metrics
viewfunction metrics() view returns (uint128 locked, uint128 rewards, uint128 claimed, uint128 delta)
paused
viewfunction paused() view returns (bool)
posCount
viewfunction posCount(address) view returns (uint256)
positions
viewfunction positions(address, uint256) view returns (uint8 period, uint128 start, uint128 maturity, uint128 locked, uint128 claimed, uint128 unclaimed)
positionsAndRewards
viewfunction positionsAndRewards(address staker) view returns (tuple[] ps, uint128 staked, uint128 ttlRewards, uint128 availableRewards)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
QUARTER
viewfunction QUARTER() view returns (uint128)
QUARTERS3
viewfunction QUARTERS3() view returns (uint128)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
terms
viewfunction terms(uint8) view returns (uint16)
token
viewfunction token() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
YEAR
viewfunction YEAR() view returns (uint128)
_admin_init
nonpayablefunction _admin_init(address cfo_, address manager_)
coinWithdraw
nonpayablefunction coinWithdraw()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address cfo_, address manager_, address token_, address emmet_, bool isProduction)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
stake
payablefunction stake(uint128 amount, uint8 period) payable
unpause
nonpayablefunction unpause()
unstake
nonpayablefunction unstake(uint16 posIndex)
updateCFO
nonpayablefunction updateCFO(address candidate)
updateEmmet
nonpayablefunction updateEmmet(uint256 minAmount, uint256 fee)
updateManager
nonpayablefunction updateManager(address candidate)
updateTerms
nonpayablefunction updateTerms(uint8 period, uint16 percentage)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawExcess
nonpayablefunction withdrawExcess()
withdrawRewards
nonpayablefunction withdrawRewards(uint16 posIndex)
events
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)
RoleUdated
event RoleUdated(address old, address updated, string role)
Staked
event Staked(address indexed staker, uint8 period, uint128 amount)
TermsUpdated
event TermsUpdated(uint8 period, uint16 percentage)
Unpaused
event Unpaused(address account)
Unstaked
event Unstaked(address indexed staker, uint16 posIndex, uint128 amount, uint128 rewards)
UpdatesMinEmmetAmount
event UpdatesMinEmmetAmount(uint16 newAmount)
Upgraded
event Upgraded(address indexed implementation)
Withdraw
event Withdraw(string symbol, address recepient)
WithdrawnRewards
event WithdrawnRewards(address indexed staker, uint16 posIndex, uint128 rewards)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a06040523060805234801561001457600080fd5b5060805161401a61003e60003960008181612891015281816128ba0152612a6d015261401a6000f3fe6080604052600436106102be5760003560e01c8063839145401161016e578063c1be6677116100cb578063ec87621c1161007f578063fc0c546a11610064578063fc0c546a14610980578063fc5b5fda146109a0578063ff14957a146109c057600080fd5b8063ec87621c14610937578063edfd36cd1461096b57600080fd5b8063c40a9a78116100b0578063c40a9a78146108aa578063d547741f146108f7578063dda920441461091757600080fd5b8063c1be667714610812578063c264a0631461089557600080fd5b80639f6f50ed11610122578063a217fddf11610107578063a217fddf1461077a578063a83a119a1461078f578063ad3cb1cc146107bc57600080fd5b80639f6f50ed146106da578063a04748f61461070e57600080fd5b806389712b351161015357806389712b35146106255780638aec2e671461064557806391d148541461067557600080fd5b806383914540146105e95780638456cb591461061057600080fd5b806336568abe1161021c57806358aba00f116101d05780636ac4172b116101b55780636ac4172b146105655780637a8fdf8a146105a95780637f1bb2a9146105c957600080fd5b806358aba00f1461050e5780635c975abb1461052e57600080fd5b8063481c6a7511610201578063481c6a75146104c65780634f1ef286146104e657806352d1902d146104f957600080fd5b806336568abe146104915780633f4ba83a146104b157600080fd5b80631ed20347116102735780632f2ff15d116102585780632f2ff15d1461042e578063313ce5671461044e57806332c991b51461046a57600080fd5b80631ed2034714610399578063248a9ca3146103d157600080fd5b8063038c0f77116102a4578063038c0f7714610321578063070d8d91146103595780630f86de2e1461037957600080fd5b806246aba3146102ca57806301ffc9a7146102ec57600080fd5b366102c557005b600080fd5b3480156102d657600080fd5b506102ea6102e5366004613968565b6109d3565b005b3480156102f857600080fd5b5061030c610307366004613983565b610e25565b60405190151581526020015b60405180910390f35b34801561032d57600080fd5b50600254610341906001600160801b031681565b6040516001600160801b039091168152602001610318565b34801561036557600080fd5b50600354610341906001600160801b031681565b34801561038557600080fd5b506102ea610394366004613968565b610ebe565b3480156103a557600080fd5b506000546103b9906001600160a01b031681565b6040516001600160a01b039091168152602001610318565b3480156103dd57600080fd5b506104206103ec3660046139c5565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610318565b34801561043a57600080fd5b506102ea6104493660046139f5565b6110c1565b34801561045a57600080fd5b50610420670de0b6b3a764000081565b34801561047657600080fd5b5060025461034190600160801b90046001600160801b031681565b34801561049d57600080fd5b506102ea6104ac3660046139f5565b61110b565b3480156104bd57600080fd5b506102ea61115c565b3480156104d257600080fd5b506001546103b9906001600160a01b031681565b6102ea6104f4366004613a37565b611196565b34801561050557600080fd5b506104206111b5565b34801561051a57600080fd5b506102ea610529366004613af9565b6111e4565b34801561053a57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661030c565b34801561057157600080fd5b50610596610580366004613b23565b600c6020526000908152604090205461ffff1681565b60405161ffff9091168152602001610318565b3480156105b557600080fd5b506102ea6105c4366004613af9565b611399565b3480156105d557600080fd5b506102ea6105e4366004613b3e565b61154e565b3480156105f557600080fd5b5060035461034190600160801b90046001600160801b031681565b34801561061c57600080fd5b506102ea611607565b34801561063157600080fd5b506102ea610640366004613b60565b611641565b34801561065157600080fd5b50610665610660366004613af9565b611779565b6040516103189493929190613bc2565b34801561068157600080fd5b5061030c6106903660046139f5565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156106e657600080fd5b506104207fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c3281565b34801561071a57600080fd5b50600454600554610747916001600160801b0380821692600160801b928390048216928183169291041684565b604080516001600160801b0395861681529385166020850152918416918301919091529091166060820152608001610318565b34801561078657600080fd5b50610420600081565b34801561079b57600080fd5b506104206107aa366004613af9565b600a6020526000908152604090205481565b3480156107c857600080fd5b506108056040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516103189190613cae565b34801561081e57600080fd5b5061088361082d366004613ce1565b600b60209081526000928352604080842090915290825290208054600182015460029092015460ff8216926001600160801b0361010090930483169281811692600160801b928390048216928183169291041686565b60405161031896959493929190613d0b565b3480156108a157600080fd5b506102ea611a97565b3480156108b657600080fd5b506007546008546009546108d2926001600160a01b0316919083565b604080516001600160a01b039094168452602084019290925290820152606001610318565b34801561090357600080fd5b506102ea6109123660046139f5565b611be2565b34801561092357600080fd5b506102ea610932366004613d52565b611c26565b34801561094357600080fd5b506104207f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b34801561097757600080fd5b506102ea611e43565b34801561098c57600080fd5b506006546103b9906001600160a01b031681565b3480156109ac57600080fd5b506102ea6109bb366004613d8a565b611f9c565b6102ea6109ce366004613df3565b612224565b6109db6122d5565b6109e3612331565b336000908152600b6020908152604080832061ffff8516845290915290206001810154600160801b90046001600160801b0316610a675760405162461bcd60e51b815260206004820152601260248201527f4e6f7468696e6720746f20756e7374616b65000000000000000000000000000060448201526064015b60405180910390fd5b60018101546040805160c081019091528254600160801b9092046001600160801b031691600091610b15913391908690829060ff166003811115610aad57610aad613b8a565b6003811115610abe57610abe613b8a565b815281546001600160801b036101009091048116602083015260018301548082166040840152600160801b908190048216606084015260029093015480821660808401529290920490911660a090910152866123b2565b336000908152600b60209081526040808320600a909252822054929450925090610b4190600190613e41565b815260208082019290925260409081016000908120338252600b845282822061ffff89168352909352208154815460ff90911690829060ff19166001836003811115610b8f57610b8f613b8a565b0217905550815481547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff16610100918290046001600160801b039081169092021782556001808401805482850180549185166fffffffffffffffffffffffffffffffff19928316811782559254600160801b9081900486168102909317905560029586018054969095018054968516969091168617815593548190049092169091029092179055336000908152600b60209081526040808320600a9092528220549092610c5b91613e41565b81526020808201929092526040908101600090812080547fffffffffffffffffffffffffffffff000000000000000000000000000000000016815560018082018390556002909101829055338252600a9093529081208054909190610cc1908490613e41565b909155505060058054829190600090610ce49084906001600160801b0316613e54565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555081600460000160008282829054906101000a90046001600160801b0316610d2f9190613e74565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550610d5b61247a565b600580546001600160801b03928316600160801b029216919091179055610da6670de0b6b3a7640000610d8e8385613e54565b6001600160801b0316610da19190613e94565b612516565b6040805161ffff861681526001600160801b038481166020830152831681830152905133917f42406977ad280e1bba54a6f10601d8415ef26f7f1db4127006972b49f8fde6e2919081900360600190a2505050610e2260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610eb857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b610ec66122d5565b610ece612331565b336000818152600b6020908152604080832061ffff86168452909152808220815160c0810190925280549093610f809290918590829060ff166003811115610f1857610f18613b8a565b6003811115610f2957610f29613b8a565b815281546001600160801b036101009091048116602083015260018301548082166040840152600160801b908190048216606084015260029093015480821660808401529290920490911660a090910152856123b2565b60028401805491935083925090600090610fa49084906001600160801b0316613e54565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555080600460010160008282829054906101000a90046001600160801b0316610fef9190613e54565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555061101b61247a565b600580546001600160801b03928316600160801b0290831617905561104f90610da190670de0b6b3a7640000908416613e94565b6040805161ffff851681526001600160801b038316602082015233917f7becb986629cddb1618016434c7279248f20138254abe7adef3792c427bf0ada910160405180910390a25050610e2260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546110fb81612633565b611105838361263d565b50505050565b6001600160a01b038116331461114d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111578282612713565b505050565b6111646127b9565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861118e81612633565b610e22612814565b61119e612886565b6111a782612956565b6111b18282612961565b5050565b60006111bf612a62565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3360009081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff166112875760405162461bcd60e51b8152602060048201526024808201527f4261736541646d696e3a20556e617574686f72697a6564204d616e616765722060448201527f63616c6c000000000000000000000000000000000000000000000000000000006064820152608401610a5e565b61129081612ac4565b600154604080516001600160a01b039283168152918316602083015260608282018190526007908301527f4d616e61676572000000000000000000000000000000000000000000000000006080830152517f0cedc2dfe436c9a0d7a26b8dad9e3235bf5a46ea0626be5a0453553850f5ac1e9181900360a00190a1600154611342907f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08906001600160a01b0316612713565b506001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556111b1907f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b089061263d565b3360009081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff1661143c5760405162461bcd60e51b8152602060048201526024808201527f4261736541646d696e3a20556e617574686f72697a6564204d616e616765722060448201527f63616c6c000000000000000000000000000000000000000000000000000000006064820152608401610a5e565b61144581612ac4565b600054604080516001600160a01b039283168152918316602083015260608282018190526003908301527f43464f00000000000000000000000000000000000000000000000000000000006080830152517f0cedc2dfe436c9a0d7a26b8dad9e3235bf5a46ea0626be5a0453553850f5ac1e9181900360a00190a16000546114f7907fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c32906001600160a01b0316612713565b506000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556111b1907fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c329061263d565b3360009081527fc33c705e25bc2220b8b7bc5991fc7eb9fd02e7f6db432cb76b4f1d5b507ab9a9602052604090205460ff166115cc5760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a20556e617574686f72697a65642043464f2063616c6c6044820152606401610a5e565b6115d4612331565b600882905560098190556111b160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61160f6122d5565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861163981612633565b610e22612b1a565b3360009081527fc33c705e25bc2220b8b7bc5991fc7eb9fd02e7f6db432cb76b4f1d5b507ab9a9602052604090205460ff166116bf5760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a20556e617574686f72697a65642043464f2063616c6c6044820152606401610a5e565b6116c7612331565b80600c60008460038111156116de576116de613b8a565b60038111156116ef576116ef613b8a565b815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055507ff6e163e22225803668f957cad18f59e97ddeb9f3342d4fe4ebed8cda224b22198282604051611748929190613eab565b60405180910390a16111b160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6001600160a01b0381166000908152600a6020526040812054606091908190819080820361180b5760408051600180825281830190925290816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816117b6579050506000806000945094509450945050611a90565b8067ffffffffffffffff81111561182457611824613a21565b60405190808252806020026020018201604052801561188457816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816118425790505b506001600160a01b0387166000908152600b6020526040812091965080805b84811015611a875760008181526020859052604090819020815160c081019092528054829060ff1660038111156118dc576118dc613b8a565b60038111156118ed576118ed613b8a565b815281546001600160801b036101009091048116602083015260018301548082166040840152600160801b908190048216606084015260029093015480821660808401529290920490911660a09091015289518a908390811061195257611952613eca565b602090810291909101810191909152600082815290859052604090206001015461198c90600160801b90046001600160801b031689613e54565b60008281526020869052604090819020815160c081019092528054929a50611a30928d929190829060ff1660038111156119c8576119c8613b8a565b60038111156119d9576119d9613b8a565b815281546001600160801b036101009091048116602083015260018301548082166040840152600160801b908190048216606084015260029093015480821660808401529290920490911660a090910152836123b2565b809750819850505085898281518110611a4b57611a4b613eca565b60209081029190910101516001600160801b0390911660a090910152611a718784613e54565b9250611a7d8683613e54565b91506001016118a3565b50909450925050505b9193509193565b3360009081527fc33c705e25bc2220b8b7bc5991fc7eb9fd02e7f6db432cb76b4f1d5b507ab9a9602052604090205460ff16611b155760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a20556e617574686f72697a65642043464f2063616c6c6044820152606401610a5e565b611b1d612331565b6000611b27612b75565b6005546004549192506000916001600160801b0391821691611b5391600160801b810482169116613e54565b611b5d9190613e74565b6001600160801b03169050611b7a670de0b6b3a764000082613e94565b821115611bb5576000611b95670de0b6b3a764000083613e94565b611b9f9084613e41565b9050611bb3816001600160801b0316612516565b505b5050611be060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611c1c81612633565b6111058383612713565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015611c715750825b905060008267ffffffffffffffff166001148015611c8e5750303b155b905081158015611c9c575080155b15611cd3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315611d1e57845468ff00000000000000001916680100000000000000001785555b611d2787612ac4565b611d3086612ac4565b611d38612be7565b611d40612bef565b611d48612be7565b611d50612bff565b611d5b60003361263d565b50611d867fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c328861263d565b50611db17f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088761263d565b50600080546001600160a01b03808a1673ffffffffffffffffffffffffffffffffffffffff199283161790925560018054928916929091169190911790558315611e3a57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c32611e6d81612633565b6040517f436f696e205769746864726177000000000000000000000000000000000000008152479060009033908390600d0160006040518083038185875af1925050503d8060008114611edc576040519150601f19603f3d011682016040523d82523d6000602084013e611ee1565b606091505b5050905080611f325760405162461bcd60e51b815260206004820152601460248201527f436f696e207769746864726177206661696c65640000000000000000000000006044820152606401610a5e565b60408051818152600b818301527f4e617469766520436f696e000000000000000000000000000000000000000000606082015233602082015290517f8703deb082bbe9dd18bf858af977f1d7ced58bd7803c949a6e1011ae2d79f1ac9181900360800190a1505050565b611fa68585611c26565b6000836001600160a01b03163b116120005760405162461bcd60e51b815260206004820152601760248201527f546f6b656e206973206e6f74206120636f6e74726163740000000000000000006044820152606401610a5e565b600680546001600160a01b0385811673ffffffffffffffffffffffffffffffffffffffff19928316179092556007805492851692909116919091179055682b5e3af16b1880000060085566044364c5bb0000600955600c6020527f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e880546109607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000918216179091557fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c8054610c809083161790557f5d6016397a73f5e079297ac5a36fef17b4d9c3831618e63ab105738020ddd7208054610fa090831617905560036000527fc0da782485e77ae272268ae0a3ff44c1552ecb60b3743924de17a815e0a3cfd780549091166113881790558061213e57611590612143565b62794a005b600280546fffffffffffffffffffffffffffffffff191662ffffff929092169190911790558061217557612ae461217a565b62f142805b62ffffff16600260106101000a8154816001600160801b0302191690836001600160801b03160217905550806121b2576140746121b8565b63016a8c805b600380546fffffffffffffffffffffffffffffffff191663ffffffff92909216919091179055806121eb576155c86121f1565b6301e285005b63ffffffff16600360106101000a8154816001600160801b0302191690836001600160801b031602179055505050505050565b61222c6122d5565b612234612331565b61223c612c0f565b61225f61225a670de0b6b3a76400006001600160801b038516613e94565b612c6d565b6122698282612e62565b336001600160a01b03167f5e3e04ca0b53c19e074a0e69bb4245bc1d524a07ba621d70195e55a35e55fd6882846040516122a4929190613ee0565b60405180910390a26111b160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611be0576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016123ac576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b600080670de0b6b3a76400006123c88685613059565b6123d29190613f1a565b91506000429050806001600160801b031685604001516001600160801b031611156124345760008560200151826124099190613e74565b90506124188660000151613250565b6124228286613f2e565b61242c9190613f59565b925050612438565b8291505b84608001516001600160801b0316826001600160801b0316111561246c5760808501516124659083613e74565b9150612471565b600091505b50935093915050565b600080612485612b75565b6005546004549192506000916001600160801b03918216916124b191600160801b810482169116613e54565b6124bb9190613e74565b6001600160801b031690506124d8670de0b6b3a764000082613e94565b82106124e75760009250505090565b670de0b6b3a7640000826124fb8284613e94565b6125059190613e41565b61250f9190613f59565b9250505090565b6006546040516370a0823160e01b81523060048201526001600160a01b0390911690829082906370a0823190602401602060405180830381865afa158015612562573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125869190613f7f565b10156125f95760405162461bcd60e51b8152602060048201526024808201527f4e6f7420656e6f75676820746f6b656e7320746f2073656c6c202f207472616e60448201527f73666572000000000000000000000000000000000000000000000000000000006064820152608401610a5e565b6111b16001600160a01b0382163384613354565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b610e2281336133c8565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16612702576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556126b83390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610eb8565b6000915050610eb8565b5092915050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615612702576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610eb8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611be0576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61281c6127b9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061291f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166129137f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611be0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111b181612633565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156129bb575060408051601f3d908101601f191682019092526129b891810190613f7f565b60015b6129fc576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a5e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612a58576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610a5e565b6111578383613455565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611be0576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116610e225760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a2061646472657373207a65726f2070726f76696465646044820152606401610a5e565b612b226122d5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612868565b6006546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015612bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be29190613f7f565b905090565b611be06134ab565b612bf76134ab565b611be0613512565b612c076134ab565b611be0613545565b612c1761354d565b611be057600954341015611be05760405162461bcd60e51b815260206004820152601060248201527f496e73756666696369656e7420424e42000000000000000000000000000000006044820152606401610a5e565b6006546040516370a0823160e01b81523360048201526001600160a01b0390911690829082906370a0823190602401602060405180830381865afa158015612cb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdd9190613f7f565b1015612d505760405162461bcd60e51b8152602060048201526024808201527f546f6b656e73616c653a20496e73756666696369656e7420636173682062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610a5e565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015282906001600160a01b0383169063dd62ed3e90604401602060405180830381865afa158015612db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd99190613f7f565b1015612e4d5760405162461bcd60e51b815260206004820152602660248201527f546f6b656e73616c653a20496e73756666696369656e74206361736820616c6c60448201527f6f77616e636500000000000000000000000000000000000000000000000000006064820152608401610a5e565b6111b16001600160a01b0382163330856135db565b336000908152600a6020908152604080832054600b835281842081855290925290912080546001600160801b0342908116610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff909216919091178255612eca84613250565b612ed49082613e54565b6001830180546fffffffffffffffffffffffffffffffff19166001600160801b03928316178082558792601091612f14918591600160801b900416613e54565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550838260000160006101000a81548160ff02191690836003811115612f5e57612f5e613b8a565b0217905550336000908152600a60205260408120805460019290612f83908490613f98565b909155505060048054869190600090612fa69084906001600160801b0316613e54565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550670de0b6b3a7640000612fdd3385613059565b612fe79190613f1a565b60048054601090613009908490600160801b90046001600160801b0316613e54565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555061303561247a565b600580546001600160801b03928316600160801b0292169190911790555050505050565b6001600160a01b0382166000908152600a602052604081205461ffff8316106130c45760405162461bcd60e51b815260206004820152601860248201527f7374616b6520696e646578206f7574206f662072616e676500000000000000006044820152606401610a5e565b6001600160a01b0383166000908152600b6020908152604080832061ffff86168452909152808220815160c081019092528054829060ff16600381111561310d5761310d613b8a565b600381111561311e5761311e613b8a565b815281546001600160801b036101009091048116602083015260018301548082166040840152600160801b908190048216606080850191909152600290940154808316608085015204811660a090920191909152908201519192501660000361318b576000915050610eb8565b61271061ffff16600360109054906101000a90046001600160801b03166001600160801b0316670de0b6b3a7640000600c6000856000015160038111156131d4576131d4613b8a565b60038111156131e5576131e5613b8a565b8152602081019190915260400160002054845161ffff9091169061320890613250565b85606001516132179190613f2e565b6132219190613f2e565b6001600160801b03166132349190613e94565b61323e9190613f1a565b6132489190613f1a565b949350505050565b60008082600381111561326557613265613b8a565b0361327b5750506002546001600160801b031690565b600182600381111561328f5761328f613b8a565b036132ac575050600254600160801b90046001600160801b031690565b60028260038111156132c0576132c0613b8a565b036132d65750506003546001600160801b031690565b60038260038111156132ea576132ea613b8a565b03613307575050600354600160801b90046001600160801b031690565b60405162461bcd60e51b815260206004820152601260248201527f556e737570706f7274656420706572696f6400000000000000000000000000006044820152606401610a5e565b919050565b6040516001600160a01b0383811660248301526044820183905261115791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613614565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166111b1576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610a5e565b61345e82613690565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156134a357611157828261372d565b6111b16137a3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611be0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61351a6134ab565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b61260d6134ab565b6007546040516370a0823160e01b81523360048201526000916001600160a01b031690829082906370a0823190602401602060405180830381865afa15801561359a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135be9190613f7f565b6008549091508110156135d257600061250f565b60019250505090565b6040516001600160a01b0384811660248301528381166044830152606482018390526111059186918216906323b872dd90608401613381565b60006136296001600160a01b038416836137db565b9050805160001415801561364e57508080602001905181019061364c9190613fab565b155b15611157576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610a5e565b806001600160a01b03163b6000036136df576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610a5e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161374a9190613fc8565b600060405180830381855af49150503d8060008114613785576040519150601f19603f3d011682016040523d82523d6000602084013e61378a565b606091505b509150915061379a8583836137f0565b95945050505050565b3415611be0576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606137e98383600061385e565b9392505050565b6060826138055761380082613914565b6137e9565b815115801561381c57506001600160a01b0384163b155b1561270c576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610a5e565b60608147101561389c576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610a5e565b600080856001600160a01b031684866040516138b89190613fc8565b60006040518083038185875af1925050503d80600081146138f5576040519150601f19603f3d011682016040523d82523d6000602084013e6138fa565b606091505b509150915061390a8683836137f0565b9695505050505050565b8051156139245780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803561ffff8116811461334f57600080fd5b60006020828403121561397a57600080fd5b6137e982613956565b60006020828403121561399557600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146137e957600080fd5b6000602082840312156139d757600080fd5b5035919050565b80356001600160a01b038116811461334f57600080fd5b60008060408385031215613a0857600080fd5b82359150613a18602084016139de565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215613a4a57600080fd5b613a53836139de565b9150602083013567ffffffffffffffff80821115613a7057600080fd5b818501915085601f830112613a8457600080fd5b813581811115613a9657613a96613a21565b604051601f8201601f19908116603f01168101908382118183101715613abe57613abe613a21565b81604052828152886020848701011115613ad757600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600060208284031215613b0b57600080fd5b6137e9826139de565b80356004811061334f57600080fd5b600060208284031215613b3557600080fd5b6137e982613b14565b60008060408385031215613b5157600080fd5b50508035926020909101359150565b60008060408385031215613b7357600080fd5b613b7c83613b14565b9150613a1860208401613956565b634e487b7160e01b600052602160045260246000fd5b60048110613bbe57634e487b7160e01b600052602160045260246000fd5b9052565b608080825285518282018190526000919060a090818501906020808b01865b83811015613c46578151613bf6868251613ba0565b808401516001600160801b03908116878601526040808301518216908801526060808301518216908801528882015181168988015290870151168686015260c09094019390820190600101613be1565b5050506001600160801b0389166020870152509250613c63915050565b6001600160801b03841660408301526001600160801b038316606083015295945050505050565b60005b83811015613ca5578181015183820152602001613c8d565b50506000910152565b6020815260008251806020840152613ccd816040850160208701613c8a565b601f01601f19169190910160400192915050565b60008060408385031215613cf457600080fd5b613cfd836139de565b946020939093013593505050565b60c08101613d198289613ba0565b6001600160801b03968716602083015294861660408201529285166060840152908416608083015290921660a090920191909152919050565b60008060408385031215613d6557600080fd5b613d6e836139de565b9150613a18602084016139de565b8015158114610e2257600080fd5b600080600080600060a08688031215613da257600080fd5b613dab866139de565b9450613db9602087016139de565b9350613dc7604087016139de565b9250613dd5606087016139de565b91506080860135613de581613d7c565b809150509295509295909350565b60008060408385031215613e0657600080fd5b82356001600160801b0381168114613e1d57600080fd5b9150613a1860208401613b14565b634e487b7160e01b600052601160045260246000fd5b81810381811115610eb857610eb8613e2b565b6001600160801b0381811683821601908082111561270c5761270c613e2b565b6001600160801b0382811682821603908082111561270c5761270c613e2b565b8082028115828204841417610eb857610eb8613e2b565b60408101613eb98285613ba0565b61ffff831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b60408101613eee8285613ba0565b6001600160801b03831660208301529392505050565b634e487b7160e01b600052601260045260246000fd5b600082613f2957613f29613f04565b500490565b6001600160801b03818116838216028082169190828114613f5157613f51613e2b565b505092915050565b60006001600160801b0380841680613f7357613f73613f04565b92169190910492915050565b600060208284031215613f9157600080fd5b5051919050565b80820180821115610eb857610eb8613e2b565b600060208284031215613fbd57600080fd5b81516137e981613d7c565b60008251613fda818460208701613c8a565b919091019291505056fea26469706673582212204e0d5858bf6b5395a46e287f5cf1aff6c47d3ebb62c025e2b8399af472b1f40664736f6c63430008180033