[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "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": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "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": "PONZIO_alreadyInitialized", "type": "error" }, { "inputs": [], "name": "PONZIO_feeCollectorZeroAddress", "type": "error" }, { "inputs": [], "name": "PONZIO_notInitialized", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "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": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "value", "type": "bool" } ], "name": "BlacklistForUpdateSupplySet", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "feesCollector", "type": "address" } ], "name": "FeesCollectorSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "MaxSharesReached", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldTotalSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldTotalShare", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalShare", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "fees", "type": "uint256" } ], "name": "TotalSupplyUpdated", "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": "uniV2PoolPair", "type": "address" } ], "name": "UniV2PoolPairSet", "type": "event" }, { "inputs": [], "name": "DEBASE_EVERY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEPLOYED_TIME", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FEES_BASE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FEES_STAKING", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "HALVING_EVERY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIAL_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_TOTAL_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NB_DEBASE_PER_HALVING", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SHARES_PRECISION_FACTOR", "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": "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": "computeNewState", "outputs": [ { "internalType": "uint256", "name": "totalShares_", "type": "uint256" }, { "internalType": "uint256", "name": "totalSupply_", "type": "uint256" }, { "internalType": "uint256", "name": "fees_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "computeSupply", "outputs": [ { "internalType": "uint256", "name": "totalSupply_", "type": "uint256" }, { "internalType": "uint256", "name": "fees_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" } ], "name": "deBased", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feesCollector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "feeCollector", "type": "address" }, { "internalType": "address", "name": "uniV2PoolAddr", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "maxSharesReached", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "realBalanceOf", "outputs": [ { "internalType": "uint256", "name": "balance_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addrToBlacklist", "type": "address" }, { "internalType": "bool", "name": "value", "type": "bool" } ], "name": "setBlacklistForUpdateSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "feeCollector", "type": "address" } ], "name": "setFeesCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "uniV2PoolAddr", "type": "address" } ], "name": "setUniswapV2Pair", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "sharesOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "newTotalShares", "type": "uint256" }, { "internalType": "uint256", "name": "newTotalSupply", "type": "uint256" } ], "name": "sharesToToken", "outputs": [ { "internalType": "uint256", "name": "tokenAmount_", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "sharesToToken", "outputs": [ { "internalType": "uint256", "name": "tokenAmount_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "tokenToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "newTotalShares", "type": "uint256" }, { "internalType": "uint256", "name": "newTotalSupply", "type": "uint256" } ], "name": "tokenToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "totalShares", "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": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "transferShares", "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": "shares", "type": "uint256" } ], "name": "transferSharesFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "uniswapV2Pair", "outputs": [ { "internalType": "contract IUniswapV2Pair", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "updateTotalSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
610180604052600c805460ff60a01b19908116909155600d80549091169055348015610029575f80fd5b50336040518060400160405280600e81526020016d506f6e7a69652054686520446f6760901b81525060405180604001604052806006815260200165504f4e5a494560d01b8152506012600a61007f91906103d1565b61008d906301406f406103e6565b6040805180820190915260018152603160f81b602082015283908190818560036100b78382610495565b5060046100c48282610495565b506100d49150839050600561021d565b610120526100e381600661021d565b61014052815160208084019190912060e052815190820120610100524660a05261016f60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506101856103e8826103e6565b335f908152600860205260409020556101a06103e8826103e6565b6009555050506001600160a01b0381166101d457604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101dd8161024f565b5042610160526101ef6012600a6103d1565b6101fd906301406f406103e6565b6001600160d81b0316600160d81b4264ffffffffff160217600e556105ac565b5f60208351101561023857610231836102a0565b9050610249565b816102438482610495565b5060ff90505b92915050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f80829050601f815111156102ca578260405163305a27a960e01b81526004016101cb9190610554565b80516102d582610589565b179392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561032b57815f1904821115610311576103116102dd565b8085161561031e57918102915b93841c93908002906102f6565b509250929050565b5f8261034157506001610249565b8161034d57505f610249565b8160018114610363576002811461036d57610389565b6001915050610249565b60ff84111561037e5761037e6102dd565b50506001821b610249565b5060208310610133831016604e8410600b84101617156103ac575081810a610249565b6103b683836102f1565b805f19048211156103c9576103c96102dd565b029392505050565b5f6103df60ff841683610333565b9392505050565b8082028115828204841417610249576102496102dd565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061042557607f821691505b60208210810361044357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561049057805f5260205f20601f840160051c8101602085101561046e5750805b601f840160051c820191505b8181101561048d575f815560010161047a565b50505b505050565b81516001600160401b038111156104ae576104ae6103fd565b6104c2816104bc8454610411565b84610449565b602080601f8311600181146104f5575f84156104de5750858301515b5f19600386901b1c1916600185901b17855561054c565b5f85815260208120601f198616915b8281101561052357888601518255948401946001909101908401610504565b508582101561054057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610443575f1960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516101605161276961060e5f395f81816104300152610c0c01525f611aec01525f611abf01525f61162001525f6115f801525f61155301525f61157d01525f6115a701526127695ff3fe608060405234801561000f575f80fd5b50600436106102ee575f3560e01c80637a60e06911610192578063b23b36ad116100e8578063db6905ab11610093578063f2fde38b1161006e578063f2fde38b14610643578063f5eb42dc14610656578063fda9c9471461067e575f80fd5b8063db6905ab146105df578063dd62ed3e14610602578063ece531b01461063a575f80fd5b8063d0dc5c65116100c3578063d0dc5c65146105b1578063d4245ebb146105b9578063d505accf146105cc575f80fd5b8063b23b36ad14610573578063baa83f691461057b578063c53dc7571461059e575f80fd5b80639028ee82116101485780639cf160f6116101235780639cf160f61461053c578063a29a60891461054d578063a9059cbb14610560575f80fd5b80639028ee821461050e57806395d89b411461052157806399a03c7014610529575f80fd5b806384b0196e1161017857806384b0196e146104cf5780638da5cb5b146104ea5780638fcb4e5b146104fb575f80fd5b80637a60e0691461049f5780637ecebe00146104bc575f80fd5b80633a98ef391161024757806365017796116101fd57806370a08231116101d857806370a082311461047857806370fc982d1461048b578063715018a614610497575f80fd5b8063650177961461042b5780636cf81ec6146104525780636d78045914610465575f80fd5b806349bd5a5e1161022d57806349bd5a5e146103ea5780634b457d981461040f5780635e703fec14610418575f80fd5b80633a98ef39146103cf578063485cc955146103d7575f80fd5b8063280cc3d2116102a7578063361bb0c111610282578063361bb0c11461039f5780633644e515146103b2578063373071f2146103ba575f80fd5b8063280cc3d21461037f5780632ff2e9dc14610388578063313ce56714610390575f80fd5b806318160ddd116102d757806318160ddd146103335780631db6e8501461036257806323b872dd1461036c575f80fd5b806306fdde03146102f2578063095ea7b314610310575b5f80fd5b6102fa610687565b604051610307919061226d565b60405180910390f35b61032361031e36600461229a565b610717565b6040519015158152602001610307565b600e547affffffffffffffffffffffffffffffffffffffffffffffffffffff165b604051908152602001610307565b6103546205469081565b61032361037a3660046122c2565b610730565b61035461080a81565b610354610755565b60405160128152602001610307565b6103546103ad3660046122fb565b610772565b6103546107a0565b6103cd6103c8366004612312565b6107ae565b005b600954610354565b6103cd6103e536600461232b565b6108b3565b600d546001600160a01b03165b6040516001600160a01b039091168152602001610307565b61035461053981565b61035461042636600461235c565b610a94565b6103547f000000000000000000000000000000000000000000000000000000000000000081565b6103546104603660046122fb565b610aa8565b6103236104733660046122c2565b610ad6565b610354610486366004612312565b610b23565b61035464e8d4a5100081565b6103cd610b6c565b6104a7610b7f565b60408051928352602083019190915201610307565b6103546104ca366004612312565b610d94565b6104d7610d9e565b6040516103079796959493929190612385565b600b546001600160a01b03166103f7565b61032361050936600461229a565b610dfc565b6103cd61051c366004612312565b610e11565b6102fa610e40565b610354610537366004612312565b610e4f565b600c546001600160a01b03166103f7565b6103cd61055b366004612312565b610e83565b61032361056e36600461229a565b610eec565b610354610ef9565b610583610f08565b60408051938452602084019290925290820152606001610307565b6103546105ac36600461235c565b610f8a565b6103cd610f96565b6103cd6105c7366004612438565b6111de565b6103cd6105da366004612471565b611257565b600c5474010000000000000000000000000000000000000000900460ff16610323565b61035461061036600461232b565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61035461271081565b6103cd610651366004612312565b6113c4565b610354610664366004612312565b6001600160a01b03165f9081526008602052604090205490565b6103546103e881565b606060038054610696906124de565b80601f01602080910402602001604051908101604052809291908181526020018280546106c2906124de565b801561070d5780601f106106e45761010080835404028352916020019161070d565b820191905f5260205f20905b8154815290600101906020018083116106f057829003601f168201915b5050505050905090565b5f33610724818585611417565b60019150505b92915050565b5f3361073d858285611424565b6107488585856114b8565b60019150505b9392505050565b6107616012600a61263c565b61076f906301406f4061264a565b81565b5f61072a826009546105ac600e547affffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b5f6107a9611547565b905090565b6107b6611670565b600d5474010000000000000000000000000000000000000000900460ff1661080a576040517faa324d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661084a576040517f874252b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610852610f96565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f2e5c9b2d1f2851a0e14220e58e1e816d1320fc05d2c89a5657bedc5a9943c20d905f90a250565b6108bb611670565b600d5474010000000000000000000000000000000000000000900460ff1615610910576040517f8443444a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610950576040517f874252b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d80546001600160a01b0383167fffffffffffffffffffffff000000000000000000000000000000000000000000909116811774010000000000000000000000000000000000000000179091556040517f73f069d9129374dc8becc030b822edfd551de07458e25992e89e7bf50cd4a063905f90a26001600160a01b0381165f818152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590519092917f4a8bc871bc382f8f05aa4ee5015bd9d5eeafc8334ba96536b463dd2657a64f1591a3600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040517f2e5c9b2d1f2851a0e14220e58e1e816d1320fc05d2c89a5657bedc5a9943c20d905f90a25050565b5f610aa08483856116b6565b949350505050565b5f61072a82600954610426600e547affffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b5f80610ae18361178e565b905080158015610af057505f83115b15610b0357610b00600182612661565b90505b610b0e853383611424565b610b1a858585846117c5565b95945050505050565b600e546009546001600160a01b0383165f90815260086020526040812054909261072a927affffffffffffffffffffffffffffffffffffffffffffffffffffff909116906116b6565b610b74611670565b610b7d5f611a45565b565b600e54600c545f9182917affffffffffffffffffffffffffffffffffffffffffffffffffffff9091169074010000000000000000000000000000000000000000900460ff1615610bd157925f92509050565b600e547b01000000000000000000000000000000000000000000000000000000900464ffffffffff1664e8d4a510008214610d0a575f610c317f000000000000000000000000000000000000000000000000000000000000000042612674565b90505f610c4162054690836126b4565b610c4c9060026126c7565b610c586012600a61263c565b610c66906301406f4061264a565b610c7091906126b4565b90506002610c8361080a620546906126b4565b61080a610c9362054690866126d2565b610c9d91906126b4565b610ca7908461264a565b610cb191906126b4565b610cbb91906126b4565b610cc59082612674565b955064e8d4a51000861015610cdd5764e8d4a5100095505b612710610539610ced8887612674565b610cf7919061264a565b610d0191906126b4565b94505050610d8e565b64e8d4a51000935062054690610d208242612674565b1015610d6d5761271062054690610d378342612674565b610d4861053964e8d4a5100061264a565b610d52919061264a565b610d5c91906126b4565b610d6691906126b4565b9250610d8e565b612710610d8161053964e8d4a5100061264a565b610d8b91906126b4565b92505b50509091565b5f61072a82611aae565b5f6060805f805f6060610daf611ab8565b610db7611ae5565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b5f61074e338484610e0c86610aa8565b6117c5565b610e19611670565b610e3d81610e2f600b546001600160a01b031690565b610e3884610b23565b611b12565b50565b606060048054610696906124de565b5f805f610e5a610f08565b506001600160a01b0386165f908152600860205260409020549193509150610aa0908383610a94565b610e8b611670565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f73f069d9129374dc8becc030b822edfd551de07458e25992e89e7bf50cd4a063905f90a250565b5f336107248185856114b8565b61076f61080a620546906126b4565b5f805f806009549050610f19610b7f565b90935091505f838310610f3a575080610f336002856126b4565b9250610f53565b610f5083610f488187612674565b8491906116b6565b90505b5f610f5e8383611b26565b9650905080610f82575f199550610f7f610f788488612674565b8787610a94565b93505b505050909192565b5f610aa08484846116b6565b600e5464ffffffffff4281167b010000000000000000000000000000000000000000000000000000009092041603610fca57565b5f80610fd4610b7f565b600c5491935091506001600160a01b03168115801590610ffc57506001600160a01b03811615155b156111d957600e547affffffffffffffffffffffffffffffffffffffffffffffffffffff1661102a84611b4d565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff167b010000000000000000000000000000000000000000000000000000004264ffffffffff160217600e5560095484841061108a576110858382611bb1565b6110a9565b6110a9836110a48661109c818a612674565b8591906116b6565b611bb1565b6009546040805184815260208101889052808201849052606081019290925260808201869052517f9e58b170e0350f4db79237b74fbf8c29c7d19c7c09b71d0f0f8e9316334acaed9181900360a00190a16001600160a01b0383163b15611174576040517f3bdc8a1f0000000000000000000000000000000000000000000000000000000081525f60048201526001600160a01b03841690633bdc8a1f906024015f604051808303815f87803b158015611161575f80fd5b505af1925050508015611172575060015b505b600d5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156111c0575f80fd5b505af11580156111d2573d5f803e3d5ffd5b5050505050505b505050565b6111e6611670565b6001600160a01b0382165f818152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915590519092917f4a8bc871bc382f8f05aa4ee5015bd9d5eeafc8334ba96536b463dd2657a64f1591a35050565b83421115611299576040517f62791302000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886112e48c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61133e82611c63565b90505f61134d82878787611caa565b9050896001600160a01b0316816001600160a01b0316146113ad576040517f4b800e460000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301528b166024820152604401611290565b6113b88a8a8a611417565b50505050505050505050565b6113cc611670565b6001600160a01b03811661140e576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401611290565b610e3d81611a45565b6111d98383836001611cd6565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146114b257818110156114a4576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401611290565b6114b284848484035f611cd6565b50505050565b6001600160a01b0383166114fa576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401611290565b6001600160a01b03821661153c576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401611290565b6111d9838383611b12565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561159f57507f000000000000000000000000000000000000000000000000000000000000000046145b156115c957507f000000000000000000000000000000000000000000000000000000000000000090565b6107a9604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b600b546001600160a01b03163314610b7d576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401611290565b5f838302815f1985870982811083820303915050805f036116ea578382816116e0576116e0612687565b049250505061074e565b808411611723576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f61072a6117b8600e547affffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b6009548491906001611d2c565b5f6001600160a01b038516611811576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401611290565b6001600160a01b03841661185c576040517fec442f050000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611290565b6001600160a01b0385165f908152600860205260409020548311156118e8576001600160a01b0385165f90815260086020526040902054859061189e90610aa8565b6040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101839052606401611290565b6001600160a01b0385165f908152600a602052604090205460ff1615801561192857506001600160a01b0384165f908152600a602052604090205460ff16155b80156119435750335f908152600a602052604090205460ff16155b1561199357306001600160a01b031663d0dc5c656040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611980575f80fd5b505af1925050508015611991575060015b505b6001600160a01b0385165f90815260086020526040812080548592906119ba908490612674565b90915550506001600160a01b0384165f90815260086020526040812080548592906119e6908490612661565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a3291815260200190565b60405180910390a3506001949350505050565b600b80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f61072a82611d79565b60606107a97f00000000000000000000000000000000000000000000000000000000000000006005611d96565b60606107a97f00000000000000000000000000000000000000000000000000000000000000006006611d96565b6114b28383611b2084610772565b846117c5565b5f8083830184811015611b3f575f809250925050611b46565b6001925090505b9250929050565b5f7affffffffffffffffffffffffffffffffffffffffffffffffffffff821115611bad576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260d8600482015260248101839052604401611290565b5090565b6009545f611bbf8284611b26565b50905080611c5957611bdb84611bd6845f19612674565b611e3f565b600c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f628240a53f7ebe5375e91882d66546bf9e49d01336f63e6afcc71ff6b8cdfa2090611c4c9042815260200190565b60405180910390a16114b2565b6114b28484611e3f565b5f61072a611c6f611547565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f805f80611cba88888888611e87565b925092509250611cca8282611f6d565b50909695505050505050565b306001600160a01b031663d0dc5c656040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611d0e575f80fd5b505af1925050508015611d1f575060015b506114b284848484612074565b5f80611d398686866116b6565b9050611d4483612178565b8015611d5f57505f8480611d5a57611d5a612687565b868809115b15610b1a57611d6f600182612661565b9695505050505050565b6001600160a01b0381165f9081526007602052604081205461072a565b606060ff8314611db057611da9836121a4565b905061072a565b818054611dbc906124de565b80601f0160208091040260200160405190810160405280929190818152602001828054611de8906124de565b8015611e335780601f10611e0a57610100808354040283529160200191611e33565b820191905f5260205f20905b815481529060010190602001808311611e1657829003601f168201915b5050505050905061072a565b6001600160a01b0382165f9081526008602052604081208054839290611e66908490612661565b925050819055508060095f828254611e7e9190612661565b90915550505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611ec057505f91506003905082611f63565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611f11573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116611f5a57505f925060019150829050611f63565b92505f91508190505b9450945094915050565b5f826003811115611f8057611f806126e5565b03611f89575050565b6001826003811115611f9d57611f9d6126e5565b03611fd4576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611fe857611fe86126e5565b03612022576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401611290565b6003826003811115612036576120366126e5565b03612070576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611290565b5050565b6001600160a01b0384166120b6576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401611290565b6001600160a01b0383166120f8576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401611290565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156114b257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161216a91815260200190565b60405180910390a350505050565b5f600282600381111561218d5761218d6126e5565b6121979190612712565b60ff166001149050919050565b60605f6121b0836121e1565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561072a576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61074e6020830184612221565b80356001600160a01b0381168114612295575f80fd5b919050565b5f80604083850312156122ab575f80fd5b6122b48361227f565b946020939093013593505050565b5f805f606084860312156122d4575f80fd5b6122dd8461227f565b92506122eb6020850161227f565b9150604084013590509250925092565b5f6020828403121561230b575f80fd5b5035919050565b5f60208284031215612322575f80fd5b61074e8261227f565b5f806040838503121561233c575f80fd5b6123458361227f565b91506123536020840161227f565b90509250929050565b5f805f6060848603121561236e575f80fd5b505081359360208301359350604090920135919050565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e060208401526123c160e084018a612221565b83810360408501526123d3818a612221565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b818110156124265783518352928401929184019160010161240a565b50909c9b505050505050505050505050565b5f8060408385031215612449575f80fd5b6124528361227f565b915060208301358015158114612466575f80fd5b809150509250929050565b5f805f805f805f60e0888a031215612487575f80fd5b6124908861227f565b965061249e6020890161227f565b95506040880135945060608801359350608088013560ff811681146124c1575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c908216806124f257607f821691505b602082108103612529577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b600181815b8085111561259657815f190482111561257c5761257c61252f565b8085161561258957918102915b93841c9390800290612561565b509250929050565b5f826125ac5750600161072a565b816125b857505f61072a565b81600181146125ce57600281146125d8576125f4565b600191505061072a565b60ff8411156125e9576125e961252f565b50506001821b61072a565b5060208310610133831016604e8410600b8410161715612617575081810a61072a565b612621838361255c565b805f19048211156126345761263461252f565b029392505050565b5f61074e60ff84168361259e565b808202811582820484141761072a5761072a61252f565b8082018082111561072a5761072a61252f565b8181038181111561072a5761072a61252f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826126c2576126c2612687565b500490565b5f61074e838361259e565b5f826126e0576126e0612687565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061272457612724612687565b8060ff8416069150509291505056fea264697066735822122063b4ff74f4ac8eae7fe69dd458de49628bcb8d1c7dd4e1660686d67349c1f55964736f6c63430008190033