239 txs
225 calls
constructor
constructor(address _usdtAddress, address _secondOwner)
functions
batchNonce
viewfunction batchNonce() view returns (uint256)
getPendingWithdrawals
viewfunction getPendingWithdrawals() view returns (uint256)
getPoolBalance
viewfunction getPoolBalance() view returns (uint256)
getRewardClaimRequest
viewfunction getRewardClaimRequest(address _user) view returns (uint256 amount, uint256 timestamp, bool processed)
getUserRewardNonce
viewfunction getUserRewardNonce(address _user) view returns (uint256)
getUserStakedBalance
viewfunction getUserStakedBalance(address _user) view returns (uint256)
getWithdrawalRequest
viewfunction getWithdrawalRequest(address _user) view returns (uint256 amount, uint256 timestamp, bool processed)
lockupPeriod
viewfunction lockupPeriod() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
rewardClaimRequests
viewfunction rewardClaimRequests(address) view returns (uint256 amount, uint256 timestamp, bool processed)
secondOwner
viewfunction secondOwner() view returns (address)
totalPendingWithdrawals
viewfunction totalPendingWithdrawals() view returns (uint256)
totalPoolBalance
viewfunction totalPoolBalance() view returns (uint256)
usdt
viewfunction usdt() view returns (address)
userLastRewardCalculation
viewfunction userLastRewardCalculation(address) view returns (uint256)
userRewardNonces
viewfunction userRewardNonces(address) view returns (uint256)
userStakedBalances
viewfunction userStakedBalances(address) view returns (uint256)
userStakeTimestamps
viewfunction userStakeTimestamps(address) view returns (uint256)
withdrawalRequests
viewfunction withdrawalRequests(address) view returns (uint256 amount, uint256 timestamp, bool processed)
adminDeposit
nonpayablefunction adminDeposit(uint256 _amount)
adminWithdraw
nonpayablefunction adminWithdraw(uint256 _amount)
batchProcessRewardClaims
nonpayablefunction batchProcessRewardClaims(address[] users, bytes ownerSig, bytes secondSig)
batchProcessWithdrawals
nonpayablefunction batchProcessWithdrawals(address[] users, bytes ownerSig, bytes secondSig)
deposit
nonpayablefunction deposit(uint256 _amount)
emergencyWithdraw
nonpayablefunction emergencyWithdraw() returns (uint256)
pause
nonpayablefunction pause()
processRewardClaim
nonpayablefunction processRewardClaim(address _user)
processWithdrawal
nonpayablefunction processWithdrawal(address _user)
renounceOwnership
nonpayablefunction renounceOwnership()
requestRewardClaim
nonpayablefunction requestRewardClaim(uint256 _amount, uint256 _nonce, bytes _signature)
requestWithdrawal
nonpayablefunction requestWithdrawal(uint256 _amount)
setLockupPeriod
nonpayablefunction setLockupPeriod(uint256 _newPeriod)
setSecondOwner
nonpayablefunction setSecondOwner(address _newSecondOwner)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
AdminDeposited
event AdminDeposited(address indexed admin, uint256 amount)
AdminWithdrawn
event AdminWithdrawn(address indexed admin, uint256 amount)
BatchUSDTTransfer
event BatchUSDTTransfer(address indexed from, address indexed to, uint256 amount)
Deposited
event Deposited(address indexed user, uint256 amount)
LockupPeriodChanged
event LockupPeriodChanged(uint256 newPeriod)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RewardClaimProcessed
event RewardClaimProcessed(address indexed user, uint256 amount, uint256 nonce)
RewardClaimRequested
event RewardClaimRequested(address indexed user, uint256 amount, uint256 nonce)
RewardsCalculated
event RewardsCalculated(address indexed user, uint256 amount)
SecondOwnerChanged
event SecondOwnerChanged(address indexed oldSecondOwner, address indexed newSecondOwner)
Unpaused
event Unpaused(address account)
WithdrawalProcessed
event WithdrawalProcessed(address indexed user, uint256 amount)
WithdrawalRequested
event WithdrawalRequested(address indexed user, uint256 amount)
errors
No errors.
creation bytecode
0x60a0604052610e10600b556000600d553480156200001c57600080fd5b5060405162004dde38038062004dde83398181016040528101906200004291906200032c565b6200006262000056620001f660201b60201c565b620001fe60201b60201c565b600180819055506000600260006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ed90620003d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000168576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015f9062000446565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001ee33620001fe60201b60201c565b505062000468565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002f482620002c7565b9050919050565b6200030681620002e7565b81146200031257600080fd5b50565b6000815190506200032681620002fb565b92915050565b60008060408385031215620003465762000345620002c2565b5b6000620003568582860162000315565b9250506020620003698582860162000315565b9150509250929050565b600082825260208201905092915050565b7f496e76616c696420555344542061646472657373000000000000000000000000600082015250565b6000620003bc60148362000373565b9150620003c98262000384565b602082019050919050565b60006020820190508181036000830152620003ef81620003ad565b9050919050565b7f496e76616c6964207365636f6e64206f776e6572206164647265737300000000600082015250565b60006200042e601c8362000373565b91506200043b82620003f6565b602082019050919050565b6000602082019050818103600083015262000461816200041f565b9050919050565b60805161491b620004c3600039600081816107230152818161081a015281816109e701528181610c5b015281816114c501528181611a4f01528181611e1701528181611f370152818161203501526122b0015261491b6000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80639ee679e811610125578063c771c390116100ad578063e0f215cb1161007c578063e0f215cb14610609578063e14bb84514610639578063edb9abf81461066b578063ee947a7c14610687578063f2fde38b146106a55761021c565b8063c771c39014610583578063c80772891461059f578063ca1b6cc4146105cf578063db2e21bc146105eb5761021c565b8063b6b55f25116100f4578063b6b55f25146104f3578063bbedb64b1461050f578063c37fc8a81461052b578063c4d256bb14610549578063c75f3cb6146105655761021c565b80639ee679e81461047f578063a4563e031461049b578063abd70aa2146104b9578063b1128037146104d75761021c565b80635b1ad1bf116101a8578063715018a611610177578063715018a6146103ff5780637c5b4a37146104095780638456cb59146104255780638c661b5d1461042f5780638da5cb5b146104615761021c565b80635b1ad1bf146103615780635c975abb1461039357806368a9f31c146103b15780636f2121c6146103cf5761021c565b80633abac467116101ef5780633abac467146102bd5780633c1a5012146102ed5780633f4ba83a146103095780635026d63e14610313578063524e2ad8146103315761021c565b8063086877941461022157806327b380f31461023d5780632f48ab7d1461026f57806331141d141461028d575b600080fd5b61023b600480360381019061023691906130e4565b6106c1565b005b6102576004803603810190610252919061316f565b6107e1565b604051610266939291906131c6565b60405180910390f35b610277610818565b604051610284919061325c565b60405180910390f35b6102a760048036038101906102a2919061316f565b61083c565b6040516102b49190613277565b60405180910390f35b6102d760048036038101906102d2919061316f565b610854565b6040516102e49190613277565b60405180910390f35b6103076004803603810190610302919061316f565b61089d565b005b610311610a89565b005b61031b610a9b565b6040516103289190613277565b60405180910390f35b61034b6004803603810190610346919061316f565b610aa1565b6040516103589190613277565b60405180910390f35b61037b6004803603810190610376919061316f565b610ab9565b60405161038a939291906131c6565b60405180910390f35b61039b610af0565b6040516103a89190613292565b60405180910390f35b6103b9610b07565b6040516103c691906132bc565b60405180910390f35b6103e960048036038101906103e4919061316f565b610b2d565b6040516103f69190613277565b60405180910390f35b610407610b76565b005b610423600480360381019061041e91906130e4565b610b8a565b005b61042d610d00565b005b6104496004803603810190610444919061316f565b610d12565b604051610458939291906131c6565b60405180910390f35b610469610d83565b60405161047691906132bc565b60405180910390f35b610499600480360381019061049491906130e4565b610dac565b005b6104a36110ba565b6040516104b09190613277565b60405180910390f35b6104c16110c0565b6040516104ce9190613277565b60405180910390f35b6104f160048036038101906104ec919061341d565b6110ca565b005b61050d600480360381019061050891906130e4565b61146a565b005b6105296004803603810190610524919061316f565b611616565b005b6105336117e3565b6040516105409190613277565b60405180910390f35b610563600480360381019061055e9190613542565b6117ed565b005b61056d611b0c565b60405161057a9190613277565b60405180910390f35b61059d600480360381019061059891906130e4565b611b12565b005b6105b960048036038101906105b4919061316f565b611b9e565b6040516105c69190613277565b60405180910390f35b6105e960048036038101906105e49190613542565b611bb6565b005b6105f3611f21565b6040516106009190613277565b60405180910390f35b610623600480360381019061061e919061316f565b6120de565b6040516106309190613277565b60405180910390f35b610653600480360381019061064e919061316f565b6120f6565b604051610662939291906131c6565b60405180910390f35b6106856004803603810190610680919061316f565b612167565b005b61068f61239f565b60405161069c9190613277565b60405180910390f35b6106bf60048036038101906106ba919061316f565b6123a5565b005b6106c9612428565b6106d1612477565b60008111610714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070b90613653565b60405180910390fd5b61076861071f610d83565b30837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166124f5909392919063ffffffff16565b806008600082825461077a91906136a2565b92505081905550610789610d83565b73ffffffffffffffffffffffffffffffffffffffff167ff3ce8e8d439080ce9af8787baf7ab58c4fe1f6497da71f370c32a1a0a2314667826040516107ce9190613277565b60405180910390a26107de61257e565b50565b60096020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16905083565b7f000000000000000000000000000000000000000000000000000000000000000081565b60056020528060005260406000206000915090505481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108a5612428565b6108ad612477565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e90613722565b60405180910390fd5b8060020160009054906101000a900460ff1615610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109809061378e565b60405180910390fd5b806000015460085410156109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c9906137fa565b60405180910390fd5b6109dc8282612587565b610a2b8282600001547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661263c9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f5abb0fc89def2ee3226cc48f5621ee8e2b45f6dcc7898d2bdb5d480533c32bc08260000154604051610a759190613277565b60405180910390a250610a8661257e565b50565b610a91612477565b610a996126c2565b565b60085481565b60046020528060005260406000206000915090505481565b60076020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16905083565b6000600260009054906101000a900460ff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b7e612477565b610b886000612725565b565b610b92612428565b610b9a612477565b60008111610bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd490613653565b60405180910390fd5b6000600a54600854610bef919061381a565b905081811015610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b9061389a565b60405180910390fd5b8160086000828254610c46919061381a565b92505081905550610c9f610c58610d83565b837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661263c9092919063ffffffff16565b610ca7610d83565b73ffffffffffffffffffffffffffffffffffffffff167fca1cf43de312865665f595e88f569f9d5246690c07df26e86aba01147e6d131483604051610cec9190613277565b60405180910390a250610cfd61257e565b50565b610d08612477565b610d106127e9565b565b600080600080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015481600101548260020160009054906101000a900460ff16935093509350509193909250565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610db4612428565b610dbc61284c565b60008111610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df690613653565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7890613906565b60405180910390fd5b600b54600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ece91906136a2565b421015610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0790613972565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff1680610f74575060008160000154145b610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613a04565b60405180910390fd5b604051806060016040528083815260200142815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff02191690831515021790555090505081600a600082825461105991906136a2565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe670e4e82118d22a1f9ee18920455ebc958bae26a90a05d31d3378788b1b0e44836040516110a69190613277565b60405180910390a2506110b761257e565b50565b600a5481565b6000600854905090565b6110d2612428565b6110da61284c565b6000831161111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490613653565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821461119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613a70565b60405180910390fd5b6000338484306040516020016111b79493929190613af9565b60405160208183030381529060405280519060200120905060006111da82612896565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661122884836128cc90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff161461127e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127590613b93565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16806112e2575060008160000154145b611321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131890613c25565b60405180910390fd5b604051806060016040528087815260200142815260200160001515815250600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff021916908315150217905550905050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061140590613c45565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f874d337230b4e0f2ce1e7ddb08318e62246153230b8a09b1c48c108517d1c2f58787604051611452929190613c8d565b60405180910390a250505061146561257e565b505050565b611472612428565b61147a61284c565b600081116114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b490613653565b60405180910390fd5b61150a3330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166124f5909392919063ffffffff16565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461155991906136a2565b9250508190555042600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600860008282546115b691906136a2565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040516116039190613277565b60405180910390a261161361257e565b50565b61161e612477565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361168d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168490613d02565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490613d6e565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f9895ee1187795c02892fe2e75cccd7eb15bc8852558dbcc3f5789f937db160b160405160405180910390a35050565b6000600a54905090565b6117f5612428565b6118398686868686866040518060400160405280601781526020017f626174636850726f636573735769746864726177616c730000000000000000008152506128f3565b6000805b8787905081101561197757600088888381811061185d5761185c613d8e565b5b9050602002016020810190611872919061316f565b90506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000154116118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613722565b60405180910390fd5b8060020160009054906101000a900460ff1615611950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119479061378e565b60405180910390fd5b80600001548461196091906136a2565b93505050808061196f90613c45565b91505061183d565b508060085410156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b4906137fa565b60405180910390fd5b60005b87879050811015611afa5760008888838181106119e0576119df613d8e565b5b90506020020160208101906119f5919061316f565b90506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611a448282612587565b611a938282600001547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661263c9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f5abb0fc89def2ee3226cc48f5621ee8e2b45f6dcc7898d2bdb5d480533c32bc08260000154604051611add9190613277565b60405180910390a250508080611af290613c45565b9150506119c0565b5050611b0461257e565b505050505050565b600d5481565b611b1a612477565b60008111611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490613e2f565b60405180910390fd5b80600b819055507fc5e00a325524bc148ddc05bb642b804e9ae1dfc670c217ed3c4c6595f7427ef481604051611b939190613277565b60405180910390a150565b60066020528060005260406000206000915090505481565b611bbe612428565b611c028686868686866040518060400160405280601881526020017f626174636850726f63657373526577617264436c61696d7300000000000000008152506128f3565b6000805b87879050811015611d40576000888883818110611c2657611c25613d8e565b5b9050602002016020810190611c3b919061316f565b90506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90613e9b565b60405180910390fd5b8060020160009054906101000a900460ff1615611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090613f07565b60405180910390fd5b806000015484611d2991906136a2565b935050508080611d3890613c45565b915050611c06565b50806008541015611d86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7d906137fa565b60405180910390fd5b60005b87879050811015611f0f576000888883818110611da957611da8613d8e565b5b9050602002016020810190611dbe919061316f565b90506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611e0c81612ade565b611e5b8282600001547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661263c9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f11ed5d4c3481fe16bbc425c626df1766eb37b4fae39266c7fd4a146846d5e88582600001546001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ee4919061381a565b604051611ef2929190613c8d565b60405180910390a250508080611f0790613c45565b915050611d89565b5050611f1961257e565b505050505050565b6000611f2b612428565b611f33612477565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f8e91906132bc565b602060405180830381865afa158015611fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcf9190613f3c565b90506008548111612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90613fb5565b60405180910390fd5b600060085482612025919061381a565b9050612079612032610d83565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661263c9092919063ffffffff16565b612081610d83565b73ffffffffffffffffffffffffffffffffffffffff167fca1cf43de312865665f595e88f569f9d5246690c07df26e86aba01147e6d1314826040516120c69190613277565b60405180910390a280925050506120db61257e565b90565b60036020528060005260406000206000915090505481565b600080600080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015481600101548260020160009054906101000a900460ff16935093509350509193909250565b61216f612428565b612177612477565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015411612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f890613e9b565b60405180910390fd5b8060020160009054906101000a900460ff1615612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a90613f07565b60405180910390fd5b8060000154600854101561229c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612293906137fa565b60405180910390fd5b6122a581612ade565b6122f48282600001547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661263c9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f11ed5d4c3481fe16bbc425c626df1766eb37b4fae39266c7fd4a146846d5e88582600001546001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461237d919061381a565b60405161238b929190613c8d565b60405180910390a25061239c61257e565b50565b600b5481565b6123ad612477565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390614047565b60405180910390fd5b61242581612725565b50565b60026001540361246d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612464906140b3565b60405180910390fd5b6002600181905550565b61247f612b1b565b73ffffffffffffffffffffffffffffffffffffffff1661249d610d83565b73ffffffffffffffffffffffffffffffffffffffff16146124f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ea9061411f565b60405180910390fd5b565b612578846323b872dd60e01b8585856040516024016125169392919061413f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b23565b50505050565b60018081905550565b60018160020160006101000a81548160ff0219169083151502179055508060000154600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125f7919061381a565b92505081905550806000015460086000828254612614919061381a565b925050819055508060000154600a6000828254612631919061381a565b925050819055505050565b6126bd8363a9059cbb60e01b848460405160240161265b929190614176565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b23565b505050565b6126ca612beb565b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61270e612b1b565b60405161271b91906132bc565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127f161284c565b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612835612b1b565b60405161284291906132bc565b60405180910390a1565b612854610af0565b15612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b906141eb565b60405180910390fd5b565b60007f19457468657265756d205369676e6564204d6573736167653a0a33320000000060005281601c52603c6000209050919050565b60008060006128db8585612c34565b915091506128e881612c85565b819250505092915050565b60008787600d54308560405160200161291095949392919061433c565b604051602081830303815290604052805190602001209050600061293382612896565b9050600061298e88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050836128cc90919063ffffffff16565b905060006129e987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050846128cc90919063ffffffff16565b90506129f3610d83565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015612a7a5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab0906143dd565b60405180910390fd5b600d6000815480929190612acc90613c45565b91905055505050505050505050505050565b60018160020160006101000a81548160ff021916908315150217905550806000015460086000828254612b11919061381a565b9250508190555050565b600033905090565b6000612b85826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612deb9092919063ffffffff16565b9050600081511480612ba7575080806020019051810190612ba69190614429565b5b612be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdd906144c8565b60405180910390fd5b505050565b612bf3610af0565b612c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2990614534565b60405180910390fd5b565b6000806041835103612c755760008060006020860151925060408601519150606086015160001a9050612c6987828585612e03565b94509450505050612c7e565b60006002915091505b9250929050565b60006004811115612c9957612c98614554565b5b816004811115612cac57612cab614554565b5b0315612de85760016004811115612cc657612cc5614554565b5b816004811115612cd957612cd8614554565b5b03612d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d10906145cf565b60405180910390fd5b60026004811115612d2d57612d2c614554565b5b816004811115612d4057612d3f614554565b5b03612d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d779061463b565b60405180910390fd5b60036004811115612d9457612d93614554565b5b816004811115612da757612da6614554565b5b03612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde906146cd565b60405180910390fd5b5b50565b6060612dfa8484600085612ee5565b90509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612e3e576000600391509150612edc565b600060018787878760405160008152602001604052604051612e639493929190614722565b6020604051602081039080840390855afa158015612e85573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ed357600060019250925050612edc565b80600092509250505b94509492505050565b606082471015612f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f21906147d9565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612f539190614840565b60006040518083038185875af1925050503d8060008114612f90576040519150601f19603f3d011682016040523d82523d6000602084013e612f95565b606091505b5091509150612fa687838387612fb2565b92505050949350505050565b6060831561301457600083510361300c57612fcc85613027565b61300b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613002906148a3565b60405180910390fd5b5b82905061301f565b61301e838361304a565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561305d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309191906148c3565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6130c1816130ae565b81146130cc57600080fd5b50565b6000813590506130de816130b8565b92915050565b6000602082840312156130fa576130f96130a4565b5b6000613108848285016130cf565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061313c82613111565b9050919050565b61314c81613131565b811461315757600080fd5b50565b60008135905061316981613143565b92915050565b600060208284031215613185576131846130a4565b5b60006131938482850161315a565b91505092915050565b6131a5816130ae565b82525050565b60008115159050919050565b6131c0816131ab565b82525050565b60006060820190506131db600083018661319c565b6131e8602083018561319c565b6131f560408301846131b7565b949350505050565b6000819050919050565b600061322261321d61321884613111565b6131fd565b613111565b9050919050565b600061323482613207565b9050919050565b600061324682613229565b9050919050565b6132568161323b565b82525050565b6000602082019050613271600083018461324d565b92915050565b600060208201905061328c600083018461319c565b92915050565b60006020820190506132a760008301846131b7565b92915050565b6132b681613131565b82525050565b60006020820190506132d160008301846132ad565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61332a826132e1565b810181811067ffffffffffffffff82111715613349576133486132f2565b5b80604052505050565b600061335c61309a565b90506133688282613321565b919050565b600067ffffffffffffffff821115613388576133876132f2565b5b613391826132e1565b9050602081019050919050565b82818337600083830152505050565b60006133c06133bb8461336d565b613352565b9050828152602081018484840111156133dc576133db6132dc565b5b6133e784828561339e565b509392505050565b600082601f830112613404576134036132d7565b5b81356134148482602086016133ad565b91505092915050565b600080600060608486031215613436576134356130a4565b5b6000613444868287016130cf565b9350506020613455868287016130cf565b925050604084013567ffffffffffffffff811115613476576134756130a9565b5b613482868287016133ef565b9150509250925092565b600080fd5b600080fd5b60008083601f8401126134ac576134ab6132d7565b5b8235905067ffffffffffffffff8111156134c9576134c861348c565b5b6020830191508360208202830111156134e5576134e4613491565b5b9250929050565b60008083601f840112613502576135016132d7565b5b8235905067ffffffffffffffff81111561351f5761351e61348c565b5b60208301915083600182028301111561353b5761353a613491565b5b9250929050565b6000806000806000806060878903121561355f5761355e6130a4565b5b600087013567ffffffffffffffff81111561357d5761357c6130a9565b5b61358989828a01613496565b9650965050602087013567ffffffffffffffff8111156135ac576135ab6130a9565b5b6135b889828a016134ec565b9450945050604087013567ffffffffffffffff8111156135db576135da6130a9565b5b6135e789828a016134ec565b92509250509295509295509295565b600082825260208201905092915050565b7f416d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b600061363d601d836135f6565b915061364882613607565b602082019050919050565b6000602082019050818103600083015261366c81613630565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136ad826130ae565b91506136b8836130ae565b92508282019050808211156136d0576136cf613673565b5b92915050565b7f4e6f207769746864726177616c207265717565737420666f756e640000000000600082015250565b600061370c601b836135f6565b9150613717826136d6565b602082019050919050565b6000602082019050818103600083015261373b816136ff565b9050919050565b7f5769746864726177616c20616c72656164792070726f63657373656400000000600082015250565b6000613778601c836135f6565b915061378382613742565b602082019050919050565b600060208201905081810360008301526137a78161376b565b9050919050565b7f496e73756666696369656e7420706f6f6c2062616c616e636500000000000000600082015250565b60006137e46019836135f6565b91506137ef826137ae565b602082019050919050565b60006020820190508181036000830152613813816137d7565b9050919050565b6000613825826130ae565b9150613830836130ae565b925082820390508181111561384857613847613673565b5b92915050565b7f496e73756666696369656e7420617661696c61626c652062616c616e63650000600082015250565b6000613884601e836135f6565b915061388f8261384e565b602082019050919050565b600060208201905081810360008301526138b381613877565b9050919050565b7f496e73756666696369656e74207374616b65642062616c616e63650000000000600082015250565b60006138f0601b836135f6565b91506138fb826138ba565b602082019050919050565b6000602082019050818103600083015261391f816138e3565b9050919050565b7f4c6f636b757020706572696f64206e6f74207061737365640000000000000000600082015250565b600061395c6018836135f6565b915061396782613926565b602082019050919050565b6000602082019050818103600083015261398b8161394f565b9050919050565b7f50726576696f7573207769746864726177616c2072657175657374206e6f742060008201527f70726f636573736564206f7220746f6f20736f6f6e0000000000000000000000602082015250565b60006139ee6035836135f6565b91506139f982613992565b604082019050919050565b60006020820190508181036000830152613a1d816139e1565b9050919050565b7f496e76616c6964206e6f6e636500000000000000000000000000000000000000600082015250565b6000613a5a600d836135f6565b9150613a6582613a24565b602082019050919050565b60006020820190508181036000830152613a8981613a4d565b9050919050565b60008160601b9050919050565b6000613aa882613a90565b9050919050565b6000613aba82613a9d565b9050919050565b613ad2613acd82613131565b613aaf565b82525050565b6000819050919050565b613af3613aee826130ae565b613ad8565b82525050565b6000613b058287613ac1565b601482019150613b158286613ae2565b602082019150613b258285613ae2565b602082019150613b358284613ac1565b60148201915081905095945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000613b7d6011836135f6565b9150613b8882613b47565b602082019050919050565b60006020820190508181036000830152613bac81613b70565b9050919050565b7f50726576696f75732072657761726420636c61696d2072657175657374206e6f60008201527f742070726f636573736564000000000000000000000000000000000000000000602082015250565b6000613c0f602b836135f6565b9150613c1a82613bb3565b604082019050919050565b60006020820190508181036000830152613c3e81613c02565b9050919050565b6000613c50826130ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c8257613c81613673565b5b600182019050919050565b6000604082019050613ca2600083018561319c565b613caf602083018461319c565b9392505050565b7f496e76616c6964207365636f6e64206f776e6572206164647265737300000000600082015250565b6000613cec601c836135f6565b9150613cf782613cb6565b602082019050919050565b60006020820190508181036000830152613d1b81613cdf565b9050919050565b7f53616d652061732063757272656e74207365636f6e64206f776e657200000000600082015250565b6000613d58601c836135f6565b9150613d6382613d22565b602082019050919050565b60006020820190508181036000830152613d8781613d4b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4c6f636b757020706572696f64206d757374206265206772656174657220746860008201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b6000613e196024836135f6565b9150613e2482613dbd565b604082019050919050565b60006020820190508181036000830152613e4881613e0c565b9050919050565b7f4e6f2072657761726420636c61696d207265717565737420666f756e64000000600082015250565b6000613e85601d836135f6565b9150613e9082613e4f565b602082019050919050565b60006020820190508181036000830152613eb481613e78565b9050919050565b7f52657761726420636c61696d20616c72656164792070726f6365737365640000600082015250565b6000613ef1601e836135f6565b9150613efc82613ebb565b602082019050919050565b60006020820190508181036000830152613f2081613ee4565b9050919050565b600081519050613f36816130b8565b92915050565b600060208284031215613f5257613f516130a4565b5b6000613f6084828501613f27565b91505092915050565b7f4e6f20737572706c7573205553445420746f2077697468647261770000000000600082015250565b6000613f9f601b836135f6565b9150613faa82613f69565b602082019050919050565b60006020820190508181036000830152613fce81613f92565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140316026836135f6565b915061403c82613fd5565b604082019050919050565b6000602082019050818103600083015261406081614024565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061409d601f836135f6565b91506140a882614067565b602082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141096020836135f6565b9150614114826140d3565b602082019050919050565b60006020820190508181036000830152614138816140fc565b9050919050565b600060608201905061415460008301866132ad565b61416160208301856132ad565b61416e604083018461319c565b949350505050565b600060408201905061418b60008301856132ad565b614198602083018461319c565b9392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006141d56010836135f6565b91506141e08261419f565b602082019050919050565b60006020820190508181036000830152614204816141c8565b9050919050565b600082825260208201905092915050565b6000819050919050565b61422f81613131565b82525050565b60006142418383614226565b60208301905092915050565b600061425c602084018461315a565b905092915050565b6000602082019050919050565b600061427d838561420b565b93506142888261421c565b8060005b858110156142c15761429e828461424d565b6142a88882614235565b97506142b383614264565b92505060018101905061428c565b5085925050509392505050565b600081519050919050565b60005b838110156142f75780820151818401526020810190506142dc565b60008484015250505050565b600061430e826142ce565b61431881856135f6565b93506143288185602086016142d9565b614331816132e1565b840191505092915050565b60006080820190508181036000830152614357818789614271565b9050614366602083018661319c565b61437360408301856132ad565b81810360608301526143858184614303565b90509695505050505050565b7f496e76616c6964207369676e6174757265730000000000000000000000000000600082015250565b60006143c76012836135f6565b91506143d282614391565b602082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b614406816131ab565b811461441157600080fd5b50565b600081519050614423816143fd565b92915050565b60006020828403121561443f5761443e6130a4565b5b600061444d84828501614414565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006144b2602a836135f6565b91506144bd82614456565b604082019050919050565b600060208201905081810360008301526144e1816144a5565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061451e6014836135f6565b9150614529826144e8565b602082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006145b96018836135f6565b91506145c482614583565b602082019050919050565b600060208201905081810360008301526145e8816145ac565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000614625601f836135f6565b9150614630826145ef565b602082019050919050565b6000602082019050818103600083015261465481614618565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b76022836135f6565b91506146c28261465b565b604082019050919050565b600060208201905081810360008301526146e6816146aa565b9050919050565b6000819050919050565b614700816146ed565b82525050565b600060ff82169050919050565b61471c81614706565b82525050565b600060808201905061473760008301876146f7565b6147446020830186614713565b61475160408301856146f7565b61475e60608301846146f7565b95945050505050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006147c36026836135f6565b91506147ce82614767565b604082019050919050565b600060208201905081810360008301526147f2816147b6565b9050919050565b600081519050919050565b600081905092915050565b600061481a826147f9565b6148248185614804565b93506148348185602086016142d9565b80840191505092915050565b600061484c828461480f565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061488d601d836135f6565b915061489882614857565b602082019050919050565b600060208201905081810360008301526148bc81614880565b9050919050565b600060208201905081810360008301526148dd8184614303565b90509291505056fea264697066735822122033027766a4c569ac700af53876220959c20651383f49640c633da2548021618c64736f6c63430008130033000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000d8424ee7cc2520f7dae828f84f99f53ac0dd6734