0 txs
67 calls
constructor
constructor(address perps_, bool feeEnabled_, uint256 minimalUnstakingTime_, uint256 maximalUnstakingTime_, uint256 minimalUnstakingFee_, uint256 maximalUnstakingFee_, address owner_)
functions
balanceOf
viewfunction balanceOf(address) view returns (uint256)
calculateToWithdrawWithFee
viewfunction calculateToWithdrawWithFee(uint256 input, uint256 unstakeTime) view returns (uint256)
duration
viewfunction duration() view returns (uint256)
earned
viewfunction earned(address _account) view returns (uint256)
earnedUSDC
viewfunction earnedUSDC(address _account) view returns (uint256)
FEE_DENOMINATOR
viewfunction FEE_DENOMINATOR() view returns (uint256)
feeEnabled
viewfunction feeEnabled() view returns (bool)
finishAt
viewfunction finishAt() view returns (uint256)
getUserAllocations
viewfunction getUserAllocations(address _wallet) view returns (tuple[])
lastTimeRewardApplicable
viewfunction lastTimeRewardApplicable() view returns (uint256)
maximalUnstakingFee
viewfunction maximalUnstakingFee() view returns (uint256)
maximalUnstakingTime
viewfunction maximalUnstakingTime() view returns (uint256)
minimalUnstakingFee
viewfunction minimalUnstakingFee() view returns (uint256)
minimalUnstakingTime
viewfunction minimalUnstakingTime() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
perps
viewfunction perps() view returns (address)
rewardPerToken
viewfunction rewardPerToken() view returns (uint256)
rewardPerTokenStored
viewfunction rewardPerTokenStored() view returns (uint256)
rewardRate
viewfunction rewardRate() view returns (uint256)
rewards
viewfunction rewards(address) view returns (uint256)
start
viewfunction start() view returns (uint256)
toEnd
viewfunction toEnd() view returns (uint256)
totalLocked
viewfunction totalLocked(address wallet) view returns (uint256)
totalPendingToClaim
viewfunction totalPendingToClaim(address wallet) view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
updatedAt
viewfunction updatedAt() view returns (uint256)
userRewardPerTokenPaid
viewfunction userRewardPerTokenPaid(address) view returns (uint256)
userTokensToClaim
viewfunction userTokensToClaim(address, uint256) view returns (bool taken, uint256 release, uint256 value)
userTokensToClaimCounter
viewfunction userTokensToClaimCounter(address) view returns (uint256)
adminWithdrawERC20
nonpayablefunction adminWithdrawERC20(address token, address to, uint256 amount)
adminWithdrawNative
nonpayablefunction adminWithdrawNative(address to, uint256 amount)
initialize
nonpayablefunction initialize(uint256 amount_, uint256 start_, uint256 duration_)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
setFeeEnabled
nonpayablefunction setFeeEnabled(bool value)
setUnstakingFeeParams
nonpayablefunction setUnstakingFeeParams(uint256 minimalUnstakingTime_, uint256 maximalUnstakingTime_, uint256 minimalUnstakingFee_, uint256 maximalUnstakingFe_e)
stake
nonpayablefunction stake(uint256 _amount)
stakeAs
nonpayablefunction stakeAs(address wallet, uint256 amount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
unstake
payablefunction unstake(uint256 amount, uint256 after_) payable
withdrawTokensToClaim
nonpayablefunction withdrawTokensToClaim(uint256 round)
events
FeeChanged
event FeeChanged(uint256 minimalUnstakingTime, uint256 maximalUnstakingTime, uint256 minimalUnstakingFee, uint256 maximalUnstakingFee)
FeeEnabled
event FeeEnabled(bool value)
Initialized
event Initialized(uint256 start, uint256 duration, uint256 reward)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RewardTaken
event RewardTaken(address indexed wallet, uint256 amount)
RewardWithdrawingEnabled
event RewardWithdrawingEnabled()
Staked
event Staked(address indexed wallet, uint256 value)
TokensClaimed
event TokensClaimed(address indexed wallet, uint256 indexed roundId, uint256 tokensToClaimid)
Unpaused
event Unpaused(address account)
Unstaked
event Unstaked(address indexed wallet, uint256 tokensAmount, uint256 tokensToClaim, uint256 duration)
errors
AfterStakingFinish
error AfterStakingFinish()
AlreadyInitialized
error AlreadyInitialized()
BeforeReleaseTime
error BeforeReleaseTime()
BeforeStakingStart
error BeforeStakingStart()
CannotUnstake
error CannotUnstake()
EnforcedPause
error EnforcedPause()
ETHTransferFailed
error ETHTransferFailed()
ExpectedPause
error ExpectedPause()
InvalidFeeRanges
error InvalidFeeRanges()
MinimalUnstakingPeriod
error MinimalUnstakingPeriod()
NotInitialized
error NotInitialized()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
RewardBalanceTooSmall
error RewardBalanceTooSmall()
RoundDoesNotExist
error RoundDoesNotExist()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ToEarlyToWithdrawReward
error ToEarlyToWithdrawReward()
TokensAlreadyClaimed
error TokensAlreadyClaimed()
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x60a060405234801561000f575f5ffd5b5060405161312a38038061312a83398181016040528101906100319190610444565b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009991906104f0565b60405180910390fd5b6100b18161014560201b60201c565b505f5f60156101000a81548160ff0219169083151502179055506100da8761020860201b60201c565b6100ec8585858561027060201b60201c565b855f60166101000a81548160ff0219169083151502179055508673ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505050505050505061055b565b5f5f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361026d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b838310156102aa576040517f83e549a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110156102e4576040517f83e549a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836008819055508260098190555081600681905550806007819055507f6372fb6dc71c2ed99d754d2f90068bb3a47b679885ecc841437cd6bfc8c99f1d848484846040516103359493929190610518565b60405180910390a150505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61037082610347565b9050919050565b5f61038182610366565b9050919050565b61039181610377565b811461039b575f5ffd5b50565b5f815190506103ac81610388565b92915050565b5f8115159050919050565b6103c6816103b2565b81146103d0575f5ffd5b50565b5f815190506103e1816103bd565b92915050565b5f819050919050565b6103f9816103e7565b8114610403575f5ffd5b50565b5f81519050610414816103f0565b92915050565b61042381610366565b811461042d575f5ffd5b50565b5f8151905061043e8161041a565b92915050565b5f5f5f5f5f5f5f60e0888a03121561045f5761045e610343565b5b5f61046c8a828b0161039e565b975050602061047d8a828b016103d3565b965050604061048e8a828b01610406565b955050606061049f8a828b01610406565b94505060806104b08a828b01610406565b93505060a06104c18a828b01610406565b92505060c06104d28a828b01610430565b91505092959891949750929550565b6104ea81610366565b82525050565b5f6020820190506105035f8301846104e1565b92915050565b610512816103e7565b82525050565b5f60808201905061052b5f830187610509565b6105386020830186610509565b6105456040830185610509565b6105526060830184610509565b95945050505050565b608051612ba26105885f395f8181610bef01528181610fc7015281816116cc01526118f40152612ba25ff3fe60806040526004361061025a575f3560e01c80638456cb5911610143578063be9a6555116100b5578063d8fb933711610079578063d8fb9337146108ba578063de0c726a146108f6578063df136d6514610920578063e45733ab1461094a578063e9329c3d14610986578063f2fde38b146109b05761025a565b8063be9a6555146107d4578063c3aff2cd146107fe578063cd3daf9d14610828578063cd9bf0e414610852578063d73792a9146108905761025a565b8063a06e3fff11610107578063a06e3fff146106c8578063a518488e146106f2578063a694fc3a1461072e578063a771ebc714610756578063af2b0ce914610780578063b5d7060b146107aa5761025a565b80638456cb5914610608578063882658821461061e5780638b876347146106465780638da5cb5b146106825780639e2c8a5b146106ac5761025a565b806341f5fde0116101dc578063715018a6116101a0578063715018a6146105105780637519ab50146105265780637b0a47ee146105505780637e511df91461057a57806380d85911146105b657806380faa57d146105de5761025a565b806341f5fde01461041c5780635c975abb1461044457806364a3ce201461046e57806367d3b488146104aa57806370a08231146104d45761025a565b806318160ddd1161022357806318160ddd146103505780631ba6599b1461037a578063218e626e146103a257806336601f40146103de5780633f4ba83a146104065761025a565b80628cc2621461025e5780630640310f1461029a5780630700037d146102c25780630db474fa146102fe5780630fb5a6b414610326575b5f5ffd5b348015610269575f5ffd5b50610284600480360381019061027f9190612215565b6109d8565b6040516102919190612258565b60405180910390f35b3480156102a5575f5ffd5b506102c060048036038101906102bb919061229b565b610ad3565b005b3480156102cd575f5ffd5b506102e860048036038101906102e39190612215565b610ca5565b6040516102f59190612258565b60405180910390f35b348015610309575f5ffd5b50610324600480360381019061031f91906122fb565b610cba565b005b348015610331575f5ffd5b5061033a610d30565b6040516103479190612258565b60405180910390f35b34801561035b575f5ffd5b50610364610d36565b6040516103719190612258565b60405180910390f35b348015610385575f5ffd5b506103a0600480360381019061039b9190612326565b610d3c565b005b3480156103ad575f5ffd5b506103c860048036038101906103c39190612215565b610de8565b6040516103d59190612258565b60405180910390f35b3480156103e9575f5ffd5b5061040460048036038101906103ff919061239f565b610e09565b005b348015610411575f5ffd5b5061041a610e41565b005b348015610427575f5ffd5b50610442600480360381019061043d9190612326565b610e53565b005b34801561044f575f5ffd5b506104586110ca565b60405161046591906123fe565b60405180910390f35b348015610479575f5ffd5b50610494600480360381019061048f9190612215565b6110df565b6040516104a19190612258565b60405180910390f35b3480156104b5575f5ffd5b506104be6110f4565b6040516104cb9190612258565b60405180910390f35b3480156104df575f5ffd5b506104fa60048036038101906104f59190612215565b61110a565b6040516105079190612258565b60405180910390f35b34801561051b575f5ffd5b5061052461111f565b005b348015610531575f5ffd5b5061053a611132565b6040516105479190612258565b60405180910390f35b34801561055b575f5ffd5b50610564611138565b6040516105719190612258565b60405180910390f35b348015610585575f5ffd5b506105a0600480360381019061059b9190612215565b61113e565b6040516105ad9190612258565b60405180910390f35b3480156105c1575f5ffd5b506105dc60048036038101906105d79190612417565b61124a565b005b3480156105e9575f5ffd5b506105f26112d2565b6040516105ff9190612258565b60405180910390f35b348015610613575f5ffd5b5061061c6112e9565b005b348015610629575f5ffd5b50610644600480360381019061063f9190612467565b6112fb565b005b348015610651575f5ffd5b5061066c60048036038101906106679190612215565b611315565b6040516106799190612258565b60405180910390f35b34801561068d575f5ffd5b5061069661132a565b6040516106a391906124da565b60405180910390f35b6106c660048036038101906106c191906124f3565b611352565b005b3480156106d3575f5ffd5b506106dc61176e565b6040516106e99190612258565b60405180910390f35b3480156106fd575f5ffd5b5061071860048036038101906107139190612215565b611774565b6040516107259190612637565b60405180910390f35b348015610739575f5ffd5b50610754600480360381019061074f919061229b565b6118d3565b005b348015610761575f5ffd5b5061076a6118e0565b60405161077791906123fe565b60405180910390f35b34801561078b575f5ffd5b506107946118f2565b6040516107a191906126b2565b60405180910390f35b3480156107b5575f5ffd5b506107be611916565b6040516107cb9190612258565b60405180910390f35b3480156107df575f5ffd5b506107e861191c565b6040516107f59190612258565b60405180910390f35b348015610809575f5ffd5b50610812611922565b60405161081f9190612258565b60405180910390f35b348015610833575f5ffd5b5061083c611951565b6040516108499190612258565b60405180910390f35b34801561085d575f5ffd5b5061087860048036038101906108739190612326565b6119c7565b604051610887939291906126cb565b60405180910390f35b34801561089b575f5ffd5b506108a4611a04565b6040516108b19190612258565b60405180910390f35b3480156108c5575f5ffd5b506108e060048036038101906108db9190612215565b611a0a565b6040516108ed9190612258565b60405180910390f35b348015610901575f5ffd5b5061090a611a63565b6040516109179190612258565b60405180910390f35b34801561092b575f5ffd5b50610934611a69565b6040516109419190612258565b60405180910390f35b348015610955575f5ffd5b50610970600480360381019061096b91906124f3565b611a6f565b60405161097d9190612258565b60405180910390f35b348015610991575f5ffd5b5061099a611b6e565b6040516109a79190612258565b60405180910390f35b3480156109bb575f5ffd5b506109d660048036038101906109d19190612215565b611b74565b005b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054670de0b6b3a7640000600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a66611951565b610a70919061272d565b600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ab89190612760565b610ac291906127ce565b610acc91906127fe565b9050919050565b5f600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2090505f816001015403610b5f576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060010154421015610b9d576040517ff32d0d1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f015f9054906101000a900460ff1615610be4576040517fa4f8192900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c333382600201547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611bf89092919063ffffffff16565b6001815f015f6101000a81548160ff02191690831515021790555080600201543373ffffffffffffffffffffffffffffffffffffffff167f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b84604051610c999190612258565b60405180910390a35050565b600c602052805f5260405f205f915090505481565b610cc2611c77565b8015155f60169054906101000a900460ff1615150315610d2d57805f60166101000a81548160ff0219169083151502179055507fe97fa32ceb811a18d1b14115b17ae0034db328b2e2ca987d9922cbf47b03fad681604051610d2491906123fe565b60405180910390a15b50565b60035481565b60015481565b610d44611c77565b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051610d699061285e565b5f6040518083038185875af1925050503d805f8114610da3576040519150601f19603f3d011682016040523d82523d5f602084013e610da8565b606091505b5050905080610de3576040517fb12d13eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b5f64e8d4a51000610df8836109d8565b610e0291906127ce565b9050919050565b610e11611c77565b610e3c82828573ffffffffffffffffffffffffffffffffffffffff16611bf89092919063ffffffff16565b505050565b610e49611c77565b610e51611cfe565b565b610e5b611d5f565b600554421015610e97576040517f587f220300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42610ea06110f4565b1015610ed8576040517fa6a2809800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ee0611da5565b81610ee9611951565b600281905550610ef76112d2565b600a819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fbf57610f39816109d8565b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600254600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61100c3330847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611de6909392919063ffffffff16565b81600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461105891906127fe565b925050819055508160015f82825461107091906127fe565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040516110bd9190612258565b60405180910390a2505050565b5f5f60159054906101000a900460ff16905090565b600d602052805f5260405f205f915090505481565b5f60035460055461110591906127fe565b905090565b600b602052805f5260405f205f915090505481565b611127611c77565b6111305f611e68565b565b600a5481565b60045481565b5f5f5f90505f600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f5f90505b8181101561123f575f600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f206040518060600160405290815f82015f9054906101000a900460ff16151515158152602001600182015481526020016002820154815250509050805f01516112335780604001518461123091906127fe565b93505b81600101915050611189565b508192505050919050565b611252611c77565b8060038190555081600581905550808361126c91906127ce565b60048190555042600a8190555060015f5f6101000a81548160ff0219169083151502179055507f7c8b2bb4ba88603ecaf8a835a16f5dc600d81cc928f239a94f1ab037549017ca8282856040516112c593929190612872565b60405180910390a1505050565b5f6112e46112de6110f4565b42611f2b565b905090565b6112f1611c77565b6112f9611f44565b565b611303611c77565b61130f84848484611fa6565b50505050565b600e602052805f5260405f205f915090505481565b5f5f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b818161135c611d5f565b61136582612079565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156113dc576040517f715cd5ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600854811015611418576040517fbb6bd38c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33611421611951565b60028190555061142f6112d2565b600a819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146114f757611471816109d8565b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600254600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5f600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f6115438787611a6f565b90505f428761155291906127fe565b90505f8289611561919061272d565b905060405180606001604052805f1515815260200183815260200184815250600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8681526020019081526020015f205f820151815f015f6101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155905050600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154611649906128a7565b9190508190555088600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461169c919061272d565b925050819055508860015f8282546116b4919061272d565b925050819055505f8111156117115761171061dead827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611bf89092919063ffffffff16565b5b3373ffffffffffffffffffffffffffffffffffffffff167f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de008a858560405161175b93929190612872565b60405180910390a2505050505050505050565b60085481565b60605f600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f8167ffffffffffffffff8111156117d2576117d16128ee565b5b60405190808252806020026020018201604052801561180b57816020015b6117f8612197565b8152602001906001900390816117f05790505b5090505f5f90505b828110156118c857600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8281526020019081526020015f206040518060600160405290815f82015f9054906101000a900460ff16151515158152602001600182015481526020016002820154815250508282815181106118b2576118b161291b565b5b6020026020010181905250806001019050611813565b508092505050919050565b6118dd3382610e53565b50565b5f60169054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095481565b60055481565b5f61192b6110f4565b42101561194a574261193b6110f4565b611945919061272d565b61194c565b5f5b905090565b5f5f6001541480611963575060055442105b156119725760025490506119c4565b600154670de0b6b3a7640000600a546119896112d2565b611993919061272d565b6004546119a09190612760565b6119aa9190612760565b6119b491906127ce565b6002546119c191906127fe565b90505b90565b600f602052815f5260405f20602052805f5260405f205f9150915050805f015f9054906101000a900460ff16908060010154908060020154905083565b61271081565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a52836109d8565b611a5c91906127fe565b9050919050565b60065481565b60025481565b5f5f60169054906101000a900460ff16611a8b57829050611b68565b600854821015611ac7576040517fbb6bd38c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009548210611ad857829050611b68565b5f600854600954611ae9919061272d565b61271084600954611afa919061272d565b611b049190612760565b611b0e91906127ce565b90505f600654600754611b21919061272d565b90505f6002612710611b339190612a83565b828488611b409190612760565b611b4a9190612760565b611b5491906127ce565b90508086611b62919061272d565b93505050505b92915050565b60075481565b611b7c611c77565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bec575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611be391906124da565b60405180910390fd5b611bf581611e68565b50565b611c72838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401611c2b929190612acd565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b5565b505050565b611c7f612150565b73ffffffffffffffffffffffffffffffffffffffff16611c9d61132a565b73ffffffffffffffffffffffffffffffffffffffff1614611cfc57611cc0612150565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611cf391906124da565b60405180910390fd5b565b611d06612157565b5f5f60156101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611d48612150565b604051611d5591906124da565b60405180910390a1565b5f5f9054906101000a900460ff16611da3576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611dad6110ca565b15611de4576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611e62848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611e1b93929190612af4565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b5565b50505050565b5f5f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81831115611f3a5781611f3c565b825b905092915050565b611f4c611da5565b60015f60156101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f8f612150565b604051611f9c91906124da565b60405180910390a1565b83831015611fe0576040517f83e549a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181101561201a576040517f83e549a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836008819055508260098190555081600681905550806007819055507f6372fb6dc71c2ed99d754d2f90068bb3a47b679885ecc841437cd6bfc8c99f1d8484848460405161206b9493929190612b29565b60405180910390a150505050565b5f81036120b2576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f5f60205f8451602086015f885af1806120d4576040513d5f823e3d81fd5b3d92505f519150505f82146120ed576001811415612108565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561214a57836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161214191906124da565b60405180910390fd5b50505050565b5f33905090565b61215f6110ca565b612195576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60405180606001604052805f151581526020015f81526020015f81525090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6121e4826121bb565b9050919050565b6121f4816121da565b81146121fe575f5ffd5b50565b5f8135905061220f816121eb565b92915050565b5f6020828403121561222a576122296121b7565b5b5f61223784828501612201565b91505092915050565b5f819050919050565b61225281612240565b82525050565b5f60208201905061226b5f830184612249565b92915050565b61227a81612240565b8114612284575f5ffd5b50565b5f8135905061229581612271565b92915050565b5f602082840312156122b0576122af6121b7565b5b5f6122bd84828501612287565b91505092915050565b5f8115159050919050565b6122da816122c6565b81146122e4575f5ffd5b50565b5f813590506122f5816122d1565b92915050565b5f602082840312156123105761230f6121b7565b5b5f61231d848285016122e7565b91505092915050565b5f5f6040838503121561233c5761233b6121b7565b5b5f61234985828601612201565b925050602061235a85828601612287565b9150509250929050565b5f61236e826121da565b9050919050565b61237e81612364565b8114612388575f5ffd5b50565b5f8135905061239981612375565b92915050565b5f5f5f606084860312156123b6576123b56121b7565b5b5f6123c38682870161238b565b93505060206123d486828701612201565b92505060406123e586828701612287565b9150509250925092565b6123f8816122c6565b82525050565b5f6020820190506124115f8301846123ef565b92915050565b5f5f5f6060848603121561242e5761242d6121b7565b5b5f61243b86828701612287565b935050602061244c86828701612287565b925050604061245d86828701612287565b9150509250925092565b5f5f5f5f6080858703121561247f5761247e6121b7565b5b5f61248c87828801612287565b945050602061249d87828801612287565b93505060406124ae87828801612287565b92505060606124bf87828801612287565b91505092959194509250565b6124d4816121da565b82525050565b5f6020820190506124ed5f8301846124cb565b92915050565b5f5f60408385031215612509576125086121b7565b5b5f61251685828601612287565b925050602061252785828601612287565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612563816122c6565b82525050565b61257281612240565b82525050565b606082015f82015161258c5f85018261255a565b50602082015161259f6020850182612569565b5060408201516125b26040850182612569565b50505050565b5f6125c38383612578565b60608301905092915050565b5f602082019050919050565b5f6125e582612531565b6125ef818561253b565b93506125fa8361254b565b805f5b8381101561262a57815161261188826125b8565b975061261c836125cf565b9250506001810190506125fd565b5085935050505092915050565b5f6020820190508181035f83015261264f81846125db565b905092915050565b5f819050919050565b5f61267a612675612670846121bb565b612657565b6121bb565b9050919050565b5f61268b82612660565b9050919050565b5f61269c82612681565b9050919050565b6126ac81612692565b82525050565b5f6020820190506126c55f8301846126a3565b92915050565b5f6060820190506126de5f8301866123ef565b6126eb6020830185612249565b6126f86040830184612249565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61273782612240565b915061274283612240565b925082820390508181111561275a57612759612700565b5b92915050565b5f61276a82612240565b915061277583612240565b925082820261278381612240565b9150828204841483151761279a57612799612700565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6127d882612240565b91506127e383612240565b9250826127f3576127f26127a1565b5b828204905092915050565b5f61280882612240565b915061281383612240565b925082820190508082111561282b5761282a612700565b5b92915050565b5f81905092915050565b50565b5f6128495f83612831565b91506128548261283b565b5f82019050919050565b5f6128688261283e565b9150819050919050565b5f6060820190506128855f830186612249565b6128926020830185612249565b61289f6040830184612249565b949350505050565b5f6128b182612240565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128e3576128e2612700565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561299d5780860481111561297957612978612700565b5b60018516156129885780820291505b808102905061299685612948565b945061295d565b94509492505050565b5f826129b55760019050612a70565b816129c2575f9050612a70565b81600181146129d857600281146129e257612a11565b6001915050612a70565b60ff8411156129f4576129f3612700565b5b8360020a915084821115612a0b57612a0a612700565b5b50612a70565b5060208310610133831016604e8410600b8410161715612a465782820a905083811115612a4157612a40612700565b5b612a70565b612a538484846001612954565b92509050818404811115612a6a57612a69612700565b5b81810290505b9392505050565b5f60ff82169050919050565b5f612a8d82612240565b9150612a9883612a77565b9250612ac57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846129a6565b905092915050565b5f604082019050612ae05f8301856124cb565b612aed6020830184612249565b9392505050565b5f606082019050612b075f8301866124cb565b612b1460208301856124cb565b612b216040830184612249565b949350505050565b5f608082019050612b3c5f830187612249565b612b496020830186612249565b612b566040830185612249565b612b636060830184612249565b9594505050505056fea26469706673582212204fd508d1d3f7f2943a565380afdaa71c6cca08c6526d9cccbc2964c5077e75ba64736f6c634300081c003300000000000000000000000061e39a8338d6049db936534596f29ec26ff5ae7a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003f480000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045745afb8b2c7ffc1f63c0705bb910e0b990b14e