UNPKG

@gooddollar/goodprotocol

Version:
1,411 lines 100 kB
{ "_format": "hh-sol-artifact-1", "contractName": "GoodDollarStakingMock", "sourceName": "contracts/mocks/GoodDollarStakingMock.sol", "abi": [ { "inputs": [ { "internalType": "contract INameService", "name": "_ns", "type": "address" }, { "internalType": "uint128", "name": "_interestRatePerBlock", "type": "uint128" }, { "internalType": "uint128", "name": "_numberOfBlocksPerYear", "type": "uint128" }, { "internalType": "uint32", "name": "_daysUntilUpgrade", "type": "uint32" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint128", "name": "newAPY", "type": "uint128" } ], "name": "APYSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMonthlyRewards", "type": "uint256" } ], "name": "GOODRewardsSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "staker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ReputationEarned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "staker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "gdRewards", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "actualRewardsSent", "type": "uint256" } ], "name": "RewardsNotSent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "staker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sharesRedeemed", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "goodRewards", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "gdRewards", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newShares", "type": "uint256" } ], "name": "StakeUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "staker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "actualSharesRedeemed", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sharesRequested", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "goodRewards", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "gdRewards", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "actualRewardsSent", "type": "uint256" } ], "name": "StakeWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "staker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Staked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "PRECISION", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SHARE_DECIMALS", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SHARE_PRECISION", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "amountToShares", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "avatar", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "contractToUsers", "outputs": [ { "internalType": "uint128", "name": "amount", "type": "uint128" }, { "internalType": "uint128", "name": "rewardDebt", "type": "uint128" }, { "internalType": "uint128", "name": "rewardEarn", "type": "uint128" }, { "internalType": "uint128", "name": "rewardMinted", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "createdAt", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dao", "outputs": [ { "internalType": "contract Controller", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "daysUntilUpgrade", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "earned", "outputs": [ { "internalType": "uint256", "name": "earnedRewards", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getChainBlocksPerMonth", "outputs": [ { "internalType": "uint256", "name": "blocksPerMonth", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_contract", "type": "address" }, { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getProductivity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRewardsDebt", "outputs": [ { "internalType": "uint256", "name": "debt", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRewardsPerBlock", "outputs": [ { "internalType": "uint256", "name": "_goodRewardPerBlock", "type": "uint256" }, { "internalType": "uint256", "name": "_gdInterestRatePerBlock", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "getSavings", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getStaked", "outputs": [ { "internalType": "uint256", "name": "userStake", "type": "uint256" }, { "internalType": "uint256", "name": "totalStaked", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_contract", "type": "address" }, { "internalType": "uint256", "name": "_blockStart", "type": "uint256" }, { "internalType": "uint256", "name": "_blockEnd", "type": "uint256" }, { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getUserPendingReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getUserPendingReward", "outputs": [ { "internalType": "uint256", "name": "goodReward", "type": "uint256" }, { "internalType": "uint256", "name": "gdReward", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "goodStakerInfo", "outputs": [ { "components": [ { "internalType": "uint128", "name": "amount", "type": "uint128" }, { "internalType": "uint128", "name": "rewardDebt", "type": "uint128" }, { "internalType": "uint128", "name": "rewardEarn", "type": "uint128" }, { "internalType": "uint128", "name": "rewardMinted", "type": "uint128" } ], "internalType": "struct MultiBaseGovernanceShareField.UserInfo", "name": "userInfo", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "interestRatePerBlockX64", "outputs": [ { "internalType": "int128", "name": "", "type": "int128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "lastRewardBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "lastSharePrice", "outputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nameService", "outputs": [ { "internalType": "contract INameService", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nativeToken", "outputs": [ { "internalType": "contract IGoodDollar", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numberOfBlocksPerYear", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onTokenTransfer", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_paused", "type": "bool" }, { "internalType": "uint128", "name": "_interestRatePerBlock", "type": "uint128" } ], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "principle", "outputs": [ { "internalType": "uint256", "name": "deposited", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewardsMintedSoFar", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewardsPerBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "_blocksPerYear", "type": "uint128" } ], "name": "setBlockPerYear", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "_interestRatePerBlock", "type": "uint128" } ], "name": "setGdApy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_monthlyAmount", "type": "uint256" } ], "name": "setMonthlyGOODRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sharePrice", "outputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "sharesOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sharesSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "stakersInfo", "outputs": [ { "internalType": "uint128", "name": "lastSharePrice", "type": "uint128" }, { "internalType": "uint128", "name": "rewardsPaid", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stats", "outputs": [ { "internalType": "uint128", "name": "lastUpdateBlock", "type": "uint128" }, { "internalType": "uint128", "name": "totalStaked", "type": "uint128" }, { "internalType": "uint128", "name": "totalRewardsPaid", "type": "uint128" }, { "internalType": "uint256", "name": "savings", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "contract ERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "totalRewardsAccumulated", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_contract", "type": "address" } ], "name": "totalRewardsPerShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalRewardsPerShare", "outputs": [ { "internalType": "uint256", "name": "_goodRewardPerShare", "type": "uint256" }, { "internalType": "uint256", "name": "_gdRewardPerShare", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateAvatar", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "upgrade", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "staker", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "upgradeFrom", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newStaking", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawRewards", "outputs": [ { "internalType": "uint256", "name": "goodRewards", "type": "uint256" }, { "internalType": "uint256", "name": "gdRewards", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "name": "withdrawStake", "outputs": [ { "internalType": "uint256", "name": "goodRewards", "type": "uint256" }, { "internalType": "uint256", "name": "gdRewards", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b5060405162004a8438038062004a84833981016040819052620000349162000928565b838383836040518060400160405280600a815260200169472420536176696e677360b01b815250604051806040016040528060048152602001631cdd91c960e21b815250816003908162000089919062000a36565b50600462000098828262000a36565b50506001607355506074805460ff19169055603c63ffffffff82161115620001065760405162461bcd60e51b815260206004820152601c60248201527f6d61782074776f206d6f6e74687320756e74696c207570677261646500000000604482015260640160405180910390fd5b620001118362000236565b6200011c8462000280565b607b80546001600160801b0319166001600160801b03841617905560408054905163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156200019b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c1919062000b02565b607a80546001600160a01b03929092166001600160a01b0319909216919091179055306000908152600a6020526040812055607b80546001600160801b03428116600160801b029116179055607c805463ffffffff90921663ffffffff199092169190911790555062000b7095505050505050565b62000240620002a8565b6200025d6001600160801b038216670de0b6b3a7640000620002d2565b607980546001600160801b0319166001600160801b039290921691909117905550565b604080546001600160a01b0319166001600160a01b038316179055620002a562000319565b50565b620002b262000446565b607755607580546001600160801b031916436001600160801b0316179055565b600081600003620002e257600080fd5b6000620002f08484620004ba565b905060016001607f1b036001600160801b03821611156200031057600080fd5b90505b92915050565b60408054905163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000b02565b603e80546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015620003fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000424919062000b02565b603f80546001600160a01b0319166001600160a01b0392909216919091179055565b60775460009015806200046357506075546001600160801b031643145b1562000470575060775490565b6075546000906200049d9062000490906001600160801b03164362000b22565b607954600f0b9062000638565b607754909150620004b490600f83900b9062000885565b91505090565b600081600003620004ca57600080fd5b60006001600160c01b038411620004fa5782604085901b81620004f157620004f162000b44565b04905062000623565b60c084811c640100000000811062000514576020918201911c5b62010000811062000527576010918201911c5b610100811062000539576008918201911c5b601081106200054a576004918201911c5b600481106200055b576002918201911c5b600281106200056b576001820191505b60bf820360018603901c6001018260ff0387901b816200058f576200058f62000b44565b0492506001600160801b03831115620005a757600080fd5b608085901c83026001600160801b038616840260c088901c604089901b82811015620005d4576001820391505b608084901b92900382811015620005ec576001820391505b829003608084901c821462000605576200060562000b5a565b88818162000617576200061762000b44565b04870196505050505050505b6001600160801b038111156200031057600080fd5b600080600084600f0b128015620006525750826001166001145b905060008085600f0b126200066857846200066d565b846000035b6001600160801b03169050600160801b6801000000000000000082116200070f57603f82901b91505b841562000706576001851615620006ad578102607f1c5b908002607f1c906002851615620006c4578102607f1c5b908002607f1c906004851615620006db578102607f1c5b908002607f1c906008851615620006f2578102607f1c5b60049490941c93908002607f1c9062000696565b60401c6200083b565b603f6c01000000000000000000000000831015620007335760209290921b91601f19015b600160701b8310156200074c5760109290921b91600f19015b600160781b831015620007655760089290921b91600719015b6001607c1b8310156200077e5760049290921b91600319015b6001607e1b831015620007975760029290921b91600119015b6001607f1b831015620007b05760019290921b91600019015b60005b8615620008235760408210620007c857600080fd5b6001871615620007f057918302607f1c918101600160801b831115620007f057600192831c92015b928002607f1c9260019190911b90600160801b84106200081657600193841c9391909101905b600187901c9650620007b3565b604081106200083157600080fd5b6040039190911c90505b6000836200084a57816200084f565b816000035b905060016001607f1b0319811280159062000871575060016001607f1b038113155b6200087b57600080fd5b9695505050505050565b600081600003620008995750600062000313565b600083600f0b1215620008ab57600080fd5b600f83900b6001600160801b038316810260401c90608084901c026001600160c01b03811115620008db57600080fd5b60401b8119811115620008ed57600080fd5b019392505050565b6001600160a01b0381168114620002a557600080fd5b80516001600160801b03811681146200092357600080fd5b919050565b600080600080608085870312156200093f57600080fd5b84516200094c81620008f5565b93506200095c602086016200090b565b92506200096c604086016200090b565b9150606085015163ffffffff811681146200098657600080fd5b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620009bc57607f821691505b602082108103620009dd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a3157600081815260208120601f850160051c8101602086101562000a0c5750805b601f850160051c820191505b8181101562000a2d5782815560010162000a18565b5050505b505050565b81516001600160401b0381111562000a525762000a5262000991565b62000a6a8162000a638454620009a7565b84620009e3565b602080601f83116001811462000aa2576000841562000a895750858301515b600019600386901b1c1916600185901b17855562000a2d565b600085815260208120601f198616915b8281101562000ad35788860151825594840194600190910190840162000ab2565b508582101562000af25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000b1557600080fd5b81516200031081620008f5565b818103818111156200031357634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b613f048062000b806000396000f3fe608060405234801561001057600080fd5b50600436106102be5760003560e01c80628cc262146102c357806306fdde03146102e9578063095ea7b3146102fe5780630c1cd7f31461032157806318160ddd1461033e5780631b3c90a81461034657806320f902ae14610350578063213b329e1461037557806322022a291461037d57806322dec37b1461038557806323b872dd146103a557806325d5971f146103b85780632e42a896146103cb578063313ce5671461045057806331903da11461045f5780633659cfe61461047f57806336de95f61461049257806339509351146104a5578063399080ec146104b85780633d9a12cc146104cb5780633e6326fc146104de5780634162169f146104fe57806347b3e7e8146105115780634f1db7f614610531578063576ce9fd146105445780635aef7de6146105575780635c975abb1461056a5780635fc5e020146105755780636eb629841461059157806370a08231146105a4578063753e88e5146105b7578063777d6641146105ca5780637bcbb9ff146105ea578063846141b3146105fd578063872697291461061d57806395d89b4114610625578063a457c2d71461062d578063a4c0ed3614610640578063a694fc3a14610653578063a9059cbb14610666578063aa32582114610679578063aaf5eb6814610575578063aba78c161461068c578063b20b9979146106e0578063b811540e146106f3578063b86543ba14610706578063bf8e9b6e14610719578063c671062914610721578063c7b8981c14610734578063ceb8b01c1461073c578063cf09e0d014610744578063d55ec6971461075e578063d80528ae14610766578063d853365f146107c5578063dd62ed3e146107ce578063e087788e146107e1578063e1758bd8146107f4578063ebe91644146107fc578063f5eb42dc146108dd578063fc0c546a146108f0578063fea6f4f514610903575b600080fd5b6102d66102d1366004613973565b610916565b6040519081526020015b60405180910390f35b6102f1610988565b6040516102e091906139d6565b61031161030c3660046139e9565b610a1a565b60405190151581526020016102e0565b610329610a34565b604080519283526020830191909152016102e0565b6002546102d6565b61034e610a65565b005b607c546103609063ffffffff1681565b60405163ffffffff90911681526020016102e0565b6102d6610b8c565b6102d6610bb5565b6102d6610393366004613973565b60076020526000908152604090205481565b6103116103b3366004613a15565b610bc5565b6103296103c6366004613a56565b610be9565b61041d6103d9366004613a6f565b600b602090815260009283526040808420909152908252902080546001909101546001600160801b0380831692600160801b90819004821692808316929190041684565b604080516001600160801b03958616815293851660208501529184169183019190915290911660608201526080016102e0565b604051601281526020016102e0565b6102d661046d366004613973565b60086020526000908152604090205481565b61034e61048d366004613973565b610ca5565b6102d66104a0366004613973565b610eec565b6103116104b33660046139e9565b610f1d565b6103296104c6366004613973565b610f3f565b6102d66104d9366004613aa8565b610f55565b6040546104f1906001600160a01b031681565b6040516102e09190613af2565b603e546104f1906001600160a01b031681565b6102d661051f366004613973565b600a6020526000908152604090205481565b61032961053f366004613a6f565b611049565b6102d6610552366004613973565b61108c565b603f546104f1906001600160a01b031681565b60745460ff16610311565b610584670de0b6b3a764000081565b6040516102e09190613b06565b61034e61059f366004613a56565b6110b0565b6102d66105b2366004613973565b6110f9565b6102d66105c53660046139e9565b611114565b6079546105d790600f0b81565b604051600f9190910b81526020016102e0565b6102d66105f8366004613973565b61127d565b6102d661060b366004613973565b60096020526000908152604090205481565b6102d6611298565b6102f16112f7565b61031161063b3660046139e9565b611306565b61031161064e366004613b1a565b611381565b61034e610661366004613a56565b6113dc565b6103116106743660046139e9565b6114d0565b6102d6610687366004613973565b6114de565b6106c061069a366004613973565b6078602052600090815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016102e0565b61034e6106ee366004613bb9565b6114fa565b6102d6610701366004613a56565b611570565b607b54610584906001600160801b031681565b6103296115ae565b61032961072f366004613973565b611649565b61032961166b565b6102d6611690565b607b5461058490600160801b90046001600160801b031681565b61034e6116d4565b607554607654607754610790926001600160801b0380821693600160801b90920481169291169084565b6040516102e094939291906001600160801b039485168152928416602084015292166040820152606081019190915260800190565b61058461271081565b6102d66107dc366004613a6f565b6116ea565b61034e6107ef366004613bb9565b611715565b6104f161173f565b61089a61080a366004613973565b60408051608081018252600080825260208201819052918101829052606081019190915250306000908152600b602090815260408083206001600160a01b0394909416835292815290829020825160808101845281546001600160801b038082168352600160801b9182900481169483019490945260019092015480841694820194909452920416606082015290565b6040516102e0919081516001600160801b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b6102d66108eb366004613973565b6117c7565b607a546104f1906001600160a01b031681565b61034e610911366004613be2565b6117d2565b600080610922836117c7565b9050600061092e611298565b9050600061093b8561108c565b905081811161094a578061094c565b815b9050670de0b6b3a76400006109618483613c2d565b61096b8585613c2d565b6109759190613c44565b61097f9190613c6d565b95945050505050565b60606003805461099790613c81565b80601f01602080910402602001604051908101604052809291908181526020018280546109c390613c81565b8015610a105780601f106109e557610100808354040283529160200191610a10565b820191906000526020600020905b8154815290600101906020018083116109f357829003601f168201915b5050505050905090565b600033610a2881858561180a565b60019150505b92915050565b306000908152600a6020526040812054607954909190610a5f90600f0b670de0b6b3a764000061192e565b90509091565b60408054905163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aec9190613cbb565b603e80546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a9190613cbb565b603f80546001600160a01b0319166001600160a01b0392909216919091179055565b607b54600090610ba790600c906001600160801b0316613cd8565b6001600160801b0316905090565b6000610bc060025490565b905090565b600033610bd3858285611999565b610bde858585611a13565b506001949350505050565b600080610bf4611b0b565b6000610bff336117c7565b9050600080610c0f333388611b64565b92975090955090925090506000610c25336117c7565b610c2f9085613c44565b9050337fb4445b5ca5d925c0bf5fb70a192f888574bff35d4da72ff1c5dae14df544310c82610c5e8587613cfe565b60408051928352602083019190915281018a9052606081018990526080810188905260a0810185905260c00160405180910390a250505050610ca06001607355565b915091565b610cad611b0b565b6000610cb8336117c7565b905060008111610ce35760405162461bcd60e51b8152600401610cda90613d11565b60405180910390fd5b603e54603f54604051639be2faed60e01b81526001600160a01b0385811660048301529182166024820152911690639be2faed90604401602060405180830381865afa158015610d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5b9190613d35565b610da25760405162461bcd60e51b81526020600482015260186024820152776e6f742044414f20617070726f766564207570677261646560401b6044820152606401610cda565b600080600080610db3338787611b64565b9350935093509350828214610e035760405162461bcd60e51b8152602060048201526016602482015275756e61626c6520746f206d696e74207265776172647360501b6044820152606401610cda565b60006001600160a01b03871663753e88e533610e1f8786613cfe565b6040518363ffffffff1660e01b8152600401610e3c929190613d52565b6020604051808303816000875af1158015610e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7f9190613d6b565b9050337f9812190ad3df6de1c4b9a4acfdb8a7d84070af20c1fffd053968b2f3c2260416610ead8585613cfe565b60408051918252602082018a90528101889052606081018790526080810184905260a00160405180910390a2505050505050610ee96001607355565b50565b6000670de0b6b3a7640000610f00836117c7565b610f098461108c565b610f139190613c2d565b610a2e9190613c6d565b600033610a28818585610f3083836116ea565b610f3a9190613cfe565b61180a565b600080610f4c3084611049565b91509150915091565b6001600160a01b038085166000818152600b602090815260408083209486168352938152838220845160808101865281546001600160801b038082168352600160801b9182900481168386015260019093015480841683890152049091166060820152928252600590529182205482901561103f576000610fd7888888611c80565b91505082604001516001600160801b0316915082602001516001600160801b0316676765c793fa10079d601b1b8285600001516001600160801b031661101d9190613c2d565b6110279190613c6d565b6110319190613c44565b61103b9083613cfe565b9150505b9695505050505050565b6001600160a01b039182166000818152600b60209081526040808320949095168252928352838120549181526005909252919020546001600160801b0390911691565b6001600160a01b03166000908152607860205260409020546001600160801b031690565b6110b8611d78565b6110c23082611e3b565b6040518181527f1bda1e84e6af3f7391d288a491b734032ae9ea89ad3ebbc213d352456ab51a2b906020015b60405180910390a150565b6001600160a01b031660009081526020819052604090205490565b604080518082018252601481527366726f6d3a2025732062616c616e63653a20257360601b6020820152607a5491516370a0823160e01b81526000926111bb929133916001600160a01b0316906370a0823190611175908490600401613af2565b602060405180830381865afa158015611192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b69190613d6b565b611e79565b60408054905163bf40fac160e01b81526001600160a01b039091169063bf40fac1906111e990600401613d84565b602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a9190613cbb565b6001600160a01b0316336001600160a01b031614610a2e5760405162461bcd60e51b815260206004820152601060248201526f6e6f74204744414f5f5354414b494e4760801b6044820152606401610cda565b6001600160a01b031660009081526006602052604090205490565b6000806112a3611ec5565b90506112ad610bb5565b156112ee57670de0b6b3a76400006112c3610bb5565b6112cd9190613c2d565b6112df670de0b6b3a764000083613c2d565b6112e99190613c6d565b6112f1565b60005b91505090565b60606004805461099790613c81565b6000338161131482866116ea565b9050838110156113745760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cda565b610bde828686840361180a565b607a546000906001600160a01b031633146113d25760405162461bcd60e51b81526020600482015260116024820152703ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610cda565b610bde8585611f2b565b607a546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190613d35565b6114c65760405162461bcd60e51b815260206004820152603a60248201527f7472616e7366657246726f6d206661696c65642c206d616b652073757265207960448201527937ba9030b8383937bb32b2103a37b5b2b7103a3930b739b332b960311b6064820152608401610cda565b610ee93382611f2b565b600033610a28818585611a13565b6000670de0b6b3a76400006114f2836117c7565b610f09611298565b611502611d78565b61150b81611fac565b607954607b54612ee0916115379161152f91600f0b906001600160801b0316611ff2565b61271061192e565b1061154157600080fd5b7f5e47ff33a7f14c29b3d9d622df796f19d1af1adf178ff7e266844cc8362457c0816040516110ee9190613b06565b6000610a2e61157d611298565b612710611592670de0b6b3a764000086613c2d565b61159c9190613c2d565b6115a69190613c6d565b61271061220b565b6000806115ba3061127d565b91506115c560025490565b1561164257670de0b6b3a76400006115dc60025490565b6115e69190613c2d565b607554670de0b6b3a76400009061160e908290600160801b90046001600160801b0316613daa565b6001600160801b031661161f611ec5565b6116299190613c44565b6116339190613c2d565b61163d9190613c6d565b610a5f565b5090600090565b6000806116593060004386610f55565b915061166483610916565b9050915091565b600080600061167c61070133610916565b905061168781610be9565b92509250509091565b6075546000906116b990670de0b6b3a764000090600160801b90046001600160801b0316613daa565b6001600160801b03166116ca611ec5565b610bc09190613c44565b6116e83066d3c21bcecceda160191b611e3b565b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61171d611d78565b607b80546001600160801b0319166001600160801b0392909216919091179055565b60408054905163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156117a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc09190613cbb565b6000610a2e826110f9565b6117da612235565b6117e2611d78565b81156117f5576117f061225d565b6117fd565b6117fd6122b1565b611806816114fa565b5050565b6001600160a01b03831661186c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cda565b6001600160a01b0382166118cd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cda565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008160000361194057506000610a2e565b600083600f0b121561195157600080fd5b600f83900b6001600160801b038316810260401c90608084901c026001600160c01b0381111561198057600080fd5b60401b811981111561199157600080fd5b019392505050565b60006119a584846116ea565b90506000198114611a0d5781811015611a005760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cda565b611a0d848484840361180a565b50505050565b611a213084836000436122ea565b50611a30308383600043612387565b506000611a3c836110f9565b9050611a488282613cfe565b6001600160a01b038516600090815260786020526040902054611a759084906001600160801b0316613c2d565b6001600160a01b038516600090815260786020526040902054611aa29084906001600160801b0316613c2d565b611aac9190613cfe565b611ab69190613c6d565b6001600160a01b038416600090815260786020526040902080546001600160801b0319166001600160801b0392909216919091179055611af5846123fa565b50611aff836123fa565b50611a0d8484846126b2565b600260735403611b5d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cda565b6002607355565b60008080808415611b9657611b798786612844565b93509050611b8b3088876000436122ea565b50611b968786612bd8565b611b9f876123fa565b93508215611bb557611bb2878785612cf8565b91505b8015611c7757607a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611bed9089908590600401613d52565b6020604051808303816000875af1158015611c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c309190613d35565b611c775760405162461bcd60e51b815260206004820152601860248201527