0 txs
188 calls
constructor
constructor()
functions
actionQueue
viewfunction actionQueue() view returns (address)
bonds
viewfunction bonds(uint256) view returns (address owner, uint256 principal, uint40 startTime, uint40 maturity, uint24 plan_id, uint256 bond_id, uint256 harvested, address referrer, uint256 bonus_refer, bool exited, bool early)
kipToken
viewfunction kipToken() view returns (address)
nextBondId
viewfunction nextBondId() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingInterest
viewfunction pendingInterest(uint256 bondId) view returns (uint256)
plans
viewfunction plans(uint24) view returns (uint40 duration, uint24 apy, uint40 startTime, uint40 deadline, uint40 harvestDelay, uint40 earlyExitDelay, uint40 redeemDelay, uint256 earlyExitPenaltyRate, uint256 referralThreshold, uint256 referralRewardRate)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
referralTotalEligiblePrincipal
viewfunction referralTotalEligiblePrincipal(address) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
userTotalPrincipal
viewfunction userTotalPrincipal(address) view returns (uint256)
addBond
nonpayablefunction addBond(tuple p, bytes32 referenceNo, uint24 _type1, bool recalculateTotalPrincipal)
buyBond
nonpayablefunction buyBond(tuple p)
changerOwner
nonpayablefunction changerOwner(uint256 bondId, address newOwner)
earlyExit
nonpayablefunction earlyExit(bool queue, uint256 bondId, address recipient)
harvest
nonpayablefunction harvest(bool queue, uint256 bondId, address recipient)
initialize
nonpayablefunction initialize(address _kipToken, address _actionQueue, address _owner)
pause
nonpayablefunction pause()
recoverToken
nonpayablefunction recoverToken(address _token, uint256 _amount)
redeem
nonpayablefunction redeem(bool queue, uint256 bondId, address recipient)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updatePlan
nonpayablefunction updatePlan(uint24 plan_id, tuple _plan)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
BondUpdated
event BondUpdated(bytes32 referenceNo, uint24 type1, (address owner, uint256 principal, uint40 startTime, uint40 maturity, uint24 plan_id, uint256 bond_id, uint256 harvested, address referrer, uint256 bonus_refer, bool exited, bool early) _bond)
Initialized
event Initialized(uint64 version)
InterestHarvested
event InterestHarvested(uint256 indexed bondId, uint256 amount, address indexed referrer, uint256 bonus)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyExecute
error AlreadyExecute()
AlreadyExited
error AlreadyExited()
BondAlreadyMatured
error BondAlreadyMatured()
BondNotYetMatured
error BondNotYetMatured()
EarlyExitNotAvailable
error EarlyExitNotAvailable()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
HarvestNotAvailable
error HarvestNotAvailable()
HasEnd
error HasEnd()
InvalidAmount
error InvalidAmount()
InvalidInitialization
error InvalidInitialization()
InvalidPlan
error InvalidPlan()
NotBondOwner
error NotBondOwner()
NotInitializing
error NotInitializing()
NotStart
error NotStart()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
QueueHasEnd
error QueueHasEnd()
QueueNotInit
error QueueNotInit()
QueueNotStart
error QueueNotStart()
RedeemNotAvailable
error RedeemNotAvailable()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SelfReferral
error SelfReferral()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f80fd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516133ef6100f95f395f818161232f01528181612358015261249701526133ef5ff3fe60806040526004361061017b575f3560e01c8063715018a6116100cd578063ad3cb1cc11610087578063c0c53b8b11610062578063c0c53b8b1461060f578063c1a752101461062e578063ee53a4231461064d578063f2fde38b14610662575f80fd5b8063ad3cb1cc14610594578063b1a42e42146105d1578063b29a8140146105f0575f80fd5b8063715018a61461041e57806375e11e1f146104325780638456cb59146104515780638da5cb5b14610465578063a0810abd14610479578063ac13d48b146104a4575f80fd5b80634f1ef28611610138578063549652f911610113578063549652f9146102ac578063554ecbda146102cb5780635c975abb146102ea5780635f1c17c014610318575f80fd5b80634f1ef286146102665780634f6c50a61461027957806352d1902d14610298575f80fd5b80630174f2e91461017f5780632285c027146101a05780632fc11c0f146101db5780633a81f3a8146102085780633f4ba83a146102335780634215360314610247575b5f80fd5b34801561018a575f80fd5b5061019e610199366004612907565b610681565b005b3480156101ab575f80fd5b505f546101be906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101e6575f80fd5b506101fa6101f5366004612946565b610b78565b6040519081526020016101d2565b348015610213575f80fd5b506101fa61022236600461295d565b60056020525f908152604090205481565b34801561023e575f80fd5b5061019e610c86565b348015610252575f80fd5b5061019e610261366004612978565b610c98565b61019e6102743660046129a5565b61124c565b348015610284575f80fd5b5061019e610293366004612a86565b61126b565b3480156102a3575f80fd5b506101fa611298565b3480156102b7575f80fd5b5061019e6102c6366004612ac6565b6112b3565b3480156102d6575f80fd5b5061019e6102e5366004612907565b611419565b3480156102f5575f80fd5b505f8051602061337a8339815191525460ff1660405190151581526020016101d2565b348015610323575f80fd5b506103aa610332366004612946565b600360208190525f9182526040909120805460018201546002830154938301546004840154600585015460068601546007909601546001600160a01b0395861697949664ffffffffff80871697600160281b880490911696600160501b900462ffffff16959493169160ff808216916101009004168b565b604080516001600160a01b039c8d168152602081019b909b5264ffffffffff998a16908b015296909716606089015262ffffff94909416608088015260a087019290925260c086015290941660e08401526101008301939093521515610120820152901515610140820152610160016101d2565b348015610429575f80fd5b5061019e6118f7565b34801561043d575f80fd5b5061019e61044c366004612907565b611908565b34801561045c575f80fd5b5061019e611d56565b348015610470575f80fd5b506101be611d66565b348015610484575f80fd5b506101fa61049336600461295d565b60066020525f908152604090205481565b3480156104af575f80fd5b5061052b6104be366004612b20565b600460208190525f91825260409091208054600182015460028301546003840154939094015464ffffffffff8084169562ffffff600160281b86041695600160401b8604831695600160681b8104841695600160901b8204851695600160b81b909204851694169291908a565b6040805164ffffffffff9b8c16815262ffffff909a1660208b0152978a16978901979097529488166060880152928716608087015290861660a08601529490941660c084015260e0830193909352610100820192909252610120810191909152610140016101d2565b34801561059f575f80fd5b506105c4604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101d29190612b3b565b3480156105dc575f80fd5b5061019e6105eb366004612b70565b611d94565b3480156105fb575f80fd5b5061019e61060a366004612b9e565b611e2c565b34801561061a575f80fd5b5061019e610629366004612bc8565b611e50565b348015610639575f80fd5b506001546101be906001600160a01b031681565b348015610658575f80fd5b506101fa60025481565b34801561066d575f80fd5b5061019e61067c36600461295d565b611f98565b610689611fd5565b610691612005565b5f828152600360209081526040808320600281015462ffffff600160501b820416855260049093529220546106d79164ffffffffff600160901b90920482169116612c19565b64ffffffffff164210156106fe5760405163752f6d7560e11b815260040160405180910390fd5b600781015460ff161561072457604051631ecb2c4f60e31b815260040160405180910390fd5b5f606485156108145782546001600160a01b03163314610757576040516367dad94560e11b815260040160405180910390fd5b6107648360030154610b78565b91505f82116107a75760405162461bcd60e51b815260206004820152600a602482015269139bd25b9d195c995cdd60b21b60448201526064015b60405180910390fd5b600154835460405163010f83b560e11b81526001600160a01b039283169263021f076a926107e2929116908990869088905f90600401612c36565b5f604051808303815f87803b1580156107f9575f80fd5b505af115801561080b573d5f803e3d5ffd5b50505050610b5a565b600154604051631e9d5a6960e11b815262ffffff831660048201525f9182916001600160a01b0390911690633d3ab4d2906024016040805180830381865afa158015610862573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108869190612c7b565b915091505f8164ffffffffff161180156108a657505f8264ffffffffff16115b15610a9b5784546001600160a01b031633146108d5576040516367dad94560e11b815260040160405180910390fd5b60015485546040516353e9db7160e01b81526001600160a01b039182166004820152602481018a90525f9291909116906353e9db7190604401602060405180830381865afa158015610929573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094d9190612ca8565b9050805f0361096f57604051636705894d60e11b815260040160405180910390fd5b600154604051630f7921ed60e01b8152600481018390525f918291829182916001600160a01b0390911690630f7921ed9060240160c060405180830381865afa1580156109be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e29190612cbf565b955095509550955050508762ffffff168462ffffff1614610a1657604051636705894d60e11b815260040160405180910390fd5b8264ffffffffff16421015610a3e57604051630e3afac960e41b815260040160405180910390fd5b8164ffffffffff16421115610a665760405163096f845b60e01b815260040160405180910390fd5b805f03610a8657604051635711073360e11b815260040160405180910390fd5b610a918c8c8361203c565b5050505050610ac5565b84546001600160a01b03163314610aba5784546001600160a01b031695505b610ac587875f61203c565b600154855460405163010f83b560e11b81526001600160a01b039283169263021f076a92610b00929116908b9088905f908190600401612c36565b5f604051808303815f87803b158015610b17575f80fd5b505af1158015610b29573d5f803e3d5ffd5b50506040515f8051602061333a8339815191529250610b4f91505f906005908990612ddd565b60405180910390a150505b505050610b7360015f8051602061339a83398151915255565b505050565b5f818152600360205260408120600781015460ff1615610b9a57505f92915050565b60028101545f90600160281b900464ffffffffff16421015610bd1576002820154610bcc9064ffffffffff1642612e05565b610bf8565b6002820154600160501b900462ffffff165f9081526004602052604090205464ffffffffff165b90506301e133805f610c0c82612710612e18565b600285015462ffffff600160501b90910481165f9081526004602052604090205460018701548692610c4692600160281b90041690612e18565b610c509190612e18565b610c5a9190612e2f565b905083600401548111610c6d575f610c7c565b6004840154610c7c9082612e05565b9695505050505050565b610c8e6121f7565b610c96612229565b565b610ca0611fd5565b60045f610cb06020840184612b20565b62ffffff908116825260208201929092526040015f90812054600160281b90049091169003610cf2576040516321f2425960e01b815260040160405180910390fd5b80602001355f03610d165760405163162908e360e11b815260040160405180910390fd5b33610d27608083016060840161295d565b6001600160a01b031603610d4e57604051632af47b8760e11b815260040160405180910390fd5b610d5e606082016040830161295d565b6001600160a01b0316610d77608083016060840161295d565b6001600160a01b031603610d9e57604051632af47b8760e11b815260040160405180910390fd5b4260045f610daf6020850185612b20565b62ffffff16815260208101919091526040015f2054600160401b900464ffffffffff161115610df15760405163e4b1f8f760e01b815260040160405180910390fd5b4260045f610e026020850185612b20565b62ffffff16815260208101919091526040015f2054600160681b900464ffffffffff161015610e4457604051639cef10e760e01b815260040160405180910390fd5b66038d7ea4c680006002541115610e6e57604051639cef10e760e01b815260040160405180910390fd5b5f80610e80608084016060850161295d565b6001600160a01b031614158015610f02575060045f610ea26020850185612b20565b62ffffff16815260208101919091526040015f2060030154610ecc90670de0b6b3a7640000612e18565b60065f610edf608086016060870161295d565b6001600160a01b03166001600160a01b031681526020019081526020015f205410155b610f0c575f610f1c565b610f1c608083016060840161295d565b9050610f39335f546001600160a01b031690306020860135612288565b5f604051806101600160405280846040016020810190610f59919061295d565b6001600160a01b0316815260200184602001358152602001610f7a426122ef565b64ffffffffff168152602001610fc960045f875f016020810190610f9e9190612b20565b62ffffff16815260208101919091526040015f2054610fc49064ffffffffff1642612e4e565b6122ef565b64ffffffffff168152602090810190610fe490860186612b20565b62ffffff16815260200160025481526020015f8152602001836001600160a01b031681526020015f81526020015f151581526020015f151581525090508060035f60025481526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550602082015181600101556040820151816002015f6101000a81548164ffffffffff021916908364ffffffffff16021790555060608201518160020160056101000a81548164ffffffffff021916908364ffffffffff160217905550608082015181600201600a6101000a81548162ffffff021916908362ffffff16021790555060a0820151816003015560c0820151816004015560e0820151816005015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160060155610120820151816007015f6101000a81548160ff0219169083151502179055506101408201518160070160016101000a81548160ff021916908315150217905550905050826020013560055f856040016020810190611189919061295d565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546111b69190612e4e565b9091555050602083013560065f6111d3606087016040880161295d565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546112009190612e4e565b90915550506040515f8051602061333a8339815191529061122b906080860135906001908590612e61565b60405180910390a160028054905f61124283612f2b565b9190505550505050565b611254612324565b61125d826123c8565b61126782826123d0565b5050565b6112736121f7565b62ffffff82165f90815260046020526040902081906112928282612f5b565b50505050565b5f6112a161248c565b505f8051602061335a83398151915290565b6112bb6121f7565b60045f6112ce60a0870160808801612b20565b62ffffff908116825260208201929092526040015f90812054600160281b90049091169003611310576040516321f2425960e01b815260040160405180910390fd5b83602001355f036113345760405163162908e360e11b815260040160405180910390fd5b60a08401355f90815260036020526040902084906113528282613113565b505080156113eb57602084018035906005905f90611370908861295d565b6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461139d9190612e4e565b9091555050602084018035906006905f906113b8908861295d565b6001600160a01b03166001600160a01b031681526020019081526020015f205f8282546113e59190612e4e565b90915550505b5f8051602061333a83398151915283838660405161140b9392919061323d565b60405180910390a150505050565b611421611fd5565b611429612005565b5f82815260036020526040902080546001600160a01b03163314611460576040516367dad94560e11b815260040160405180910390fd5b600781015460ff161561148657604051631ecb2c4f60e31b815260040160405180910390fd5b6002810154600160281b900464ffffffffff1642106114b857604051632b75c76f60e11b815260040160405180910390fd5b600281015462ffffff600160501b8204165f908152600460205260409020546114f29164ffffffffff600160b81b90920482169116612c19565b64ffffffffff16421015611519576040516344f9166360e11b815260040160405180910390fd5b600281810154600160501b900462ffffff165f9081526004602052604081209091015460018301546127109161154e91612e18565b6115589190612e2f565b90505f81836001015461156b9190612e05565b9050805f0361157c575050506118e1565b60c886156115f157600154845460405163010f83b560e11b81526001600160a01b039283169263021f076a926115bf929116908a90869088905f90600401612c36565b5f604051808303815f87803b1580156115d6575f80fd5b505af11580156115e8573d5f803e3d5ffd5b505050506118dc565b600154604051631e9d5a6960e11b815262ffffff831660048201525f9182916001600160a01b0390911690633d3ab4d2906024016040805180830381865afa15801561163f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116639190612c7b565b915091505f8164ffffffffff1611801561168357505f8264ffffffffff16115b156118195760015486546040516353e9db7160e01b81526001600160a01b039182166004820152602481018b90525f9291909116906353e9db7190604401602060405180830381865afa1580156116dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117009190612ca8565b9050805f0361172257604051636705894d60e11b815260040160405180910390fd5b600154604051630f7921ed60e01b8152600481018390525f91829182916001600160a01b031690630f7921ed9060240160c060405180830381865afa15801561176d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117919190612cbf565b5094509450945050508662ffffff168362ffffff16146117c457604051636705894d60e11b815260040160405180910390fd5b8164ffffffffff164210156117ec57604051630e3afac960e41b815260040160405180910390fd5b8064ffffffffff164211156118145760405163096f845b60e01b815260040160405180910390fd5b505050505b61182488885f61203c565b60078601805461ffff19166101011790555f5461184b906001600160a01b031688866124d5565b6040515f8051602061333a8339815191529061186d905f906002908a90612ddd565b60405180910390a1600186015486546001600160a01b03165f90815260056020526040812080549091906118a2908490612e05565b9091555050600186015486546001600160a01b03165f90815260066020526040812080549091906118d4908490612e05565b909155505050505b505050505b610b7360015f8051602061339a83398151915255565b6118ff6121f7565b610c965f612506565b611910611fd5565b611918612005565b5f82815260036020526040902080546001600160a01b0316331461194f576040516367dad94560e11b815260040160405180910390fd5b600781015460ff161561197557604051631ecb2c4f60e31b815260040160405180910390fd5b6002810154600160281b900464ffffffffff164210156119a8576040516344f1048160e11b815260040160405180910390fd5b600281015462ffffff600160501b8204165f908152600460205260409020600101546119de9164ffffffffff9182169116612c19565b64ffffffffff16421015611a0557604051639b1d408360e01b815260040160405180910390fd5b61012c8415611a7e576001805483549184015460405163010f83b560e11b81526001600160a01b039283169363021f076a93611a4c93911691899187915f90600401612c36565b5f604051808303815f87803b158015611a63575f80fd5b505af1158015611a75573d5f803e3d5ffd5b50505050611d3e565b600154604051631e9d5a6960e11b815262ffffff831660048201525f9182916001600160a01b0390911690633d3ab4d2906024016040805180830381865afa158015611acc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af09190612c7b565b915091505f8164ffffffffff16118015611b1057505f8264ffffffffff16115b15611ca65760015484546040516353e9db7160e01b81526001600160a01b039182166004820152602481018990525f9291909116906353e9db7190604401602060405180830381865afa158015611b69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8d9190612ca8565b9050805f03611baf57604051636705894d60e11b815260040160405180910390fd5b600154604051630f7921ed60e01b8152600481018390525f91829182916001600160a01b031690630f7921ed9060240160c060405180830381865afa158015611bfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1e9190612cbf565b5094509450945050508662ffffff168362ffffff1614611c5157604051636705894d60e11b815260040160405180910390fd5b8164ffffffffff16421015611c7957604051630e3afac960e41b815260040160405180910390fd5b8064ffffffffff16421115611ca15760405163096f845b60e01b815260040160405180910390fd5b505050505b611cb186865f61203c565b60078401805460ff191660019081179091558401545f54611cdf916001600160a01b039091169087906124d5565b6040515f8051602061333a83398151915290611d01905f906003908890612ddd565b60405180910390a1600184015484546001600160a01b03165f9081526005602052604081208054909190611d36908490612e05565b909155505050505b5050610b7360015f8051602061339a83398151915255565b611d5e6121f7565b610c96612576565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611d9c611fd5565b611da4612005565b5f82815260036020526040902080546001600160a01b03163314611ddb576040516367dad94560e11b815260040160405180910390fd5b6001600160a01b03821615611e15576040515f8051602061333a83398151915290611e0c905f906004908590612ddd565b60405180910390a15b5061126760015f8051602061339a83398151915255565b611e346121f7565b611267611e3f611d66565b6001600160a01b03841690836124d5565b5f611e596125be565b805490915060ff600160401b820416159067ffffffffffffffff165f81158015611e805750825b90505f8267ffffffffffffffff166001148015611e9c5750303b155b905081158015611eaa575080155b15611ec85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611ef257845460ff60401b1916600160401b1785555b611efa6125e8565b611f03866125f0565b611f0b6125e8565b611f13612601565b5f80546001600160a01b03808b166001600160a01b03199283161790925560018054928a1692909116919091179055619c406002558315611f8e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611fa06121f7565b6001600160a01b038116611fc957604051631e4fbdf760e01b81525f600482015260240161079e565b611fd281612506565b50565b5f8051602061337a8339815191525460ff1615610c965760405163d93c066560e01b815260040160405180910390fd5b5f8051602061339a83398151915280546001190161203657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f838152600360205260408120908215612057575081612074565b6120648260030154610b78565b9050805f03612074575050505050565b80826004015f8282546120879190612e4e565b90915550505f546120a2906001600160a01b031685836124d5565b60058201545f906001600160a01b03161580159061210e57506002830154600160501b900462ffffff165f908152600460205260409020600301546120ef90670de0b6b3a7640000612e18565b60058401546001600160a01b03165f9081526006602052604090205410155b1561218d576002830154600160501b900462ffffff165f9081526004602081905260409091200154612710906121449084612e18565b61214e9190612e2f565b9050801561218d5760058301545f54612174916001600160a01b039182169116836124d5565b80836006015f8282546121879190612e4e565b90915550505b6005830154600384015460408051858152602081018590526001600160a01b03909316927f08f946096d619c1fb310c87ec425e9e3951af655b4c7ce26923bda323ecc7cac910160405180910390a3505050505050565b60015f8051602061339a83398151915255565b33612200611d66565b6001600160a01b031614610c965760405163118cdaa760e01b815233600482015260240161079e565b612231612611565b5f8051602061337a833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6040516001600160a01b0384811660248301528381166044830152606482018390526112929186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612640565b5f64ffffffffff821115612320576040516306dfcc6560e41b8152602860048201526024810183905260440161079e565b5090565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123aa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661239e5f8051602061335a833981519152546001600160a01b031690565b6001600160a01b031614155b15610c965760405163703e46dd60e11b815260040160405180910390fd5b611fd26121f7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561242a575060408051601f3d908101601f1916820190925261242791810190612ca8565b60015b61245257604051634c9c8ce360e01b81526001600160a01b038316600482015260240161079e565b5f8051602061335a833981519152811461248257604051632a87526960e21b81526004810182905260240161079e565b610b7383836126ac565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c965760405163703e46dd60e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052610b7391859182169063a9059cbb906064016122bd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b61257e611fd5565b5f8051602061337a833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361226a565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b610c96612701565b6125f8612701565b611fd281612726565b612609612701565b610c9661272e565b5f8051602061337a8339815191525460ff16610c9657604051638dfc202b60e01b815260040160405180910390fd5b5f8060205f8451602086015f885af18061265f576040513d5f823e3d81fd5b50505f513d91508115612676578060011415612683565b6001600160a01b0384163b155b1561129257604051635274afe760e01b81526001600160a01b038516600482015260240161079e565b6126b582612736565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156126f957610b738282612799565b61126761280b565b61270961282a565b610c9657604051631afcd79f60e31b815260040160405180910390fd5b611fa0612701565b6121e4612701565b806001600160a01b03163b5f0361276b57604051634c9c8ce360e01b81526001600160a01b038216600482015260240161079e565b5f8051602061335a83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516127b59190613323565b5f60405180830381855af49150503d805f81146127ed576040519150601f19603f3d011682016040523d82523d5f602084013e6127f2565b606091505b5091509150612802858383612843565b95945050505050565b3415610c965760405163b398979f60e01b815260040160405180910390fd5b5f6128336125be565b54600160401b900460ff16919050565b60608261285857612853826128a2565b61289b565b815115801561286f57506001600160a01b0384163b155b1561289857604051639996b31560e01b81526001600160a01b038516600482015260240161079e565b50805b9392505050565b8051156128b25780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b8015158114611fd2575f80fd5b80356128e3816128cb565b919050565b6001600160a01b0381168114611fd2575f80fd5b80356128e3816128e8565b5f805f60608486031215612919575f80fd5b8335612924816128cb565b925060208401359150604084013561293b816128e8565b809150509250925092565b5f60208284031215612956575f80fd5b5035919050565b5f6020828403121561296d575f80fd5b813561289b816128e8565b5f60a0828403128015612989575f80fd5b509092915050565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156129b6575f80fd5b82356129c1816128e8565b9150602083013567ffffffffffffffff8111156129dc575f80fd5b8301601f810185136129ec575f80fd5b803567ffffffffffffffff811115612a0657612a06612991565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715612a3557612a35612991565b604052818152828201602001871015612a4c575f80fd5b816020840160208301375f602083830101528093505050509250929050565b62ffffff81168114611fd2575f80fd5b80356128e381612a6b565b5f80828403610160811215612a99575f80fd5b8335612aa481612a6b565b9250610140601f1982011215612ab8575f80fd5b506020830190509250929050565b5f805f808486036101c0811215612adb575f80fd5b610160811215612ae9575f80fd5b508493506101608501359250610180850135612b0481612a6b565b91506101a0850135612b15816128cb565b939692955090935050565b5f60208284031215612b30575f80fd5b813561289b81612a6b565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215612b81575f80fd5b823591506020830135612b93816128e8565b809150509250929050565b5f8060408385031215612baf575f80fd5b8235612bba816128e8565b946020939093013593505050565b5f805f60608486031215612bda575f80fd5b8335612be5816128e8565b92506020840135612bf5816128e8565b9150604084013561293b816128e8565b634e487b7160e01b5f52601160045260245ffd5b64ffffffffff81811683821601908111156125e2576125e2612c05565b6001600160a01b03959095168552602085019390935262ffffff9190911660408401526060830152608082015260a00190565b64ffffffffff81168114611fd2575f80fd5b5f8060408385031215612c8c575f80fd5b8251612c9781612c69565b6020840151909250612b9381612c69565b5f60208284031215612cb8575f80fd5b5051919050565b5f805f805f8060c08789031215612cd4575f80fd5b8651612cdf816128e8565b602088015160408901519197509550612cf781612a6b565b6060880151909450612d0881612c69565b6080880151909350612d1981612c69565b60a09790970151959894975092959194919391925050565b612d5382612d4683546001600160a01b031690565b6001600160a01b03169052565b60018101546020830152600281015464ffffffffff8082166040850152602882901c16606084015260501c62ffffff166080830152600381015460a0830152600481015460c083015260058101546001600160a01b031660e083015260068101546101008301526007015460ff808216151561012084015260089190911c16151561014090910152565b83815262ffffff831660208201526101a08101612dfd6040830184612d31565b949350505050565b818103818111156125e2576125e2612c05565b80820281158282048414176125e2576125e2612c05565b5f82612e4957634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156125e2576125e2612c05565b83815262ffffff8316602082015281516001600160a01b031660408201526101a0810160208301516060830152604083015164ffffffffff8116608084015250606083015164ffffffffff811660a084015250608083015162ffffff811660c08401525060a083015160e083015260c083015161010083015260e0830151612ef56101208401826001600160a01b03169052565b50610100830151610140830152610120830151801515610160840152506101408301518015156101808401525b50949350505050565b5f60018201612f3c57612f3c612c05565b5060010190565b5f81356125e281612c69565b5f81356125e281612a6b565b612f80612f6783612f43565b825464ffffffffff191664ffffffffff91909116178255565b612fb1612f8f60208401612f4f565b825467ffffff0000000000191660289190911b67ffffff000000000016178255565b612fec612fc060408401612f43565b82546cffffffffff0000000000000000191660409190911b6cffffffffff000000000000000016178255565b613021612ffb60608401612f43565b82805464ffffffffff60681b191660689290921b64ffffffffff60681b16919091179055565b61305661303060808401612f43565b82805464ffffffffff60901b191660909290921b64ffffffffff60901b16919091179055565b61308b61306560a08401612f43565b82805464ffffffffff60b81b191660b89290921b64ffffffffff60b81b16919091179055565b6130b761309a60c08401612f43565b6001830164ffffffffff821664ffffffffff198254161781555050565b60e08201356002820155610100820135600382015561012090910135600490910155565b5f81356125e2816128e8565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f81356125e2816128cb565b61312561311f836130db565b826130e7565b6020820135600182015560028101613142612f6760408501612f43565b61317761315160608501612f43565b825469ffffffffff0000000000191660289190911b69ffffffffff000000000016178255565b6131a861318660808501612f4f565b82805462ffffff60501b191660509290921b62ffffff60501b16919091179055565b5060a0820135600382015560c082013560048201556131d56131cc60e084016130db565b600583016130e7565b6101008201356006820155600781016132086131f46101208501613107565b825490151560ff1660ff1991909116178255565b610b736132186101408501613107565b82805461ff00191691151560081b61ff0016919091179055565b80356128e381612c69565b83815262ffffff831660208201526101a0810161326060408301612d46856128fc565b6020830135606083015261327660408401613232565b64ffffffffff16608083015261328e60608401613232565b64ffffffffff1660a08301526132a660808401612a7b565b62ffffff811660c08401525060a083013560e08381019190915260c08401356101008401526132d69084016128fc565b6001600160a01b0381166101208401525061010083013561014083015261330061012084016128d8565b151561016083015261331561014084016128d8565b801515610180840152612f22565b5f82518060208501845e5f92019182525091905056fe96d124a81ce8ed38e9d808060cd4576935624f21005f976a93f727e461ed98ab360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220c5db1e43a6f4c91051b92459eda0eb887af9f9f1fd3bbb7376e6b29d6bcd0b3164736f6c634300081a0033