[ { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "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": "address", "name": "feeCollector", "type": "address" } ], "name": "FeeCollectorSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "blockNumber", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "miner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "mineCount", "type": "uint256" } ], "name": "Mine", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "mineCost", "type": "uint256" } ], "name": "MineCostSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "selectedMiner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "miningReward", "type": "uint256" } ], "name": "MinerSelected", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "NewETHCBlock", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oracle", "type": "address" } ], "name": "OracleSet", "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": 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": "BLOCK_INTERVAL", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINE_COST_ADJUST_AMOUNT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINE_COST_DECREASE_THRESHOLD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_MINE_COST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "blockNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "blockNumberToRequests", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "blocks", "outputs": [ { "internalType": "address", "name": "selectedMiner", "type": "address" }, { "internalType": "uint256", "name": "miningReward", "type": "uint256" }, { "internalType": "uint256", "name": "totalMineCount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "collect", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeCollector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "requestId", "type": "uint256" }, { "internalType": "uint256", "name": "randomNumber", "type": "uint256" } ], "name": "fulfillRandomness", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "mineCount", "type": "uint256" }, { "internalType": "uint256", "name": "blockCount", "type": "uint256" } ], "name": "futureMine", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_requestId", "type": "uint256" } ], "name": "getBlockNumberByRequestId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "getRequestIdByBlockNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "halvingInterval", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_reverseRegistrar", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isStarted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastBlockTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastHalvingBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastTenBlockMiningPower", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "mineCount", "type": "uint256" } ], "name": "mine", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "mineBatchCountOfBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "mineBatchOfBlock", "outputs": [ { "components": [ { "internalType": "address", "name": "miner", "type": "address" }, { "internalType": "uint256", "name": "startIdx", "type": "uint256" }, { "internalType": "uint256", "name": "mineCount", "type": "uint256" } ], "internalType": "struct EthcoinStorage.MineBatch[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" }, { "internalType": "uint256", "name": "_index", "type": "uint256" } ], "name": "mineBatchOfBlockByIndex", "outputs": [ { "components": [ { "internalType": "address", "name": "miner", "type": "address" }, { "internalType": "uint256", "name": "startIdx", "type": "uint256" }, { "internalType": "uint256", "name": "mineCount", "type": "uint256" } ], "internalType": "struct EthcoinStorage.MineBatch", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mineCost", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "minersOfBlock", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "minersOfBlockCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "miningReward", "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": "nextHalvingBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "oracle", "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": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "targetBlock", "type": "uint256" } ], "name": "requestRandomness", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "requestsToBlockNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reverseRegistrar", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "selectedMinerOfBlock", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_feeCollector", "type": "address" } ], "name": "setFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name", "type": "string" } ], "name": "setName", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_oracle", "type": "address" } ], "name": "setOracle", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "start", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "totalMineCountOfBlock", "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": "value", "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": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "upgradeBlockNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" } ]
60a06040523060805234801561001457600080fd5b50608051612c3561003e60003960008181611df101528181611e1a0152611f5b0152612c356000f3fe6080604052600436106103505760003560e01c80637363ae1f116101c6578063be9a6555116100f7578063dc09467b11610095578063ee30a39a1161006f578063ee30a39a14610a14578063f25b3f9914610a30578063f2fde38b14610a9e578063f6dc525314610abe57600080fd5b8063dc09467b146109c8578063dd62ed3e146109de578063e54ad237146109fe57600080fd5b8063c4d66de8116100d1578063c4d66de814610945578063c85ea4ec14610965578063ce3f865f1461097b578063ce86ea901461099b57600080fd5b8063be9a6555146108f0578063c415b95c14610905578063c47f00271461092557600080fd5b80639ec0af4411610164578063a84edc081161013e578063a84edc081461085c578063a9059cbb14610889578063ad3cb1cc146108a9578063b260f685146108da57600080fd5b80639ec0af44146107ef578063a412c4931461080f578063a42dce801461083c57600080fd5b806380869853116101a0578063808698531461076357806387c99d80146107835780638da5cb5b1461079d57806395d89b41146107da57600080fd5b80637363ae1f146107035780637adbf973146107235780637dc0d1d01461074357600080fd5b80634ac2d103116102a057806361c56a1c1161023e57806370a082311161021857806370a0823114610680578063714b8246146106c3578063715018a6146106d8578063724b2f5a146106ed57600080fd5b806361c56a1c146105ec5780636a47aa06146106195780636db7ebb61461062f57600080fd5b80634f1ef2861161027a5780634f1ef2861461058d57806352d1902d146105a0578063544736e6146105b557806357e871e7146105d657600080fd5b80634ac2d103146105345780634bbc7ed21461054a5780634d4748981461057a57600080fd5b806318160ddd1161030d57806332cb6b0c116102e757806332cb6b0c146104c057806335c4377b146104df57806338885ac1146104f45780633a7ba4fc1461050757600080fd5b806318160ddd1461045057806323b872dd14610484578063313ce567146104a457600080fd5b806303a8712f146103555780630426d39b146103825780630695a252146103af57806306fdde03146103d1578063095ea7b3146103f35780631770492e14610423575b600080fd5b34801561036157600080fd5b5061036f6509184e72a00081565b6040519081526020015b60405180910390f35b34801561038e57600080fd5b506103a261039d366004612616565b610aeb565b6040516103799190612638565b3480156103bb57600080fd5b506103cf6103ca366004612616565b610b87565b005b3480156103dd57600080fd5b506103e6610d17565b6040516103799190612686565b3480156103ff57600080fd5b5061041361040e3660046126d0565b610dda565b6040519015158152602001610379565b34801561042f57600080fd5b5061036f61043e3660046126fa565b600b6020526000908152604090205481565b34801561045c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025461036f565b34801561049057600080fd5b5061041361049f366004612713565b610df2565b3480156104b057600080fd5b5060405160128152602001610379565b3480156104cc57600080fd5b5061036f6a115eec47f6cf7e3500000081565b3480156104eb57600080fd5b5061036f603c81565b6103cf610502366004612616565b610e18565b34801561051357600080fd5b5061036f6105223660046126fa565b60096020526000908152604090205481565b34801561054057600080fd5b5061036f60025481565b34801561055657600080fd5b5061036f6105653660046126fa565b60009081526008602052604090206003015490565b6103cf6105883660046126fa565b610f65565b6103cf61059b3660046127db565b611066565b3480156105ac57600080fd5b5061036f611081565b3480156105c157600080fd5b5060005461041390600160a01b900460ff1681565b3480156105e257600080fd5b5061036f60035481565b3480156105f857600080fd5b5061036f6106073660046126fa565b6000908152600b602052604090205490565b34801561062557600080fd5b5061036f60055481565b34801561063b57600080fd5b5061066861064a3660046126fa565b6000908152600860205260409020600101546001600160a01b031690565b6040516001600160a01b039091168152602001610379565b34801561068c57600080fd5b5061036f61069b36600461283d565b6001600160a01b03166000908152600080516020612bc0833981519152602052604090205490565b3480156106cf57600080fd5b5061036f61109e565b3480156106e457600080fd5b506103cf6110b5565b3480156106f957600080fd5b5061036f60065481565b34801561070f57600080fd5b506103cf61071e3660046126fa565b6110c9565b34801561072f57600080fd5b506103cf61073e36600461283d565b61120c565b34801561074f57600080fd5b50600a54610668906001600160a01b031681565b34801561076f57600080fd5b50600054610668906001600160a01b031681565b34801561078f57600080fd5b5061036f655af3107a400081565b3480156107a957600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610668565b3480156107e657600080fd5b506103e6611269565b3480156107fb57600080fd5b5061036f61080a3660046126fa565b6112a8565b34801561081b57600080fd5b5061082f61082a3660046126fa565b6112e1565b6040516103799190612858565b34801561084857600080fd5b506103cf61085736600461283d565b611491565b34801561086857600080fd5b5061036f6108773660046126fa565b60009081526008602052604090205490565b34801561089557600080fd5b506104136108a43660046126d0565b6114e7565b3480156108b557600080fd5b506103e6604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156108e657600080fd5b5061036f600d5481565b3480156108fc57600080fd5b506103cf6114f5565b34801561091157600080fd5b50600754610668906001600160a01b031681565b34801561093157600080fd5b5061036f6109403660046128a5565b611566565b34801561095157600080fd5b506103cf61096036600461283d565b6115e3565b34801561097157600080fd5b5061036f60045481565b34801561098757600080fd5b506103cf6109963660046126fa565b611774565b3480156109a757600080fd5b5061036f6109b63660046126fa565b60009081526009602052604090205490565b3480156109d457600080fd5b5061036f600c5481565b3480156109ea57600080fd5b5061036f6109f93660046128f6565b611868565b348015610a0a57600080fd5b5061036f60015481565b348015610a2057600080fd5b5061036f670b1a2bc2ec50000081565b348015610a3c57600080fd5b50610a79610a4b3660046126fa565b6008602052600090815260409020600181015460028201546004909201546001600160a01b03909116919083565b604080516001600160a01b039094168452602084019290925290820152606001610379565b348015610aaa57600080fd5b506103cf610ab936600461283d565b6118b2565b348015610aca57600080fd5b50610ade610ad93660046126fa565b6118ed565b6040516103799190612929565b610b18604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6000838152600860205260409020600301805483908110610b3b57610b3b612988565b600091825260209182902060408051606081018252600390930290910180546001600160a01b031683526001810154938301939093526002909201549181019190915290505b92915050565b600a546001600160a01b03163314610be65760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f7261636c652063616e2073656c656374206d696e65720000000060448201526064015b60405180910390fd5b6000828152600b6020908152604080832054808452600890925290912060018101546001600160a01b031615610c1c5750505050565b6000816004015484610c2e91906129b4565b90506000610c3c8383611985565b90506001600160a01b038116610c5457505050505050565b6a115eec47f6cf7e350000008360020154610c8d7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b610c9791906129de565b11610caa57610caa818460020154611a91565b6001830180546001600160a01b0319166001600160a01b03831690811790915560028401546040805187815260208101939093528201527f7751b7b286227379c21dd3b9309e4067a6f5aac577b3c039d776102f96ecfde8906060015b60405180910390a1505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020612bc083398151915291610d56906129f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d82906129f1565b8015610dcf5780601f10610da457610100808354040283529160200191610dcf565b820191906000526020600020905b815481529060010190602001808311610db257829003601f168201915b505050505091505090565b600033610de8818585611ac7565b5060019392505050565b600033610e00858285611ad9565b610e0b858585611b3f565b60019150505b9392505050565b600054600160a01b900460ff16610e5f5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd081cdd185c9d195960aa1b6044820152606401610bdd565b600082118015610e6f5750600081115b610ec55760405162461bcd60e51b815260206004820152602160248201527f696e76616c6964206d696e6520636f756e74206f7220626c6f636b20636f756e6044820152601d60fa1b6064820152608401610bdd565b8082600154610ed49190612a2b565b610ede9190612a2b565b3414610f215760405162461bcd60e51b81526020600482015260126024820152711b5a5cdb585d18da081b5a5b994818dbdcdd60721b6044820152606401610bdd565b60005b81811015610f5857610f5033826003546001610f4091906129de565b610f4a91906129de565b85611b9e565b600101610f24565b50610f61611c88565b5050565b600054600160a01b900460ff16610fac5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd081cdd185c9d195960aa1b6044820152606401610bdd565b60008111610ff15760405162461bcd60e51b81526020600482015260126024820152711a5b9d985b1a59081b5a5b994818dbdd5b9d60721b6044820152606401610bdd565b80600154610fff9190612a2b565b34146110425760405162461bcd60e51b81526020600482015260126024820152711b5a5cdb585d18da081b5a5b994818dbdcdd60721b6044820152606401610bdd565b61105b33600354600161105591906129de565b83611b9e565b611063611c88565b50565b61106e611de6565b61107782611e8b565b610f618282611e93565b600061108b611f50565b50600080516020612be083398151915290565b60006005546006546110b091906129de565b905090565b6110bd611f99565b6110c76000611ff4565b565b6110d1611f99565b60035481106111195760405162461bcd60e51b8152602060048201526014602482015273696e76616c69642074617267657420626c6f636b60601b6044820152606401610bdd565b6000818152600860205260409020600101546001600160a01b03161561117a5760405162461bcd60e51b81526020600482015260166024820152751b5a5b995c88185b1c9958591e481cd95b1958dd195960521b6044820152606401610bdd565b600a546040805163f8413b0760e01b815290516000926001600160a01b03169163f8413b07916004808301926020929190829003018187875af11580156111c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e99190612a42565b6000838152600960209081526040808320849055928252600b9052209190915550565b611214611f99565b600a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f3f32684a32a11dabdbb8c0177de80aa3ae36a004d75210335b49e544e48cd0aa906020015b60405180910390a150565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020612bc083398151915291610d56906129f1565b6000600c5482106112c9575060009081526008602052604090206004015490565b5060009081526008602052604090205490565b919050565b6060600c54821061142757600082815260086020526040812060040154819067ffffffffffffffff8111156113185761131861274f565b604051908082528060200260200182016040528015611341578160200160208202803683370190505b50905060005b60008581526008602052604090206003015481101561141f57600085815260086020526040812060030180548390811061138357611383612988565b6000918252602080832060408051606081018252600390940290910180546001600160a01b031684526001810154928401929092526002909101549082015291505b81604001518110156114155781600001518486815181106113e8576113e8612988565b6001600160a01b03909216602092830291909101909101528461140a81612a5b565b9550506001016113c5565b5050600101611347565b509392505050565b6000828152600860209081526040918290208054835181840281018401909452808452909183018282801561148557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611467575b50505050509050919050565b611499611f99565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f12e1d17016b94668449f97876f4a8d5cc2c19f314db337418894734037cc19d49060200161125e565b600033610de8818585611b3f565b6114fd611f99565b600054600160a01b900460ff161561154d5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610bdd565b6000805460ff60a01b1916600160a01b17905542600455565b6000611570611f99565b60005460405163c47f002760e01b81526001600160a01b039091169063c47f0027906115a0908590600401612686565b6020604051808303816000875af11580156115bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190612a42565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156116295750825b905060008267ffffffffffffffff1660011480156116465750303b155b905081158015611654575080155b156116725760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561169c57845460ff60401b1916600160401b1785555b6116e16040518060400160405280600781526020016622ba3431b7b4b760c91b815250604051806040016040528060048152602001634554484360e01b815250612065565b6116ea33612077565b6116f2612088565b600080546001600160a01b0319166001600160a01b03881617905565b5e620f48000600155680ad78ebc5ac6200000600255612760600555831561176c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610d07565b505050505050565b6007546001600160a01b031633146117ce5760405162461bcd60e51b815260206004820152601d60248201527f6f6e6c7920666565436f6c6c6563746f722063616e20636f6c6c6563740000006044820152606401610bdd565b6007546040516000916001600160a01b03169083908381818185875af1925050503d806000811461181b576040519150601f19603f3d011682016040523d82523d6000602084013e611820565b606091505b5050905080610f615760405162461bcd60e51b81526020600482015260146024820152733330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610bdd565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6118ba611f99565b6001600160a01b0381166118e457604051631e4fbdf760e01b815260006004820152602401610bdd565b61106381611ff4565b606060086000838152602001908152602001600020600301805480602002602001604051908101604052809291908181526020016000905b8282101561197a576000848152602090819020604080516060810182526003860290920180546001600160a01b0316835260018082015484860152600290910154918301919091529083529092019101611925565b505050509050919050565b60038201546000908190819061199d90600190612a74565b90505b808211611a8657600060026119b58484612a74565b6119bf9190612a87565b6119c990846129de565b905060008660030182815481106119e2576119e2612988565b600091825260209182902060408051606081018252600390930290910180546001600160a01b031683526001810154938301849052600201549082015291508610801590611a42575080604001518160200151611a3f91906129de565b86105b15611a5357519350610b8192505050565b8581602001511115611a7157611a6a600183612a74565b9250611a7f565b611a7c8260016129de565b93505b50506119a0565b506000949350505050565b6001600160a01b038216611abb5760405163ec442f0560e01b815260006004820152602401610bdd565b610f6160008383612090565b611ad483838360016121ce565b505050565b6000611ae58484611868565b90506000198114611b395781811015611b2a57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610bdd565b611b39848484840360006121ce565b50505050565b6001600160a01b038316611b6957604051634b637e8f60e11b815260006004820152602401610bdd565b6001600160a01b038216611b935760405163ec442f0560e01b815260006004820152602401610bdd565b611ad4838383612090565b6000828152600860208181526040808420600481015482516060810184526001600160a01b038a811682528186018381529482018981529686526003938401805460018082018355918a529690982082519690940290930180546001600160a01b03191695909316949094178255915194810194909455915160029093019290925590611c2b83836129de565b60008581526008602090815260409182902060040192909255518481526001600160a01b0387169186917f6624a09eb96dea85bd37279bab3c70e7198a4bf6a00a69c9361c5b3d85e5608991015b60405180910390a35050505050565b603c600454611c9791906129de565b42106110c75760038054906000611cad83612a5b565b909155505042600455600354611cc590600a906129b4565b600003611cd457611cd46122ad565b600a546040805163f8413b0760e01b815290516000926001600160a01b03169163f8413b07916004808301926020929190829003018187875af1158015611d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d439190612a42565b9050611d4d61109e565b60035410611d7e5760028054611d639190612a87565b6002908155600554611d7491612a2b565b6005556003546006555b6003805460009081526009602090815260408083208590558354858452600b835281842081905560028054918552600890935281842090920191909155915491517fd11daf33317d43408335d309c76972bdb13cc2751a9eaade9d3c68c16eadcff19190a250565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611e6d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611e61600080516020612be0833981519152546001600160a01b031690565b6001600160a01b031614155b156110c75760405163703e46dd60e11b815260040160405180910390fd5b611063611f99565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611eed575060408051601f3d908101601f19168201909252611eea91810190612a42565b60015b611f1557604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610bdd565b600080516020612be08339815191528114611f4657604051632a87526960e21b815260048101829052602401610bdd565b611ad4838361239f565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110c75760405163703e46dd60e11b815260040160405180910390fd5b33611fcb7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146110c75760405163118cdaa760e01b8152336004820152602401610bdd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61206d6123f5565b610f61828261243e565b61207f6123f5565b6110638161248f565b6110c76123f5565b600080516020612bc08339815191526001600160a01b0384166120cc57818160020160008282546120c191906129de565b9091555061213e9050565b6001600160a01b0384166000908152602082905260409020548281101561211f5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610bdd565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661215c57600281018054839003905561217b565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121c091815260200190565b60405180910390a350505050565b600080516020612bc08339815191526001600160a01b0385166122075760405163e602df0560e01b815260006004820152602401610bdd565b6001600160a01b03841661223157604051634a1406b160e11b815260006004820152602401610bdd565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156122a657836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611c7991815260200190565b5050505050565b6000805b600a8110156122df576122cb8160035461080a9190612a74565b6122d590836129de565b91506001016122b1565b50600d541561239a57600d54811115612343576509184e72a00060015461230691906129de565b60018190556040519081527f85e42fa5726036a226dc1d1785b502dba7b9c3bd18702c51ff6f101a45518b4f9060200160405180910390a1600d55565b670de0b6b3a7640000670b1a2bc2ec500000600d546123629190612a2b565b61236c9190612a87565b811080156123815750655af3107a4000600154115b1561239a576509184e72a0006001546123069190612a74565b600d55565b6123a882612497565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156123ed57611ad482826124fc565b610f61612572565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110c757604051631afcd79f60e31b815260040160405180910390fd5b6124466123f5565b600080516020612bc08339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036124808482612ae3565b5060048101611b398382612ae3565b6118ba6123f5565b806001600160a01b03163b6000036124cd57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610bdd565b600080516020612be083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516125199190612ba3565b600060405180830381855af49150503d8060008114612554576040519150601f19603f3d011682016040523d82523d6000602084013e612559565b606091505b5091509150612569858383612591565b95945050505050565b34156110c75760405163b398979f60e01b815260040160405180910390fd5b6060826125a6576125a1826125ed565b610e11565b81511580156125bd57506001600160a01b0384163b155b156125e657604051639996b31560e01b81526001600160a01b0385166004820152602401610bdd565b5080610e11565b8051156125fd5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000806040838503121561262957600080fd5b50508035926020909101359150565b81516001600160a01b03168152602080830151908201526040808301519082015260608101610b81565b60005b8381101561267d578181015183820152602001612665565b50506000910152565b60208152600082518060208401526126a5816040850160208701612662565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146112dc57600080fd5b600080604083850312156126e357600080fd5b6126ec836126b9565b946020939093013593505050565b60006020828403121561270c57600080fd5b5035919050565b60008060006060848603121561272857600080fd5b612731846126b9565b925061273f602085016126b9565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156127805761278061274f565b604051601f8501601f19908116603f011681019082821181831017156127a8576127a861274f565b816040528093508581528686860111156127c157600080fd5b858560208301376000602087830101525050509392505050565b600080604083850312156127ee57600080fd5b6127f7836126b9565b9150602083013567ffffffffffffffff81111561281357600080fd5b8301601f8101851361282457600080fd5b61283385823560208401612765565b9150509250929050565b60006020828403121561284f57600080fd5b610e11826126b9565b6020808252825182820181905260009190848201906040850190845b818110156128995783516001600160a01b031683529284019291840191600101612874565b50909695505050505050565b6000602082840312156128b757600080fd5b813567ffffffffffffffff8111156128ce57600080fd5b8201601f810184136128df57600080fd5b6128ee84823560208401612765565b949350505050565b6000806040838503121561290957600080fd5b612912836126b9565b9150612920602084016126b9565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156128995761297583855180516001600160a01b0316825260208082015190830152604090810151910152565b9284019260609290920191600101612945565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6000826129c3576129c361299e565b500690565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b8157610b816129c8565b600181811c90821680612a0557607f821691505b602082108103612a2557634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610b8157610b816129c8565b600060208284031215612a5457600080fd5b5051919050565b600060018201612a6d57612a6d6129c8565b5060010190565b81810381811115610b8157610b816129c8565b600082612a9657612a9661299e565b500490565b601f821115611ad4576000816000526020600020601f850160051c81016020861015612ac45750805b601f850160051c820191505b8181101561176c57828155600101612ad0565b815167ffffffffffffffff811115612afd57612afd61274f565b612b1181612b0b84546129f1565b84612a9b565b602080601f831160018114612b465760008415612b2e5750858301515b600019600386901b1c1916600185901b17855561176c565b600085815260208120601f198616915b82811015612b7557888601518255948401946001909101908401612b56565b5085821015612b935787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251612bb5818460208701612662565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220cf524694445acc6e9f962d352fc47c6f7045ca5a91e65c38b2c6cdf132503b5964736f6c63430008180033