[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "i", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "Claim", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "stakeId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "robot", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "DepositByRobot", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "i", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "NewRewardToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferPrepared", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "RemoveRewardToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "i", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "UpdateEndTime", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "i", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewardPerSecond", "type": "uint256" } ], "name": "UpdateReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "stakeId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "robot", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "WithdrawByRobot", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "i", "type": "uint256" } ], "name": "WithdrawLeftOver", "type": "event" }, { "inputs": [], "name": "_LOCK_DURATION_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_NEW_OWNER_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_OWNER_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_ROBOT_ADDRESS_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_ROBOT_WITHDRAW_AMOUNT_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_TOKEN_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rewardToken", "type": "address" }, { "internalType": "uint256", "name": "rewardPerSecond", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "addRewardToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimAllRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" } ], "name": "claimReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "depositByRobot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "directTransferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "getIdByRewardToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "i", "type": "uint256" } ], "name": "getPendingReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "getPendingRewardByToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRewardNum", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" } ], "name": "getRewardTokenById", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "getVaultByRewardToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "getVaultDebtByRewardToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "initOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "rewardTokenInfos", "outputs": [ { "internalType": "address", "name": "rewardToken", "type": "address" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "address", "name": "rewardVault", "type": "address" }, { "internalType": "uint256", "name": "rewardPerSecond", "type": "uint256" }, { "internalType": "uint256", "name": "accRewardPerShare", "type": "uint256" }, { "internalType": "uint256", "name": "lastRewardTime", "type": "uint256" }, { "internalType": "uint256", "name": "workThroughReward", "type": "uint256" }, { "internalType": "uint256", "name": "lastFlagTime", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "newEndTime", "type": "uint256" } ], "name": "setEndTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "newRewardPerSecond", "type": "uint256" } ], "name": "setReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "robotAddress", "type": "address" } ], "name": "setRobotAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "stakerIds", "outputs": [ { "internalType": "address", "name": "staker", "type": "address" }, { "internalType": "uint256", "name": "stakeTime", "type": "uint256" }, { "internalType": "uint256", "name": "stakeAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stakerInfoLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "stakerWithdrawn", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "userStakeInfos", "outputs": [ { "internalType": "address", "name": "staker", "type": "address" }, { "internalType": "uint256", "name": "stakeTime", "type": "uint256" }, { "internalType": "uint256", "name": "stakeAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "stakeId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdrawByRobot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdrawLeftOver", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405260006007556000600c5534801561001a57600080fd5b506137b48061002a6000396000f3fe608060405234801561001057600080fd5b506004361061021b5760003560e01c80638456db1511610125578063ae169a50116100ad578063cf08be2a1161007c578063cf08be2a14610455578063d895fff11461045d578063e513eb1514610470578063eb51eee814610483578063f2fde38b146104965761021b565b8063ae169a5014610409578063b6b55f251461041c578063bdbf26571461042f578063bdd37dc6146104425761021b565b8063a2a54bee116100f4578063a2a54bee146103aa578063a47bd496146103bd578063a7c3e4e5146103d0578063aa2f497b146103e3578063abfbac4b146103f65761021b565b80638456db151461037457806386863ec61461037c57806392e3200b1461038f578063999ffd97146103975761021b565b80631c00a0de116101a85780634e71e0c8116101775780634e71e0c81461031e578063519e4ac7146103265780635ae9a54914610346578063697d86a21461034e57806370a08231146103615761021b565b80631c00a0de146102ae5780632c7176f9146102d65780633d45747f146102e9578063441a3e701461030b5761021b565b80630b83a727116101ef5780630b83a7271461026e5780630d0092971461027657806316048bc41461028957806318160ddd1461029e5780631aaafb8d146102a65761021b565b8062b68f081461022057806304509063146102495780630a6180c81461025e5780630a83336614610266575b600080fd5b61023361022e366004612623565b6104a9565b6040516102409190612f47565b60405180910390f35b61025c610257366004612608565b6104c1565b005b61023361056f565b610233610575565b61025c61057b565b61025c610284366004612608565b61059e565b610291610603565b60405161024091906127a5565b610233610617565b61029161061e565b6102c16102bc36600461271b565b61062d565b60405161024099989796959493929190612817565b61025c6102e436600461271b565b610692565b6102fc6102f7366004612697565b610760565b604051610240939291906127f6565b61025c61031936600461274b565b6107a9565b61025c6109e6565b61033961033436600461271b565b610a85565b604051610240919061286a565b610233610a9a565b61029161035c36600461271b565b610aa0565b61023361036f366004612608565b610b68565b610291610b83565b61025c61038a366004612657565b610b92565b610291610bc2565b6102336103a5366004612697565b610bd1565b6102336103b8366004612608565b610ca5565b61025c6103cb36600461274b565b610d10565b61025c6103de3660046126c1565b610f23565b61025c6103f136600461271b565b611243565b61025c61040436600461274b565b611380565b61025c61041736600461271b565b61157d565b61025c61042a36600461271b565b6116a2565b61023361043d366004612608565b6119bc565b61025c610450366004612608565b611b88565b610233611c43565b61025c61046b36600461274b565b611c49565b61029161047e366004612608565b611e8b565b6102fc61049136600461271b565b611f08565b61025c6104a4366004612608565b611f33565b60006104b8836103a584610ca5565b90505b92915050565b60005461010090046001600160a01b031633146104f95760405162461bcd60e51b81526004016104f090612d81565b60405180910390fd5b6001600160a01b03811661051f5760405162461bcd60e51b81526004016104f090612b96565b600b546001600160a01b038281169116141561054d5760405162461bcd60e51b81526004016104f0906128ac565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60065481565b600c5481565b60025460005b8181101561059a576105928161157d565b600101610581565b5050565b600154600160a01b900460ff16156105c85760405162461bcd60e51b81526004016104f090612adf565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60005461010090046001600160a01b031681565b6003545b90565b600b546001600160a01b031681565b6002818154811061063a57fe5b60009182526020909120600b90910201805460018201546002830154600384015460048501546005860154600687015460078801546008909801546001600160a01b0397881699509597949690931694919390929189565b600b546001600160a01b031633146106bc5760405162461bcd60e51b81526004016104f090612875565b600081116106dc5760405162461bcd60e51b81526004016104f090612cab565b600b54600554610700916001600160a01b039182169116308463ffffffff611fc216565b600c54610713908263ffffffff61202016565b600c55600b546040516001600160a01b03909116907f96b26cc2049ba13f553ba1c167ee7ed7ca6cf65683d12d4f3c3b16ef242dd3ef90610755908490612f47565b60405180910390a250565b600a602052816000526040600020818154811061077957fe5b60009182526020909120600390910201805460018201546002909201546001600160a01b03909116935090915083565b60005460ff16156107cc5760405162461bcd60e51b81526004016104f09061294b565b6000805460ff191660011790558082156108e9576107e86124a8565b50600083815260086020908152604091829020825160608101845281546001600160a01b0316815260018201549281019290925260020154918101919091526006546108465760405162461bcd60e51b81526004016104f090612da4565b80516001600160a01b0316331461086f5760405162461bcd60e51b81526004016104f090612a0f565b42600654826020015101106108965760405162461bcd60e51b81526004016104f090612a9e565b60008481526009602052604090205460ff16156108c55760405162461bcd60e51b81526004016104f090612c3f565b60008481526009602052604090819020805460ff1916600117905501519050610929565b600654156109095760405162461bcd60e51b81526004016104f090612a3f565b600081116109295760405162461bcd60e51b81526004016104f09061290a565b61093233612048565b600354610945908263ffffffff61202016565b60035533600090815260046020526040902054610968908263ffffffff61202016565b33600081815260046020526040902091909155600554610994916001600160a01b039091169083612068565b336001600160a01b03167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56884836040516109cf929190612f50565b60405180910390a250506000805460ff1916905550565b6001546001600160a01b03163314610a105760405162461bcd60e51b81526004016104f0906128e3565b600154600080546040516001600160a01b0393841693610100909204909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60096020526000908152604090205460ff1681565b60025490565b6002546000908210610ac45760405162461bcd60e51b81526004016104f090612d4c565b610acc6124d2565b60028381548110610ad957fe5b60009182526020918290206040805161012081018252600b90930290910180546001600160a01b039081168085526001830154958501959095526002820154928401929092526003810154909116606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260080154610100909101529150505b919050565b6001600160a01b031660009081526004602052604090205490565b6001546001600160a01b031681565b610b9b8361059e565b600580546001600160a01b0319166001600160a01b03939093169290921790915560065550565b6005546001600160a01b031681565b6002546000908210610bf55760405162461bcd60e51b81526004016104f090612d4c565b600060028381548110610c0457fe5b90600052602060002090600b0201905060008160050154905042826006015414610c3457610c3184612087565b90505b6001600160a01b0385166000908152600a83016020526040902054610c9c90610c90610c5f88610b68565b6001600160a01b0389166000908152600987016020526040902054610c8b90869063ffffffff61202016565b612179565b9063ffffffff6121a316565b95945050505050565b600254600090815b81811015610cf75760028181548110610cc257fe5b60009182526020909120600b90910201546001600160a01b0385811691161415610cef579150610b639050565b600101610cad565b5060405162461bcd60e51b81526004016104f090612eb6565b60005461010090046001600160a01b03163314610d3f5760405162461bcd60e51b81526004016104f090612d81565b6002548210610d605760405162461bcd60e51b81526004016104f090612d4c565b610d6b6000836121c8565b600060028381548110610d7a57fe5b90600052602060002090600b0201905080600201544210610dad5760405162461bcd60e51b81526004016104f090612f10565b610dec610ddb8260040154610dcf84600801544261202090919063ffffffff16565b9063ffffffff61225616565b60078301549063ffffffff6121a316565b600782015560048082018390554260088301556003820154604080516335d40bbd60e21b815290516000936001600160a01b039093169263d7502ef492808201926020929091829003018186803b158015610e4657600080fd5b505afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e9190612733565b90506000610e9942846002015461202090919063ffffffff16565b90506000610ec1610eb0838763ffffffff61225616565b60078601549063ffffffff6121a316565b905080831015610ee35760405162461bcd60e51b81526004016104f090612b05565b857fbcabeac7f89430597dc942c3264f28fd08010c3b2e19ecf95c6e690f9820b2a486604051610f139190612f47565b60405180910390a2505050505050565b60005461010090046001600160a01b03163314610f525760405162461bcd60e51b81526004016104f090612d81565b6001600160a01b038416610f785760405162461bcd60e51b81526004016104f090612e7f565b428211610f975760405162461bcd60e51b81526004016104f090612ce0565b818111610fb65760405162461bcd60e51b81526004016104f090612c08565b60025460005b818110156110155760028181548110610fd157fe5b60009182526020909120600b90910201546001600160a01b038781169116141561100d5760405162461bcd60e51b81526004016104f09061296e565b600101610fbc565b5060028054600181018255600091909152600b027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810180546001600160a01b0388166001600160a01b03199091161781557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82018590557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad682018590557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082018490557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad2909101859055604051869061110e90612530565b61111891906127a5565b604051809103906000f080158015611134573d6000803e3d6000fd5b506003820180546001600160a01b0319166001600160a01b039290921691909117905560006111736111668587612020565b879063ffffffff61225616565b6003830154909150611198906001600160a01b0389811691168363ffffffff61206816565b8160030160009054906101000a90046001600160a01b03166001600160a01b031663ca1896ab6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111ea57600080fd5b505af11580156111fe573d6000803e3d6000fd5b50505050827ff164ae823f4542cc5c8fce1671fabc0d21159bf75d4fc92d697be0f1e74885268860405161123291906127a5565b60405180910390a250505050505050565b60005460ff16156112665760405162461bcd60e51b81526004016104f09061294b565b6000805460ff19166001179055600b54336001600160a01b039091161461129f5760405162461bcd60e51b81526004016104f090612875565b600081116112bf5760405162461bcd60e51b81526004016104f09061290a565b600354600c546112d5908363ffffffff6121a316565b11156112f35760405162461bcd60e51b81526004016104f090612d15565b600c54611306908263ffffffff6121a316565b600c55600b5460055461132c916001600160a01b0391821691168363ffffffff61206816565b600b546040516001600160a01b03909116907fe5e349b2d36224b66518393de85be43e9544b96c31f5c8dcfff2ed08d4de61ea9061136b908490612f47565b60405180910390a2506000805460ff19169055565b60005461010090046001600160a01b031633146113af5760405162461bcd60e51b81526004016104f090612d81565b60025482106113d05760405162461bcd60e51b81526004016104f090612d4c565b6113db6000836121c8565b6000600283815481106113ea57fe5b90600052602060002090600b0201905060008160030160009054906101000a90046001600160a01b03166001600160a01b031663d7502ef46040518163ffffffff1660e01b815260040160206040518083038186803b15801561144c57600080fd5b505afa158015611460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114849190612733565b9050600061149f83600801548561202090919063ffffffff16565b905060006114bd610eb085600401548461225690919063ffffffff16565b9050808310156114df5760405162461bcd60e51b81526004016104f090612b05565b8442106114fe5760405162461bcd60e51b81526004016104f090612b3c565b836001015442116115215760405162461bcd60e51b81526004016104f090612bd8565b836002015442106115445760405162461bcd60e51b81526004016104f090612f10565b848460020181905550857f17d3c533548aa281cd4b573e7659f1b3269b772da8e4fc6425a0cf9e662c43e986604051610f139190612f47565b600254811061159e5760405162461bcd60e51b81526004016104f090612d4c565b6115a833826121c8565b6000600282815481106115b757fe5b60009182526020808320338452600a600b909302019182019052604090912054909150801561169d57336000818152600a8401602052604080822091909155600384015490516310b3879160e11b81526001600160a01b03909116916321670f2291611628919085906004016127b9565b600060405180830381600087803b15801561164257600080fd5b505af1158015611656573d6000803e3d6000fd5b50505050336001600160a01b0316837f3ed1528b0fdc7c5207c1bf935e34a667e13656b9ed165260c522be0bc544f303836040516116949190612f47565b60405180910390a35b505050565b60005460ff16156116c55760405162461bcd60e51b81526004016104f09061294b565b6000805460ff19166001179055806116ef5760405162461bcd60e51b81526004016104f090612cab565b6116f833612048565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a08231906117299030906004016127a5565b60206040518083038186803b15801561174157600080fd5b505afa158015611755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117799190612733565b60055490915061179a906001600160a01b031633308563ffffffff611fc216565b6005546040516370a0823160e01b815260009161182d9184916001600160a01b0316906370a08231906117d19030906004016127a5565b60206040518083038186803b1580156117e957600080fd5b505afa1580156117fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118219190612733565b9063ffffffff61202016565b600354909150611843908263ffffffff6121a316565b60035533600090815260046020526040902054611866908263ffffffff6121a316565b336000908152600460205260409020556006541561197f576118866124a8565b5060408051606081018252338082524260208084019182528385018681526000848152600a8352958620805460018082018355828952938820875160039092020180546001600160a01b0319166001600160a01b03909216919091178155935192840192909255516002909201919091559252815490919061190b908290819061253d565b5060075461192090600163ffffffff6121a316565b60078181556000918252600960209081526040808420805460ff19169055915483526008815291819020845181546001600160a01b0319166001600160a01b039091161781559184015160018301559290920151600290920191909155505b336001600160a01b03167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15600754836040516109cf929190612f50565b600254600090815b81811015610cf757600281815481106119d957fe5b60009182526020909120600b90910201546001600160a01b0385811691161415611b8057600060028281548110611a0c57fe5b60009182526020918290206003600b909202010154604080516335d40bbd60e21b815290516001600160a01b039092169263d7502ef492600480840193829003018186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a959190612733565b90506000611ae860028481548110611aa957fe5b90600052602060002090600b02016008015460028581548110611ac857fe5b90600052602060002090600b02016002015461202090919063ffffffff16565b90506000611b4d611b2060028681548110611aff57fe5b90600052602060002090600b0201600401548461225690919063ffffffff16565b60028681548110611b2d57fe5b90600052602060002090600b0201600701546121a390919063ffffffff16565b9050808310611b6457600095505050505050610b63565b611b74818463ffffffff61202016565b95505050505050610b63565b6001016119c4565b60005461010090046001600160a01b03163314611bb75760405162461bcd60e51b81526004016104f090612d81565b6001600160a01b038116611bdd5760405162461bcd60e51b81526004016104f0906129d8565b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60075481565b60005461010090046001600160a01b03163314611c785760405162461bcd60e51b81526004016104f090612d81565b6002548210611c995760405162461bcd60e51b81526004016104f090612d4c565b600060028381548110611ca857fe5b90600052602060002090600b0201905080600201544211611cdb5760405162461bcd60e51b81526004016104f090612c76565b6000611cf88260080154836002015461202090919063ffffffff16565b90506000611d27611d1684600401548461225690919063ffffffff16565b60078501549063ffffffff6121a316565b905060008360030160009054906101000a90046001600160a01b03166001600160a01b031663d7502ef46040518163ffffffff1660e01b815260040160206040518083038186803b158015611d7b57600080fd5b505afa158015611d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db39190612733565b9050611dc5818363ffffffff61202016565b851115611de45760405162461bcd60e51b81526004016104f090612dfe565b6003840154604051633550d7eb60e11b81526001600160a01b0390911690636aa1afd690611e1890339089906004016127b9565b600060405180830381600087803b158015611e3257600080fd5b505af1158015611e46573d6000803e3d6000fd5b505050507f6b769350ff403947f8ca4f54b35b9747d58b4b2676c957c460c1d5e4ba64342e3387604051611e7b9291906127b9565b60405180910390a1505050505050565b600254600090815b81811015610cf75760028181548110611ea857fe5b60009182526020909120600b90910201546001600160a01b0385811691161415611f005760028181548110611ed957fe5b600091825260209091206003600b9092020101546001600160a01b03169250610b63915050565b600101611e93565b6008602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b60005461010090046001600160a01b03163314611f625760405162461bcd60e51b81526004016104f090612d81565b600080546040516001600160a01b038085169361010090930416917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b61201a846323b872dd60e01b858585604051602401611fe3939291906127d2565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612290565b50505050565b6000828211156120425760405162461bcd60e51b81526004016104f090612b73565b50900390565b60025460005b8181101561169d5761206083826121c8565b60010161204e565b61169d8363a9059cbb60e01b8484604051602401611fe39291906127b9565b60006120916124d2565b6002838154811061209e57fe5b60009182526020918290206040805161012081018252600b90930290910180546001600160a01b0390811684526001820154948401949094526002810154918301919091526003810154909216606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e0820152600890910154610100820152905061212e610617565b61213d5760a001519050610b63565b6121726121616121548360800151610dcf87612347565b61215c610617565b612454565b60a08301519063ffffffff6121a316565b9392505050565b6000670de0b6b3a7640000612194848463ffffffff61225616565b8161219b57fe5b049392505050565b6000828201838110156104b85760405162461bcd60e51b81526004016104f090612ddb565b6000600282815481106121d757fe5b90600052602060002090600b0201905042816006015414612207576121fb82612087565b60058201554260068201555b6001600160a01b0383161561169d576122208383610bd1565b6001600160a01b0384166000908152600a8301602090815260408083209390935560058401546009850190915291902055505050565b600082612265575060006104bb565b8282028284828161227257fe5b04146104b85760405162461bcd60e51b81526004016104f090612eed565b60006060836001600160a01b0316836040516122ac919061276c565b6000604051808303816000865af19150503d80600081146122e9576040519150601f19603f3d011682016040523d82523d6000602084013e6122ee565b606091505b5091509150816123105760405162461bcd60e51b81526004016104f0906129a3565b80511561201a578080602001905181019061232b91906126fb565b61201a5760405162461bcd60e51b81526004016104f090612e35565b60006123516124d2565b6002838154811061235e57fe5b60009182526020918290206040805161012081018252600b90930290910180546001600160a01b03908116845260018201549484018590526002820154928401929092526003810154909116606083015260048101546080830152600581015460a0830152600681015460c0830152600781015460e08301526008015461010082015291504210806123f7575080604001518160c00151115b15612406576000915050610b63565b600081602001518260c0015110612421578160c00151612427565b81602001515b905060004283604001511061243c5742612442565b82604001515b9050610c9c818363ffffffff61202016565b60006104b88261247285670de0b6b3a764000063ffffffff61225616565b9063ffffffff61247e16565b600080821161249f5760405162461bcd60e51b81526004016104f090612a76565b81838161219b57fe5b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b60405180610120016040528060006001600160a01b03168152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b61080880612f7783390190565b8280548282559060005260206000209060030281019282156125af5760005260206000209160030282015b828111156125af57825482546001600160a01b0319166001600160a01b03909116178255600180840154908301556002808401549083015560039283019290910190612568565b506125bb9291506125bf565b5090565b61061b91905b808211156125bb5780546001600160a01b031916815560006001820181905560028201556003016125c5565b80356001600160a01b03811681146104bb57600080fd5b600060208284031215612619578081fd5b6104b883836125f1565b60008060408385031215612635578081fd5b61263f84846125f1565b915061264e84602085016125f1565b90509250929050565b60008060006060848603121561266b578081fd5b833561267681612f5e565b9250602084013561268681612f5e565b929592945050506040919091013590565b600080604083850312156126a9578182fd5b6126b384846125f1565b946020939093013593505050565b600080600080608085870312156126d6578081fd5b84356126e181612f5e565b966020860135965060408601359560600135945092505050565b60006020828403121561270c578081fd5b815180151581146104b8578182fd5b60006020828403121561272c578081fd5b5035919050565b600060208284031215612744578081fd5b5051919050565b6000806040838503121561275d578182fd5b50508035926020909101359150565b60008251815b8181101561278c5760208186018101518583015201612772565b8181111561279a5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03998a16815260208101989098526040880196909652939096166060860152608085019190915260a084015260c083019390935260e08201929092526101008101919091526101200190565b901515815260200190565b6020808252601a908201527f576f726c6465734d696e653a20494e56414c49445f524f424f54000000000000604082015260600190565b6020808252601f908201527f576f726c6465734d696e653a2053414d455f524f424f545f4144445245535300604082015260600190565b6020808252600d908201526c494e56414c49445f434c41494d60981b604082015260600190565b60208082526021908201527f576f726c6465734d696e653a2043414e4e4f545f57495448445241575f5a45526040820152604f60f81b606082015260800190565b60208082526009908201526814915153951490539560ba1b604082015260600190565b6020808252818101527f576f726c6465734d696e653a20544f4b454e5f414c52454144595f4144444544604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b60208082526019908201527f576f726c6465734d696e653a205a45524f5f4144445245535300000000000000604082015260600190565b6020808252601690820152752bb7b9363232b9a6b4b7329d102727afa9aa20a5a2a960511b604082015260600190565b6020808252601c908201527f576f726c6465734d696e653a205f4c4f434b5f4455524154494f4e5f00000000604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b60208082526021908201527f576f726c6465734d696e653a204c4f434b5f54494d455f4e4f545f50415353456040820152601160fa1b606082015260800190565b6020808252600c908201526b17d25392551250531256915160a21b604082015260600190565b6020808252601e908201527f576f726c6465734d696e653a205245574152445f4e4f545f454e4f5547480000604082015260600190565b6020808252601e908201527f576f726c6465734d696e653a20454e445f424c4f434b5f494e56414c49440000604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526022908201527f576f726c6465734d696e653a20494e56414c49445f524f424f545f4144445245604082015261535360f01b606082015260800190565b60208082526016908201527515dbdc9b19195cd35a5b994e881393d517d4d510549560521b604082015260600190565b6020808252601d908201527f576f726c6465734d696e653a204455524154494f4e5f494e56414c4944000000604082015260600190565b6020808252601e908201527f576f726c6465734d696e653a20414c52454144595f57495448445241574e0000604082015260600190565b6020808252818101527f576f726c6465734d696e653a204d494e494e475f4e4f545f46494e4953484544604082015260600190565b6020808252818101527f576f726c6465734d696e653a2043414e4e4f545f4445504f5349545f5a45524f604082015260600190565b6020808252818101527f576f726c6465734d696e653a2053544152545f424c4f434b5f494e56414c4944604082015260600190565b6020808252601b908201527f576f726c6465734d696e653a204558434545445f42414c414e43450000000000604082015260600190565b6020808252818101527f576f726c6465734d696e653a205245574152445f49445f4e4f545f464f554e44604082015260600190565b6020808252600990820152682727aa2fa7aba722a960b91b604082015260600190565b6020808252601d908201527f576f726c6465734d696e653a204e4f5f4c4f434b5f4455524154494f4e000000604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b60208082526017908201527f576f726c6465734d696e653a204e4f545f454e4f554748000000000000000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601a908201527f576f726c6465734d696e653a20544f4b454e5f494e56414c4944000000000000604082015260600190565b6020808252601c908201527f576f726c6465734d696e653a20544f4b454e5f4e4f545f464f554e4400000000604082015260600190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b6020808252601a908201527f576f726c6465734d696e653a20414c52454144595f434c4f5345000000000000604082015260600190565b90815260200190565b918252602082015260400190565b6001600160a01b0381168114612f7357600080fd5b5056fe608060405234801561001057600080fd5b506040516108083803806108088339818101604052602081101561003357600080fd5b5051600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600480546001600160a01b0319166001600160a01b039290921691909117905561075b806100ad6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806375c5ea111161006657806375c5ea11146101175780638456db151461011f578063ca1896ab14610127578063d7502ef41461012f578063f2fde38b146101375761009e565b806316048bc4146100a357806321670f22146100c75780634e71e0c8146100f5578063586235b4146100fd5780636aa1afd6146100c7575b600080fd5b6100ab61015d565b604080516001600160a01b039092168252519081900360200190f35b6100f3600480360360408110156100dd57600080fd5b506001600160a01b03813516906020013561016c565b005b6100f3610238565b6101056102eb565b60408051918252519081900360200190f35b6100ab6102f1565b6100ab610300565b6100f361030f565b610105610407565b6100f36004803603602081101561014d57600080fd5b50356001600160a01b031661040d565b6000546001600160a01b031681565b6000546001600160a01b031633146101b7576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b806002541015610201576040805162461bcd60e51b815260206004820152601060248201526f0ac82aa98a8be9c9ea8be8a9c9eaa8e960831b604482015290519081900360640190fd5b600254610214908263ffffffff6104b316565b600255600454610234906001600160a01b0316838363ffffffff6104fc16565b5050565b6001546001600160a01b03163314610287576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f434c41494d60981b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60025481565b6004546001600160a01b031681565b6001546001600160a01b031681565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b15801561035e57600080fd5b505afa158015610372573d6000803e3d6000fd5b505050506040513d602081101561038857600080fd5b50516002549091506000906103a490839063ffffffff6104b316565b6003549091506103ba908263ffffffff61055316565b600381905560028390556040805191825260208201839052818101849052517fed9a567f42e0ef8986598c5257db7be662f4eaae3892286b03c5ba3a1ddf399b9181900360600190a15050565b60035481565b6000546001600160a01b03163314610458576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156104f6576040805162461bcd60e51b815260206004820152600960248201526829aaa12fa2a92927a960b91b604482015290519081900360640190fd5b50900390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261054e9084906105a0565b505050565b600082820183811015610599576040805162461bcd60e51b815260206004820152600960248201526820a2222fa2a92927a960b91b604482015290519081900360640190fd5b9392505050565b60006060836001600160a01b0316836040518082805190602001908083835b602083106105de5780518252601f1990920191602091820191016105bf565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610640576040519150601f19603f3d011682016040523d82523d6000602084013e610645565b606091505b50915091508161069c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156106f5578080602001905160208110156106b857600080fd5b50516106f55760405162461bcd60e51b815260040180806020018281038252602a8152602001806106fc602a913960400191505060405180910390fd5b5050505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212201e2768869b5fae79b7c9d191818f984b7eacbfe274790bf65f24e196969c6b7264736f6c63430006090033a264697066735822122084f439011c8be1b3cb7c97d6004bf9fa86fff653523106c39ac63ddae5d88b1a64736f6c63430006090033