UNPKG

@gooddollar/goodprotocol

Version:
892 lines 63.8 kB
{ "_format": "hh-sol-artifact-1", "contractName": "GovernanceStaking", "sourceName": "contracts/governance/GovernanceStaking.sol", "abi": [ { "inputs": [ { "internalType": "contract INameService", "name": "_ns", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "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": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": "amount", "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": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "FUSE_MONTHLY_BLOCKS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "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": "dao", "outputs": [ { "internalType": "contract Controller", "name": "", "type": "address" } ], "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": [], "name": "getChainBlocksPerMonth", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getProductivity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "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": "getRewardsPerBlock", "outputs": [ { "internalType": "uint256", "name": "", "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": "", "type": "uint256" } ], "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": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "lastRewardBlock", "outputs": [ { "internalType": "uint256", "name": "", "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": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "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": "uint256", "name": "_monthlyAmount", "type": "uint256" } ], "name": "setMonthlyRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "", "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": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "users", "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": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdrawRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdrawStake", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60a0604052306080523480156200001557600080fd5b5060405162002f9238038062002f92833981016040819052620000389162000480565b600054610100900460ff1615808015620000595750600054600160ff909116105b80620000755750303b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b6200010d826200028b565b6101045460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa15801562000172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000198919062000480565b61016980546001600160a01b0319166001600160a01b0392909216919091179055604080518082018252601381527f4724205374616b696e6720466f7220474f4f4400000000000000000000000000602080830191909152825180840190935260038352621cd1c960ea1b908301526200021291620002b4565b6200022c6207e9006a01a784379d99db42000000620004a7565b306000908152606a6020526040902055801562000283576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505062000685565b61010480546001600160a01b0319166001600160a01b038316179055620002b1620002ee565b50565b600054610100900460ff16620002de5760405162461bcd60e51b8152600401620000d590620004ca565b620002ea82826200041e565b5050565b6101045460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa15801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000480565b61010280546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015620003d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fb919062000480565b61010380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16620004485760405162461bcd60e51b8152600401620000d590620004ca565b6036620004568382620005b9565b506037620004658282620005b9565b505050565b6001600160a01b0381168114620002b157600080fd5b6000602082840312156200049357600080fd5b8151620004a0816200046a565b9392505050565b600082620004c557634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200054057607f821691505b6020821081036200056157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200046557600081815260208120601f850160051c81016020861015620005905750805b601f850160051c820191505b81811015620005b1578281556001016200059c565b505050505050565b81516001600160401b03811115620005d557620005d562000515565b620005ed81620005e684546200052b565b8462000567565b602080601f8311600181146200062557600084156200060c5750858301515b600019600386901b1c1916600185901b178555620005b1565b600085815260208120601f198616915b82811015620006565788860151825594840194600190910190840162000635565b5085821015620006755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516128d5620006bd60003960008181610bee01528181610c2e01528181610e0c01528181610e4c0152610ec801526128d56000f3fe6080604052600436106101b55760003560e01c806306fdde03146101ba578063095ea7b3146101e55780630c1cd7f31461021557806318160ddd146102415780631b3c90a814610256578063213b329e1461026d57806322dec37b1461028357806323b872dd146102b057806325d5971f146102d057806328e964e9146102f05780632e42a89614610325578063313ce567146103b757806331903da1146103d35780633659cfe61461040057806339509351146104205780633d9a12cc146104405780633e6326fc146104605780634162169f1461049957806347b3e7e8146104ba5780634f1db7f6146104e75780634f1ef2861461050757806352d1902d1461051a5780635aef7de61461052f57806370a08231146105505780637bcbb9ff14610586578063846141b3146105a657806395d89b41146105d3578063a457c2d7146105e8578063a694fc3a14610608578063a87430ba14610628578063a9059cbb14610716578063b46aa52714610736578063bf8e9b6e1461074d578063c671062914610762578063c76279a214610782578063c7b8981c146107a2578063dd62ed3e146107b7578063e1758bd8146107d7575b600080fd5b3480156101c657600080fd5b506101cf6107ec565b6040516101dc91906123fa565b60405180910390f35b3480156101f157600080fd5b50610205610200366004612442565b61087e565b60405190151581526020016101dc565b34801561022157600080fd5b50306000908152606a60205260409020545b6040519081526020016101dc565b34801561024d57600080fd5b50603554610233565b34801561026257600080fd5b5061026b610898565b005b34801561027957600080fd5b506207e900610233565b34801561028f57600080fd5b5061023361029e36600461246e565b60676020526000908152604090205481565b3480156102bc57600080fd5b506102056102cb36600461248b565b6109c2565b3480156102dc57600080fd5b5061026b6102eb3660046124cc565b6109e8565b3480156102fc57600080fd5b5061031061030b36600461246e565b610bce565b604080519283526020830191909152016101dc565b34801561033157600080fd5b506103846103403660046124e5565b606b602090815260009283526040808420909152908252902080546001909101546001600160801b0380831692600160801b90819004821692808316929190041684565b604080516001600160801b03958616815293851660208501529184169183019190915290911660608201526080016101dc565b3480156103c357600080fd5b50604051600281526020016101dc565b3480156103df57600080fd5b506102336103ee36600461246e565b60686020526000908152604090205481565b34801561040c57600080fd5b5061026b61041b36600461246e565b610be4565b34801561042c57600080fd5b5061020561043b366004612442565b610ca9565b34801561044c57600080fd5b5061023361045b36600461251e565b610ccb565b34801561046c57600080fd5b5061010454610481906001600160a01b031681565b6040516001600160a01b0390911681526020016101dc565b3480156104a557600080fd5b5061010254610481906001600160a01b031681565b3480156104c657600080fd5b506102336104d536600461246e565b606a6020526000908152604090205481565b3480156104f357600080fd5b506103106105023660046124e5565b610dbf565b61026b61051536600461257e565b610e02565b34801561052657600080fd5b50610233610ebb565b34801561053b57600080fd5b5061010354610481906001600160a01b031681565b34801561055c57600080fd5b5061023361056b36600461246e565b6001600160a01b031660009081526033602052604090205490565b34801561059257600080fd5b506102336105a136600461246e565b610f6a565b3480156105b257600080fd5b506102336105c136600461246e565b60696020526000908152604090205481565b3480156105df57600080fd5b506101cf610f85565b3480156105f457600080fd5b50610205610603366004612442565b610f94565b34801561061457600080fd5b5061026b6106233660046124cc565b61101a565b34801561063457600080fd5b506106d361064336600461246e565b60408051608081018252600080825260208201819052918101829052606081019190915250306000908152606b602090815260408083206001600160a01b0394909416835292815290829020825160808101845281546001600160801b038082168352600160801b9182900481169483019490945260019092015480841694820194909452920416606082015290565b6040516101dc919081516001600160801b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b34801561072257600080fd5b50610205610731366004612442565b6111d0565b34801561074257600080fd5b506102336207e90081565b34801561075957600080fd5b506102336111de565b34801561076e57600080fd5b5061023361077d36600461246e565b6111ee565b34801561078e57600080fd5b5061026b61079d3660046124cc565b6111fd565b3480156107ae57600080fd5b5061023361120f565b3480156107c357600080fd5b506102336107d23660046124e5565b61122f565b3480156107e357600080fd5b5061048161125a565b6060603680546107fb90612641565b80601f016020809104026020016040519081016040528092919081815260200182805461082790612641565b80156108745780601f1061084957610100808354040283529160200191610874565b820191906000526020600020905b81548152906001019060200180831161085757829003601f168201915b5050505050905090565b60003361088c8185856112e3565b60019150505b92915050565b6101045460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610920919061267b565b61010280546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa15801561097b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099f919061267b565b61010380546001600160a01b0319166001600160a01b0392909216919091179055565b6000336109d0858285611407565b6109db858585611481565b60019150505b9392505050565b6109f06114c3565b60006109fc3033610dbf565b50905081600003610a0b578091505b60008211610a605760405162461bcd60e51b815260206004820152601f60248201527f53686f756c6420776974686472617720706f73697469766520616d6f756e740060448201526064015b60405180910390fd5b81811015610aaa5760405162461bcd60e51b8152602060048201526017602482015276139bdd08195b9bdd59da081d1bdad95b881cdd185ad959604a1b6044820152606401610a57565b81610ab5338461151e565b610ac3303385600043611640565b50610acd336116dd565b50610169546001600160a01b031663a9059cbb33836040518363ffffffff1660e01b8152600401610aff929190612698565b6020604051808303816000875af1158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4291906126b1565b610b895760405162461bcd60e51b81526020600482015260186024820152771dda5d1a191c985dc81d1c985b9cd9995c8819985a5b195960421b6044820152606401610a57565b60405183815233907f1248d48e2de900a1010c7fce73506969ecec243600bfc08b641b158f26d857cd9060200160405180910390a25050610bcb600161013755565b50565b600080610bdb3084610dbf565b91509150915091565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c2c5760405162461bcd60e51b8152600401610a57906126d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c5e611829565b6001600160a01b031614610c845760405162461bcd60e51b8152600401610a579061270d565b610c8d81611845565b60408051600080825260208201909252610bcb9183919061184d565b60003361088c818585610cbc838361122f565b610cc6919061275d565b6112e3565b6001600160a01b038085166000818152606b602090815260408083209486168352938152838220845160808101865281546001600160801b038082168352600160801b91829004811683860152600190930154808416838901520490911660608201529282526065905291822054829015610db5576000610d4d8888886119b8565b91505082604001516001600160801b0316915082602001516001600160801b0316676765c793fa10079d601b1b8285600001516001600160801b0316610d939190612770565b610d9d9190612787565b610da791906127a9565b610db1908361275d565b9150505b9695505050505050565b6001600160a01b039182166000818152606b60209081526040808320949095168252928352838120549181526065909252919020546001600160801b0390911691565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e4a5760405162461bcd60e51b8152600401610a57906126d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e7c611829565b6001600160a01b031614610ea25760405162461bcd60e51b8152600401610a579061270d565b610eab82611845565b610eb78282600161184d565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f565760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610a57565b506000805160206128398339815191525b90565b6001600160a01b031660009081526066602052604090205490565b6060603780546107fb90612641565b60003381610fa2828661122f565b9050838110156110025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a57565b61100f82868684036112e3565b506001949350505050565b6000811161107c5760405162461bcd60e51b815260206004820152602960248201527f596f75206e65656420746f207374616b65206120706f73697469766520746f6b604482015268195b88185b5bdd5b9d60ba1b6064820152608401610a57565b610169546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af11580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110691906126b1565b6111755760405162461bcd60e51b815260206004820152603a60248201527f7472616e7366657246726f6d206661696c65642c206d616b652073757265207960448201527937ba9030b8383937bb32b2103a37b5b2b7103a3930b739b332b960311b6064820152608401610a57565b611183303383600043611ab0565b5061118e3382611b23565b611197336116dd565b5060405181815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9060200160405180910390a250565b60003361088c818585611481565b60006111e930610f6a565b905090565b60006108923060004385610ccb565b611205611bd2565b610bcb3082611c98565b60006112196114c3565b611222336116dd565b9050610f67600161013755565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6101045460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156112bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e9919061267b565b6001600160a01b0383166113455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a57565b6001600160a01b0382166113a65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a57565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611413848461122f565b9050600019811461147b578181101561146e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a57565b61147b84848484036112e3565b50505050565b61148f308483600043611640565b5061149e308383600043611ab0565b506114a8836116dd565b506114b2826116dd565b506114be838383611cd1565b505050565b600261013754036115165760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a57565b600261013755565b6001600160a01b03821661157e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a57565b6001600160a01b038216600090815260336020526040902054818110156115f25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a57565b6001600160a01b0383166000818152603360209081526040808320868603905560358054879003905551858152919291600080516020612880833981519152910160405180910390a3505050565b600061164d868484611e6a565b6001600160a01b038087166000908152606b6020908152604080832093891683529290522054611694908790879061168f9088906001600160801b03166127a9565b611ee7565b6001600160a01b0386166000908152606560205260409020546116b89085906127a9565b6001600160a01b03871660009081526065602052604090205550600195945050505050565b6000806116ed3084600043612063565b90508015610892576101045460405163bf40fac160e01b815260206004820152600a6024820152692922a82aaa20aa24a7a760b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d919061267b565b6001600160a01b03166340c10f1984836040518363ffffffff1660e01b81526004016117aa929190612698565b6020604051808303816000875af11580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed91906127bc565b5060405181815233907f43848d0574703c28d68ae8958e0571521618f60c4bcacfb094cff2156eaae0f19060200160405180910390a292915050565b600080516020612839833981519152546001600160a01b031690565b610bcb611bd2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611880576114be83612198565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118da575060408051601f3d908101601f191682019092526118d7918101906127bc565b60015b61193d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a57565b60008051602061283983398151915281146119ac5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a57565b506114be838383612232565b6001600160a01b0383166000908152606660209081526040808320546069909252909120549083821080156119ed5750834310155b6119f757816119f9565b835b91506000834311611a0a5743611a0c565b835b905084811080611a1c5750838310155b15611a275750611aa8565b6000611a3384836127a9565b6001600160a01b0388166000908152606a602052604081205491925090611a5a9083612770565b6001600160a01b038916600090815260656020526040902054909150611a8b82676765c793fa10079d601b1b612770565b611a959190612787565b611a9f908561275d565b93508294505050505b935093915050565b6000611abd868484611e6a565b6001600160a01b038087166000908152606b6020908152604080832093891683529290522054611aff908790879061168f9088906001600160801b031661275d565b6001600160a01b0386166000908152606560205260409020546116b890859061275d565b6001600160a01b038216611b795760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a57565b8060356000828254611b8b919061275d565b90915550506001600160a01b038216600081815260336020908152604080832080548601905551848152600080516020612880833981519152910160405180910390a35050565b6101025460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa158015611c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c40919061267b565b6001600160a01b031614611c965760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610a57565b565b611ca482600043611e6a565b611cb16207e90082612787565b6001600160a01b039092166000908152606a602052604090209190915550565b6001600160a01b038316611d355760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a57565b6001600160a01b038216611d975760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a57565b6001600160a01b03831660009081526033602052604090205481811015611e0f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a57565b6001600160a01b03808516600081815260336020526040808220868603905592861680825290839020805486019055915160008051602061288083398151915290611e5d9086815260200190565b60405180910390a361147b565b6001600160a01b0383166000908152606560205260408120549003611ea75750506001600160a01b03166000908152606960205260409020439055565b600080611eb58585856119b8565b6001600160a01b0390961660009081526066602090815260408083209890985560699052959095209490945550505050565b6001600160a01b038084166000908152606b6020908152604080832093861683529290522080546001600160801b031615611ff35780546001600160a01b03851660009081526066602052604081205490916001600160801b03600160801b8204811692676765c793fa10079d601b1b92611f629216612770565b611f6c9190612787565b611f7691906127a9565b6001830154909150611f929082906001600160801b03166127d5565b6001830180546001600160801b0319166001600160801b03929092169190911790556001600160a01b038516600090815260686020526040902054611fd890829061275d565b6001600160a01b038616600090815260686020526040902055505b80546001600160801b0319166001600160801b0383161781556001600160a01b038416600090815260666020526040902054676765c793fa10079d601b1b9061203c9084612770565b6120469190612787565b81546001600160801b03918216600160801b029116179055505050565b6000612070858484611e6a565b6001600160a01b038086166000908152606b60209081526040808320938816835292905220546120ac90869086906001600160801b0316611ee7565b6001600160a01b038581166000908152606b6020908152604080832093881683529290522060010180546001600160801b0380821692839290916010916120fc918591600160801b9004166127d5565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b038881166000818152606b60209081526040808320948c16835293815283822060010180546001600160801b03191690559181526067909152205461216c92509083169061275d565b6001600160a01b0387166000908152606760205260409020556001600160801b03169050949350505050565b6121a181612257565b6122035760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a57565b60008051602061283983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61223b83612266565b6000825111806122485750805b156114be5761147b83836122a6565b6001600160a01b03163b151590565b61226f81612198565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606122b183612257565b61230c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610a57565b600080846001600160a01b03168460405161232791906127fc565b600060405180830381855af49150503d8060008114612362576040519150601f19603f3d011682016040523d82523d6000602084013e612367565b606091505b509150915061238f828260405180606001604052806027815260200161285960279139612398565b95945050505050565b606083156123a75750816109e1565b6109e183838151156123bc5781518083602001fd5b8060405162461bcd60e51b8152600401610a5791906123fa565b60005b838110156123f15781810151838201526020016123d9565b50506000910152565b60208152600082518060208401526124198160408501602087016123d6565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610bcb57600080fd5b6000806040838503121561245557600080fd5b82356124608161242d565b946020939093013593505050565b60006020828403121561248057600080fd5b81356109e18161242d565b6000806000606084860312156124a057600080fd5b83356124ab8161242d565b925060208401356124bb8161242d565b929592945050506040919091013590565b6000602082840312156124de57600080fd5b5035919050565b600080604083850312156124f857600080fd5b82356125038161242d565b915060208301356125138161242d565b809150509250929050565b6000806000806080858703121561253457600080fd5b843561253f8161242d565b93506020850135925060408501359150606085013561255d8161242d565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561259157600080fd5b823561259c8161242d565b915060208301356001600160401b03808211156125b857600080fd5b818501915085601f8301126125cc57600080fd5b8135818111156125de576125de612568565b604051601f8201601f19908116603f0116810190838211818310171561260657612606612568565b8160405282815288602084870101111561261f57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600181811c9082168061265557607f821691505b60208210810361267557634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561268d57600080fd5b81516109e18161242d565b6001600160a01b03929092168252602082015260400190565b6000602082840312156126c357600080fd5b815180151581146109e157600080fd5b6020808252602c9082015260008051602061281983398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061281983398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561089257610892612747565b808202811582820484141761089257610892612747565b6000826127a457634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561089257610892612747565b6000602082840312156127ce57600080fd5b5051919050565b6001600160801b038181168382160190808211156127f5576127f5612747565b5092915050565b6000825161280e8184602087016123d6565b919091019291505056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205b91deb0fc9be76fff51a8b76738950f8656931a7d7cf5ab7768fbf513fdfab464736f6c63430008130033", "deployedBytecode": "0x6080604052600436106101b55760003560e01c806306fdde03146101ba578063095ea7b3146101e55780630c1cd7f31461021557806318160ddd146102415780631b3c90a814610256578063213b329e1461026d57806322dec37b1461028357806323b872dd146102b057806325d5971f146102d057806328e964e9146102f05780632e42a89614610325578063313ce567146103b757806331903da1146103d35780633659cfe61461040057806339509351146104205780633d9a12cc146104405780633e6326fc146104605780634162169f1461049957806347b3e7e8146104ba5780634f1db7f6146104e75780634f1ef2861461050757806352d1902d1461051a5780635aef7de61461052f57806370a08231146105505780637bcbb9ff14610586578063846141b3146105a657806395d89b41146105d3578063a457c2d7146105e8578063a694fc3a14610608578063a87430ba14610628578063a9059cbb14610716578063b46aa52714610736578063bf8e9b6e1461074d578063c671062914610762578063c76279a214610782578063c7b8981c146107a2578063dd62ed3e146107b7578063e1758bd8146107d7575b600080fd5b3480156101c657600080fd5b506101cf6107ec565b6040516101dc91906123fa565b60405180910390f35b3480156101f157600080fd5b50610205610200366004612442565b61087e565b60405190151581526020016101dc565b34801561022157600080fd5b50306000908152606a60205260409020545b6040519081526020016101dc565b34801561024d57600080fd5b50603554610233565b34801561026257600080fd5b5061026b610898565b005b34801561027957600080fd5b506207e900610233565b34801561028f57600080fd5b5061023361029e36600461246e565b60676020526000908152604090205481565b3480156102bc57600080fd5b506102056102cb36600461248b565b6109c2565b3480156102dc57600080fd5b5061026b6102eb3660046124cc565b6109e8565b3480156102fc57600080fd5b5061031061030b36600461246e565b610bce565b604080519283526020830191909152016101dc565b34801561033157600080fd5b506103846103403660046124e5565b606b602090815260009283526040808420909152908252902080546001909101546001600160801b0380831692600160801b90819004821692808316929190041684565b604080516001600160801b03958616815293851660208501529184169183019190915290911660608201526080016101dc565b3480156103c357600080fd5b50604051600281526020016101dc565b3480156103df57600080fd5b506102336103ee36600461246e565b60686020526000908152604090205481565b34801561040c57600080fd5b5061026b61041b36600461246e565b610be4565b34801561042c57600080fd5b5061020561043b366004612442565b610ca9565b34801561044c57600080fd5b5061023361045b36600461251e565b610ccb565b34801561046c57600080fd5b5061010454610481906001600160a01b031681565b6040516001600160a01b0390911681526020016101dc565b3480156104a557600080fd5b5061010254610481906001600160a01b031681565b3480156104c657600080fd5b506102336104d536600461246e565b606a6020526000908152604090205481565b3480156104f357600080fd5b506103106105023660046124e5565b610dbf565b61026b61051536600461257e565b610e02565b34801561052657600080fd5b50610233610ebb565b34801561053b57600080fd5b5061010354610481906001600160a01b031681565b34801561055c57600080fd5b5061023361056b36600461246e565b6001600160a01b031660009081526033602052604090205490565b34801561059257600080fd5b506102336105a136600461246e565b610f6a565b3480156105b257600080fd5b506102336105c136600461246e565b60696020526000908152604090205481565b3480156105df57600080fd5b506101cf610f85565b3480156105f457600080fd5b50610205610603366004612442565b610f94565b34801561061457600080fd5b5061026b6106233660046124cc565b61101a565b34801561063457600080fd5b506106d361064336600461246e565b60408051608081018252600080825260208201819052918101829052606081019190915250306000908152606b602090815260408083206001600160a01b0394909416835292815290829020825160808101845281546001600160801b038082168352600160801b9182900481169483019490945260019092015480841694820194909452920416606082015290565b6040516101dc919081516001600160801b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b34801561072257600080fd5b50610205610731366004612442565b6111d0565b34801561074257600080fd5b506102336207e90081565b34801561075957600080fd5b506102336111de565b34801561076e57600080fd5b5061023361077d36600461246e565b6111ee565b34801561078e57600080fd5b5061026b61079d3660046124cc565b6111fd565b3480156107ae57600080fd5b5061023361120f565b3480156107c357600080fd5b506102336107d23660046124e5565b61122f565b3480156107e357600080fd5b5061048161125a565b6060603680546107fb90612641565b80601f016020809104026020016040519081016040528092919081815260200182805461082790612641565b80156108745780601f1061084957610100808354040283529160200191610874565b820191906000526020600020905b81548152906001019060200180831161085757829003601f168201915b5050505050905090565b60003361088c8185856112e3565b60019150505b92915050565b6101045460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610920919061267b565b61010280546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa15801561097b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099f919061267b565b61010380546001600160a01b0319166001600160a01b0392909216919091179055565b6000336109d0858285611407565b6109db858585611481565b60019150505b9392505050565b6109f06114c3565b60006109fc3033610dbf565b50905081600003610a0b578091505b60008211610a605760405162461bcd60e51b815260206004820152601f60248201527f53686f756c6420776974686472617720706f73697469766520616d6f756e740060448201526064015b60405180910390fd5b81811015610aaa5760405162461bcd60e51b8152602060048201526017602482015276139bdd08195b9bdd59da081d1bdad95b881cdd185ad959604a1b6044820152606401610a57565b81610ab5338461151e565b610ac3303385600043611640565b50610acd336116dd565b50610169546001600160a01b031663a9059cbb33836040518363ffffffff1660e01b8152600401610aff929190612698565b6020604051808303816000875af1158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4291906126b1565b610b895760405162461bcd60e51b81526020600482015260186024820152771dda5d1a191c985dc81d1c985b9cd9995c8819985a5b195960421b6044820152606401610a57565b60405183815233907f1248d48e2de900a1010c7fce73506969ecec243600bfc08b641b158f26d857cd9060200160405180910390a25050610bcb600161013755565b50565b600080610bdb3084610dbf565b91509150915091565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c2c5760405162461bcd60e51b8152600401610a57906126d3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c5e611829565b6001600160a01b031614610c845760405162461bcd60e51b8152600401610a579061270d565b610c8d81611845565b60408051600080825260208201909252610bcb9183919061184d565b60003361088c818585610cbc838361122f565b610cc6919061275d565b6112e3565b6001600160a01b038085166000818152606b602090815260408083209486168352938152838220845160808101865281546001600160801b038082168352600160801b91829004811683860152600190930154808416838901520490911660608201529282526065905291822054829015610db5576000610d4d8888886119b8565b91505082604001516001600160801b0316915082602001516001600160801b0316676765c793fa10079d601b1b8285600001516001600160801b0316610d939190612770565b610d9d9190612787565b610da791906127a9565b610db1908361275d565b9150505b9695505050505050565b6001600160a01b039182166000818152606b602090815260408083209490951682529283528381205491815260659092529190205460016001