0 txs
110 calls
constructor
constructor()
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
depositToken
viewfunction depositToken() view returns (address)
DISTRIBUTOR_ROLE
viewfunction DISTRIBUTOR_ROLE() view returns (bytes32)
earlyWithdrawalPenalty
viewfunction earlyWithdrawalPenalty() view returns (uint256)
earned
viewfunction earned(uint256 _pool, address account) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStakes
viewfunction getStakes(address account) view returns (uint256, bool penalizable)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
lastTimeRewardApplicable
viewfunction lastTimeRewardApplicable(uint256 pool) view returns (uint256)
lockDuration
viewfunction lockDuration() view returns (uint32)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
payouts
viewfunction payouts(uint256 pool, address user) view returns (uint256 reward)
pools
viewfunction pools(uint256) view returns (address token, uint32 periodStart, uint32 periodFinish, uint32 term, uint32 depositDeadline, uint256 totalBaseStake, uint256 totalRewards)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rewardable
viewfunction rewardable(uint256 _pool, address account) view returns (uint256)
stakes
viewfunction stakes(address, uint256) view returns (uint32 depositedAt, uint256 amount)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
totalDeposited
viewfunction totalDeposited(address account) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
UPGRADER_ROLE
viewfunction UPGRADER_ROLE() view returns (bytes32)
validUserStakes
viewfunction validUserStakes(uint256 _pool, address account) view returns (uint256)
createDistribution
nonpayablefunction createDistribution(uint256 _pool, uint32 _depositDeadline, address _token, uint32 _periodStart, uint32 _periodFinish, uint256 _totalRewards)
deposit
nonpayablefunction deposit(uint256 amount)
getReward
nonpayablefunction getReward(uint256 _pool)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _depositToken)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setLockDuration
nonpayablefunction setLockDuration(uint32 newDuration)
setPenalty
nonpayablefunction setPenalty(uint256 newPenalty)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw()
events
Deposit
event Deposit(address indexed user, uint256 amount)
DistributionCreated
event DistributionCreated(uint256 pool, address token, uint32 periodStart, uint32 periodFinish, uint256 totalRewards)
Initialized
event Initialized(uint64 version)
LockDurationChanged
event LockDurationChanged(uint32 newDuration)
Paused
event Paused(address account)
PenaltyChanged
event PenaltyChanged(uint256 newPenalty)
PeriodFinishUpdated
event PeriodFinishUpdated(uint256 pool, uint32 newFinish)
RewardPaid
event RewardPaid(address indexed user, uint256 pool, address token, uint256 reward)
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)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
Withdrawal
event Withdrawal(address indexed user, uint256 amount, uint256 penalty)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
DepositTokenIsZero
error DepositTokenIsZero()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
FutureDeadline
error FutureDeadline()
InvalidAmount
error InvalidAmount()
InvalidInitialization
error InvalidInitialization()
InvalidPeriod
error InvalidPeriod()
InvalidRewards
error InvalidRewards()
MaxDepositsReached
error MaxDepositsReached()
NoRewards
error NoRewards()
NoStakes
error NoStakes()
NotInitializing
error NotInitializing()
PenaltyOver100
error PenaltyOver100()
PoolExists
error PoolExists()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RewardTokenIsZero
error RewardTokenIsZero()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612bc86200010460003960008181611e7701528181611ea001526120950152612bc86000f3fe6080604052600436106102345760003560e01c80637ba6f45811610138578063c4d66de8116100b0578063e63ab1e91161007f578063f0bd87cc11610064578063f0bd87cc1461084e578063f72c0d8b14610882578063f9a0a3f8146108b657600080fd5b8063e63ab1e9146107fa578063eeca15621461082e57600080fd5b8063c4d66de814610762578063c89039c514610782578063d547741f146107ba578063e39c08fc146107da57600080fd5b8063a217fddf11610107578063ad3cb1cc116100ec578063ad3cb1cc146106cc578063b09233c814610722578063b6b55f251461074257600080fd5b8063a217fddf146105b9578063ac4afa38146105ce57600080fd5b80637ba6f458146104ea5780637e2848c11461051f5780638456cb591461053f57806391d148541461055457600080fd5b80633ccfd60b116101cb5780634f1ef2861161019a578063530554811161017f5780635305548114610457578063584b62a1146104775780635c975abb146104b357600080fd5b80634f1ef2861461042f57806352d1902d1461044257600080fd5b80633ccfd60b146103ad5780633f4ba83a146103c25780634a4b674a146103d75780634c725ab5146103f757600080fd5b8063248a9ca311610207578063248a9ca314610308578063291a3d9e146103575780632f2ff15d1461036d57806336568abe1461038d57600080fd5b806301ffc9a714610239578063045544431461026e5780630b9f90da146102b85780631c4b774b146102e6575b600080fd5b34801561024557600080fd5b50610259610254366004612747565b6108d6565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b506003546102a39074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610265565b3480156102c457600080fd5b506102d86102d33660046127a5565b61096f565b604051908152602001610265565b3480156102f257600080fd5b506103066103013660046127d1565b6109b5565b005b34801561031457600080fd5b506102d86103233660046127d1565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b34801561036357600080fd5b506102d860045481565b34801561037957600080fd5b506103066103883660046127a5565b610ae8565b34801561039957600080fd5b506103066103a83660046127a5565b610b32565b3480156103b957600080fd5b50610306610b83565b3480156103ce57600080fd5b50610306610d6d565b3480156103e357600080fd5b506103066103f23660046127d1565b610d9f565b34801561040357600080fd5b506102d86104123660046127a5565b600160209081526000928352604080842090915290825290205481565b61030661043d366004612819565b610e41565b34801561044e57600080fd5b506102d8610e60565b34801561046357600080fd5b506102d86104723660046128f9565b610e8f565b34801561048357600080fd5b50610497610492366004612914565b610ef6565b6040805163ffffffff9093168352602083019190915201610265565b3480156104bf57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104f657600080fd5b5061050a6105053660046128f9565b610f39565b60408051928352901515602083015201610265565b34801561052b57600080fd5b506102d861053a3660046127a5565b611018565b34801561054b57600080fd5b506103066110cd565b34801561056057600080fd5b5061025961056f3660046127a5565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105c557600080fd5b506102d8600081565b3480156105da57600080fd5b5061067e6105e93660046127d1565b60006020819052908152604090208054600182015460028301546003909301546001600160a01b0383169363ffffffff740100000000000000000000000000000000000000008504811694780100000000000000000000000000000000000000000000000081048216947c01000000000000000000000000000000000000000000000000000000009091048216939116919087565b604080516001600160a01b03909816885263ffffffff968716602089015294861694870194909452918416606086015292909216608084015260a083019190915260c082015260e001610265565b3480156106d857600080fd5b506107156040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102659190612962565b34801561072e57600080fd5b5061030661073d3660046129c7565b6110ff565b34801561074e57600080fd5b5061030661075d3660046127d1565b6111a6565b34801561076e57600080fd5b5061030661077d3660046128f9565b611317565b34801561078e57600080fd5b506003546107a2906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b3480156107c657600080fd5b506103066107d53660046127a5565b6115c7565b3480156107e657600080fd5b506102d86107f53660046127a5565b61160b565b34801561080657600080fd5b506102d87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561083a57600080fd5b506102d86108493660046127d1565b6116bf565b34801561085a57600080fd5b506102d87ffbd454f36a7e1a388bd6fc3ab10d434aa4578f811acbbcf33afb1c697486313c81565b34801561088e57600080fd5b506102d87f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e381565b3480156108c257600080fd5b506103066108d13660046129e2565b61170b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061096957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260408120816109888585611018565b9050600082600201548284600301546109a19190612a77565b6109ab9190612a8e565b9695505050505050565b6109bd611ac9565b6109c5611b25565b6000818152602081815260408083206001909252822090916109e7843361160b565b33600090815260208490526040902054909150808211610a33576040517f3fb087f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a3f8284612ac9565b3360008181526020879052604090208590558654919250610a6a916001600160a01b03169083611ba6565b8454604080518881526001600160a01b039092166020830152810182905233907faf206e736916d38b56e2d559931a189bc3119b8fc6d6850bd34e382f090305879060600160405180910390a25050505050610ae560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610b2281611c1a565b610b2c8383611c24565b50505050565b6001600160a01b0381163314610b74576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7e8282611d18565b505050565b610b8b611ac9565b610b93611b25565b600080610b9f33610f39565b9150915081600003610bdd576040517fb36e4e6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600260205260408120610bf5916126e9565b8015610ced57600061271060045484610c0e9190612a77565b610c189190612a8e565b6003546040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018390529192506001600160a01b0316906342966c6890602401600060405180830381600087803b158015610c7857600080fd5b505af1158015610c8c573d6000803e3d6000fd5b50506003548386039250610cab91506001600160a01b03163383611ba6565b604080518281526020810184905233917fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb910160405180910390a25050610d40565b600354610d04906001600160a01b03163384611ba6565b604080518381526000602082015233917fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb910160405180910390a25b5050610d6b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d9781611c1a565b610ae5611ddc565b7ffbd454f36a7e1a388bd6fc3ab10d434aa4578f811acbbcf33afb1c697486313c610dc981611c1a565b6127108210610e04576040517f0bdb38e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60048290556040518281527fcfa4f4cf1cd64d13a167a8e75605e0c0c9d6700e903d17c5dc11f593254a04a9906020015b60405180910390a15050565b610e49611e6c565b610e5282611f3c565b610e5c8282611f66565b5050565b6000610e6a61208a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6001600160a01b03811660009081526002602052604081208190815b8154811015610eed57818181548110610ec657610ec6612adc565b90600052602060002090600202016001015483610ee39190612b0b565b9250600101610eab565b50909392505050565b60026020528160005260406000208181548110610f1257600080fd5b60009182526020909120600290910201805460019091015463ffffffff9091169250905082565b6001600160a01b038116600090815260026020526040812080548291908203610f685750600093849350915050565b6000805b825481101561100d57600354610fa09074010000000000000000000000000000000000000000900463ffffffff1642612ac9565b838281548110610fb257610fb2612adc565b600091825260209091206002909102015463ffffffff161180610fd25750835b9350828181548110610fe657610fe6612adc565b906000526020600020906002020160010154826110039190612b0b565b9150600101610f6c565b508093505050915091565b6001600160a01b03811660009081526002602052604081208190815b81548110156110c357600086815260208190526040902060010154825463ffffffff9091169083908390811061106c5761106c612adc565b600091825260209091206002909102015463ffffffff1610156110bb5781818154811061109b5761109b612adc565b906000526020600020906002020160010154836110b89190612b0b565b92505b600101611034565b5090949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6110f781611c1a565b610ae56120ec565b7ffbd454f36a7e1a388bd6fc3ab10d434aa4578f811acbbcf33afb1c697486313c61112981611c1a565b600380547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8516908102919091179091556040519081527fd5fa955ff23a90448c08a0b0ead3e8cc4d597542608f960abcbc7d5c36bf05e490602001610e35565b6111ae611ac9565b6111b6611b25565b806000036111f0576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260026020526040902080546013101561123b576040517ff041c68900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354611253906001600160a01b0316333085612165565b6040805180820182524263ffffffff9081168252602080830186815285546001808201885560008881528490209551600290920290950180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001691909416178355519190920155905183815233917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c910160405180910390a250610ae560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113625750825b905060008267ffffffffffffffff16600114801561137f5750303b155b90508115801561138d575080155b156113c4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156114255784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61142d61219e565b6114356121ae565b61143d6121ae565b611448600033611c24565b506114737f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33611c24565b5061149e7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e333611c24565b506114c97ffbd454f36a7e1a388bd6fc3ab10d434aa4578f811acbbcf33afb1c697486313c33611c24565b506001600160a01b03861661150a576040517f28078b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003805476ed4e0000000000000000000000000000000000000000007fffffffffffffffff0000000000000000000000000000000000000000000000009091166001600160a01b0389161717905561196460045583156115bf5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461160181611c1a565b610b2c8383611d18565b6000828152602081905260408120816116248585611018565b8254600284015491925061165f917c010000000000000000000000000000000000000000000000000000000090910463ffffffff1690612a77565b825474010000000000000000000000000000000000000000900463ffffffff16611688876116bf565b6116929190612ac9565b8284600301546116a29190612a77565b6116ac9190612a77565b6116b69190612a8e565b95945050505050565b60008181526020819052604081205463ffffffff4281169178010000000000000000000000000000000000000000000000009004168082106117015780611703565b815b949350505050565b7ffbd454f36a7e1a388bd6fc3ab10d434aa4578f811acbbcf33afb1c697486313c61173581611c1a565b60008781526020819052604090206003810154429015611781576040517ff48e3c2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166117c1576040517f28346deb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff168863ffffffff161115611807576040517f444db79900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8763ffffffff168663ffffffff16108061182d57508463ffffffff168663ffffffff1610155b8061184457508063ffffffff168563ffffffff1611155b1561187b576040517f17479ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836000036118b5576040517ffc2e3fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815463ffffffff8681167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff91891674010000000000000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009093166001600160a01b038b161792909217161782556119568686612b1e565b82547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff928316021783556001830180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016918a169190911790556003546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a569190612b3b565b600283015560038201849055604080518a81526001600160a01b038916602082015263ffffffff88811682840152871660608201526080810186905290517fdac19bcbd27fc1601e62fbe776bc1cf2f54840de702451e6c2e309a9d2eee7e29181900360a00190a1505050505050505050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610d6b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611ba0576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6040516001600160a01b03838116602483015260448201839052610b7e91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121b6565b610ae58133612232565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611d07576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611cbd3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610969565b6000915050610969565b5092915050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611d07576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610969565b611de46122bf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f0557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ef97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3610e5c81611c1a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611fde575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611fdb91810190612b3b565b60015b612024576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612080576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161201b565b610b7e838361231a565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d6b576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120f4611ac9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611e4e565b6040516001600160a01b038481166024830152838116604483015260648201839052610b2c9186918216906323b872dd90608401611bd3565b6121a6612370565b610d6b6123d7565b610d6b612370565b60006121cb6001600160a01b03841683612428565b905080516000141580156121f05750808060200190518101906121ee9190612b54565b155b15610b7e576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161201b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610e5c576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024810183905260440161201b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610d6b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123238261243d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561236857610b7e82826124e5565b610e5c612552565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610d6b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123df612370565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606124368383600061258a565b9392505050565b806001600160a01b03163b60000361248c576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161201b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125029190612b76565b600060405180830381855af49150503d806000811461253d576040519150601f19603f3d011682016040523d82523d6000602084013e612542565b606091505b50915091506116b6858383612632565b3415610d6b576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060814710156125c8576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161201b565b600080856001600160a01b031684866040516125e49190612b76565b60006040518083038185875af1925050503d8060008114612621576040519150601f19603f3d011682016040523d82523d6000602084013e612626565b606091505b50915091506109ab8683835b60608261264757612642826126a7565b612436565b815115801561265e57506001600160a01b0384163b155b156126a0576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161201b565b5080612436565b8051156126b75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5080546000825560020290600052602060002090810190610ae591905b808211156127435780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016815560006001820155600201612706565b5090565b60006020828403121561275957600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461243657600080fd5b80356001600160a01b03811681146127a057600080fd5b919050565b600080604083850312156127b857600080fd5b823591506127c860208401612789565b90509250929050565b6000602082840312156127e357600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561282c57600080fd5b61283583612789565b9150602083013567ffffffffffffffff8082111561285257600080fd5b818501915085601f83011261286657600080fd5b813581811115612878576128786127ea565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156128be576128be6127ea565b816040528281528860208487010111156128d757600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561290b57600080fd5b61243682612789565b6000806040838503121561292757600080fd5b61293083612789565b946020939093013593505050565b60005b83811015612959578181015183820152602001612941565b50506000910152565b602081526000825180602084015261298181604085016020870161293e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803563ffffffff811681146127a057600080fd5b6000602082840312156129d957600080fd5b612436826129b3565b60008060008060008060c087890312156129fb57600080fd5b86359550612a0b602088016129b3565b9450612a1960408801612789565b9350612a27606088016129b3565b9250612a35608088016129b3565b915060a087013590509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761096957610969612a48565b600082612ac4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8181038181111561096957610969612a48565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8082018082111561096957610969612a48565b63ffffffff828116828216039080821115611d1157611d11612a48565b600060208284031215612b4d57600080fd5b5051919050565b600060208284031215612b6657600080fd5b8151801515811461243657600080fd5b60008251612b8881846020870161293e565b919091019291505056fea2646970667358221220e8327e786c28c3dcadf04acd7e0e448b5c75eb59f6bffb3c6ea9fa92aace01d564736f6c63430008180033