[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "current", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "CannotRedeemMoreThanAllowedTreshold", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "current", "type": "address" } ], "name": "CannotUseCurrentAddress", "type": "error" }, { "inputs": [ { "internalType": "bool", "name": "current", "type": "bool" } ], "name": "CannotUseCurrentState", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "current", "type": "uint256" } ], "name": "CannotUseCurrentValue", "type": "error" }, { "inputs": [], "name": "CannotWithdrawNativeToken", "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": "string", "name": "limitType", "type": "string" }, { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "name": "ExceedLimit", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "invalid", "type": "address" } ], "name": "InvalidAddress", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "current", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "InvalidTotalFee", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "invalid", "type": "uint256" } ], "name": "InvalidValue", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "lockType", "type": "string" } ], "name": "Locked", "type": "error" }, { "inputs": [], "name": "OnlyWalletAddressAllowed", "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": "ReceiverCannotInitiateTransferEther", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "bool", "name": "currentState", "type": "bool" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "TradeAlreadyEnabled", "type": "error" }, { "inputs": [], "name": "TradeNotYetEnabled", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "cooldownEnd", "type": "uint256" }, { "internalType": "uint256", "name": "timeLeft", "type": "uint256" } ], "name": "WaitForCooldownTimer", "type": "error" }, { "inputs": [], "name": "WalletLimitRemoved", "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": "uint256", "name": "marketingFeeDistribution", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountToRedeem", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "AutoRedeem", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "lockType", "type": "string" }, { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "Lock", "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": "string", "name": "addressType", "type": "string" }, { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "oldStatus", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "newStatus", "type": "bool" }, { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "SetAddressState", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "TradeEnabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldMinSwap", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newMinSwap", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "UpdateMinSwap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "receiverType", "type": "string" }, { "indexed": false, "internalType": "address", "name": "oldReceiver", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newReceiver", "type": "address" }, { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "UpdateReceiver", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "stateType", "type": "string" }, { "indexed": false, "internalType": "bool", "name": "oldStatus", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "newStatus", "type": "bool" }, { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "UpdateState", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "valueType", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "UpdateValue", "type": "event" }, { "inputs": [], "name": "FEEDENOMINATOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "provider", "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": "uint256", "name": "amountToRedeem", "type": "uint256" } ], "name": "autoRedeem", "outputs": [], "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": "buyFee", "outputs": [ { "internalType": "uint256", "name": "marketing", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "circulatingSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collectedFee", "outputs": [ { "internalType": "uint256", "name": "marketing", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deployTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "enableTrading", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "inSwap", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isExcludeFromWalletLimits", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isExemptFee", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isFailsafeLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isFeeActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isFeeLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pair", "type": "address" } ], "name": "isPairLP", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isReceiverLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isSwapEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isWalletLimitActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isWalletLimitLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastTriggerZeusTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockFailsafe", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lockFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lockReceivers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lockWalletLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "marketingReceiver", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxWalletLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minSwap", "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": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pair", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "projectOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "redeemedFee", "outputs": [ { "internalType": "uint256", "name": "marketing", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "removeWalletLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "router", "outputs": [ { "internalType": "contract IRouter", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sellFee", "outputs": [ { "internalType": "uint256", "name": "marketing", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "lpPair", "type": "address" }, { "internalType": "bool", "name": "newStatus", "type": "bool" } ], "name": "setPairLP", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalFeeCollected", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalFeeRedeemed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalTriggerZeusBuyback", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tradeEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tradeStartBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tradeStartTime", "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": [], "name": "transferFee", "outputs": [ { "internalType": "uint256", "name": "marketing", "type": "uint256" } ], "stateMutability": "view", "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": "uint256", "name": "amount", "type": "uint256" } ], "name": "triggerZeusBuyback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMarketingFee", "type": "uint256" } ], "name": "updateBuyFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bool", "name": "newStatus", "type": "bool" } ], "name": "updateExcludeFromWalletLimits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bool", "name": "newStatus", "type": "bool" } ], "name": "updateExemptFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "newStatus", "type": "bool" } ], "name": "updateFeeActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newMarketingReceiver", "type": "address" } ], "name": "updateMarketingReceiver", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "updateMaxWalletLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMinSwap", "type": "uint256" } ], "name": "updateMinSwap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMarketingFee", "type": "uint256" } ], "name": "updateSellFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "newStatus", "type": "bool" } ], "name": "updateSwapEnabled", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMarketingFee", "type": "uint256" } ], "name": "updateTransferFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "newStatus", "type": "bool" } ], "name": "updateWalletLimitActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "wTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6103e860a0819052600181905560c0819052600255600060e0819052600381905561010081905260048190556101406040526101208190526005819055600680546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560088290556009829055600a829055600b829055600c829055600d9190915560c8600e55690a968163f0a57b400000600f5560108054821673f43ebe842ba855127a6095a477ec788783d70b0517905560118054909116733e9b306bb3a8ca6b7f9192f9b60da4a887b40dc717905560128054600160a01b600160e81b0319169055348015620000f457600080fd5b5033806200011d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200012881620003e6565b50601080546001600160a01b039081166000908152601660209081526040808320805460ff199081166001908117909255600654861685528285208054821683179055308086528386208054831684179055875487168652601790945282852080548216831790559284529220805490911690911790559054163314620001dc573360009081526017602090815260408083208054600160ff19918216811790925560169093529220805490911690911790555b426080526200020833620001f36012600a620006bc565b620002029062989680620006d4565b62000436565b6012805460ff60d81b1916600160d81b1790556006546040805163c45a015560e01b815290516001600160a01b039092169163c45a0155916004808201926020929091908290030181865afa15801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c9190620006ee565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003159190620006ee565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000363573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003899190620006ee565b601280546001600160a01b0319166001600160a01b0392831690811782556000908152601560209081526040808320805460ff1990811660019081179092559454909516835260179091529020805490911690911790556200072f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216620004625760405163ec442f0560e01b81526000600482015260240162000114565b620004706000838362000474565b5050565b6001600160a01b038316620004a357806007600082825462000497919062000719565b90915550620005179050565b6001600160a01b03831660009081526013602052604090205481811015620004f85760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000114565b6001600160a01b03841660009081526013602052604090209082900390555b6001600160a01b038216620005355760078054829003905562000554565b6001600160a01b03821660009081526013602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200059a91815260200190565b60405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005fe578160001904821115620005e257620005e2620005a7565b80851615620005f057918102915b93841c9390800290620005c2565b509250929050565b6000826200061757506001620006b6565b816200062657506000620006b6565b81600181146200063f57600281146200064a576200066a565b6001915050620006b6565b60ff8411156200065e576200065e620005a7565b50506001821b620006b6565b5060208310610133831016604e8410600b84101617156200068f575081810a620006b6565b6200069b8383620005bd565b8060001904821115620006b257620006b2620005a7565b0290505b92915050565b6000620006cd60ff84168362000606565b9392505050565b8082028115828204841417620006b657620006b6620005a7565b6000602082840312156200070157600080fd5b81516001600160a01b0381168114620006cd57600080fd5b80820180821115620006b657620006b6620005a7565b6080516135a0620007676000396000818161076f01528181611cb901528181611d4301528181611d770152611da501526135a06000f3fe6080604052600436106103d25760003560e01c80638a8c523c116101fd578063adc7b55611610118578063da4daf71116100ab578063e79f53e61161007a578063e79f53e614610b56578063e811f50a14610b77578063f2c4220e14610b8e578063f2fde38b14610ba4578063f887ea4014610bc457600080fd5b8063da4daf7114610ab8578063dd62ed3e14610ace578063e2924cd114610b14578063e43504da14610b3557600080fd5b8063cf9769fd116100e7578063cf9769fd14610a4a578063d621e81314610a5f578063d830678614610a80578063d941907114610aa157600080fd5b8063adc7b556146109ce578063b144896f146109fe578063b908de8c14610a13578063b9b2b5cd14610a3457600080fd5b8063a4475ce411610190578063a9059cbb1161015f578063a9059cbb1461096c578063ab28a04c1461098c578063ab366292146109a2578063acb2ad6f146109b757600080fd5b8063a4475ce4146108f7578063a5949bcf14610917578063a616162a14610937578063a8aa1b311461094c57600080fd5b80639358928b116101cc5780639358928b1461087d57806395d89b411461089257806397e1b9d3146108c05780639ffe0533146108d657600080fd5b80638a8c523c146107f65780638c095e051461080b5780638da5cb5b1461082b578063924de9b71461085d57600080fd5b80634324deae116102ed578063715018a6116102805780637a40624b1161024f5780637a40624b1461075d5780637e2b16d1146107915780638577a6d5146107a6578063891ff84a146107c657600080fd5b8063715018a6146106f257806371538eed1461070757806375fed3c71461071d578063779e80d51461073d57600080fd5b8063625dd605116102bc578063625dd6051461067c57806363a954921461069c57806366a88d96146106bc57806370a08231146106d257600080fd5b80634324deae1461060f578063467abe0a1461062f578063470624021461064f57806359cd90311461066657600080fd5b80632b14ca5611610365578063351a964d11610334578063351a964d1461058e578063355496ca146105af5780633bf31454146105cf5780633d6362d6146105ef57600080fd5b80632b14ca56146105245780632c735ef81461053b5780633125796614610551578063313ce5671461057257600080fd5b806318160ddd116103a157806318160ddd146104a55780631d933a4a146104c45780631f685bac146104e457806323b872dd1461050457600080fd5b806301295143146103de57806306fdde031461040057806308c4365014610445578063095ea7b31461048557600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103fe6103f93660046131ba565b610be4565b005b34801561040c57600080fd5b5060408051808201909152600a8152692234bb34b9b4b7b720a960b11b60208201525b60405161043c91906131f7565b60405180910390f35b34801561045157600080fd5b5061047561046036600461323f565b60156020526000908152604090205460ff1681565b604051901515815260200161043c565b34801561049157600080fd5b506104756104a036600461325c565b610e8f565b3480156104b157600080fd5b506007545b60405190815260200161043c565b3480156104d057600080fd5b506103fe6104df3660046131ba565b610ea9565b3480156104f057600080fd5b506103fe6104ff36600461325c565b610f7f565b34801561051057600080fd5b5061047561051f366004613288565b6111f4565b34801561053057600080fd5b506002546104b69081565b34801561054757600080fd5b506104b660085481565b34801561055d57600080fd5b5060125461047590600160a81b900460ff1681565b34801561057e57600080fd5b506040516012815260200161043c565b34801561059a57600080fd5b5060125461047590600160d81b900460ff1681565b3480156105bb57600080fd5b506103fe6105ca3660046132d7565b61121a565b3480156105db57600080fd5b506103fe6105ea366004613310565b6112f4565b3480156105fb57600080fd5b506103fe61060a36600461323f565b6113bd565b34801561061b57600080fd5b506103fe61062a3660046131ba565b6114f1565b34801561063b57600080fd5b506103fe61064a3660046131ba565b6115e8565b34801561065b57600080fd5b506001546104b69081565b34801561067257600080fd5b506104b6600f5481565b34801561068857600080fd5b506103fe6106973660046132d7565b6116b5565b3480156106a857600080fd5b506103fe6106b73660046131ba565b6118a2565b3480156106c857600080fd5b506104b6600e5481565b3480156106de57600080fd5b506104b66106ed36600461323f565b611907565b3480156106fe57600080fd5b506103fe611922565b34801561071357600080fd5b506104b6600d5481565b34801561072957600080fd5b506103fe6107383660046131ba565b611936565b34801561074957600080fd5b506103fe610758366004613310565b6119dc565b34801561076957600080fd5b506104b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561079d57600080fd5b506103fe611ab5565b3480156107b257600080fd5b506103fe6107c13660046131ba565b611b5a565b3480156107d257600080fd5b506104756107e136600461323f565b60166020526000908152604090205460ff1681565b34801561080257600080fd5b506103fe611c2c565b34801561081757600080fd5b506103fe6108263660046132d7565b611ee1565b34801561083757600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161043c565b34801561086957600080fd5b506103fe610878366004613310565b611fc4565b34801561088957600080fd5b506104b661205e565b34801561089e57600080fd5b506040805180820190915260058152642224ab20a960d91b602082015261042f565b3480156108cc57600080fd5b506104b6600b5481565b3480156108e257600080fd5b5060125461047590600160b01b900460ff1681565b34801561090357600080fd5b50601054610845906001600160a01b031681565b34801561092357600080fd5b50601154610845906001600160a01b031681565b34801561094357600080fd5b506103fe612091565b34801561095857600080fd5b50601254610845906001600160a01b031681565b34801561097857600080fd5b5061047561098736600461325c565b612136565b34801561099857600080fd5b506104b661271081565b3480156109ae57600080fd5b506103fe612144565b3480156109c357600080fd5b506003546104b69081565b3480156109da57600080fd5b506104756109e936600461323f565b60176020526000908152604090205460ff1681565b348015610a0a57600080fd5b506103fe6121d9565b348015610a1f57600080fd5b5060125461047590600160c01b900460ff1681565b348015610a4057600080fd5b506104b6600c5481565b348015610a5657600080fd5b506103fe612280565b348015610a6b57600080fd5b5060125461047590600160a01b900460ff1681565b348015610a8c57600080fd5b5060125461047590600160e01b900460ff1681565b348015610aad57600080fd5b506005546104b69081565b348015610ac457600080fd5b506104b6600a5481565b348015610ada57600080fd5b506104b6610ae936600461332d565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b348015610b2057600080fd5b5060125461047590600160c81b900460ff1681565b348015610b4157600080fd5b5060125461047590600160b81b900460ff1681565b348015610b6257600080fd5b5060125461047590600160d01b900460ff1681565b348015610b8357600080fd5b506004546104b69081565b348015610b9a57600080fd5b506104b660095481565b348015610bb057600080fd5b506103fe610bbf36600461323f565b61231f565b348015610bd057600080fd5b50600654610845906001600160a01b031681565b6012805460ff60e01b1916600160e01b179055612710610c0261205e565b610c0e906103e8613371565b610c189190613388565b811115610c685780612710610c2b61205e565b610c37906103e8613371565b610c419190613388565b60405163179b4ccd60e31b8152600481019290925260248201526044015b60405180910390fd5b600554600454600091610c7a916133aa565b90506000600d54600c54610c8e91906133aa565b9050600081610c9d8486613371565b610ca79190613388565b90508060056000016000828254610cbe91906133bd565b9250508190555083600d6000828254610cd791906133bd565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610d1157610d116133d0565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8e91906133e6565b81600181518110610da157610da16133d0565b6001600160a01b039283166020918202929092010152600654610dc791309116876123ca565b6040805183815260208101879052338183015242606082015290517fb933c1b294702108551eddf782a9c7d1a018b57f68ecf63bc59a1247daa19c309181900360800190a160065460115460405163791ac94760e01b81526001600160a01b039283169263791ac94792610e4992879260009288929116904290600401613447565b600060405180830381600087803b158015610e6357600080fd5b505af1158015610e77573d6000803e3d6000fd5b50506012805460ff60e01b1916905550505050505050565b600033610e9d8185856123ca565b60019150505b92915050565b610eb16123dc565b60125460408051808201909152600381526246656560e81b6020820152610ee291600160c01b900460ff1690612467565b6105dc811115610f105760405163211a907760e11b8152600481018290526105dc6024820152604401610c5f565b610f1f8160026000015461248c565b60028054908290556040805160a08082526007908201526673656c6c46656560c81b60c08201526020810183905290810183905233606082015242608082015260008051602061352b8339815191529060e0015b60405180910390a15050565b60115481906001600160a01b039081169030908516036110e8576000600d54600c54610fab91906133aa565b9050600081610fb930611907565b610fc391906133aa565b905080851180610fdb5750610fd730611907565b8210155b15610ff9576040516315ea636560e31b815260040160405180910390fd5b84600003611005578093505b60105460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018690529087169063a9059cbb906044016020604051808303816000875af1158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190613483565b6110e15760405162461bcd60e51b815260206004820152603060248201527f5769746864726177546f6b656e733a205472616e73666572207472616e73616360448201526f3a34b7b71036b4b3b43a103330b4b61760811b6064820152608401610c5f565b50506111ee565b6001600160a01b0384166111675782600003611102574791505b6001600160a01b038116330361112b5760405163a5eb0da960e01b815260040160405180910390fd5b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611161573d6000803e3d6000fd5b506111ee565b826000036111da576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156111b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d791906134a0565b91505b6111ee6001600160a01b03851682846124af565b50505050565b600033611202858285612501565b61120d858585612579565b60019150505b9392505050565b6112226123dc565b6001600160a01b03821660009081526016602052604090205461124990829060ff166127dd565b6001600160a01b038216600081815260166020908152604091829020805485151560ff1982168117909255835160c0808252600b908201526a69734578656d707446656560a81b60e08201529283019490945260ff9093168015159282019290925260608101929092523360808301524260a0830152907f59efce2bd92f91881f8f3ffb8c70709a05ae83006301d26f9fe6170f3e690aea90610100015b60405180910390a1505050565b6112fc6123dc565b60125460408051808201909152600381526246656560e81b602082015261132d91600160c01b900460ff1690612467565b601254611345908290600160b81b900460ff166127dd565b60128054821515600160b81b81810260ff60b81b198416179093556040805160a0808252600b908201526a697346656541637469766560a81b60c082015260ff949093049390931680151560208401529282015233606082015242608082015260008051602061354b8339815191529060e001610f73565b6113c56123dc565b6012546040805180820190915260088152672932b1b2b4bb32b960c11b60208201526113fb91600160c81b900460ff1690612467565b6011546114129082906001600160a01b0316612804565b6001600160a01b03811661143c57604051634726455360e11b815260006004820152602401610c5f565b6001600160a01b0381163b156114655760405163259f1ec560e01b815260040160405180910390fd5b601180546001600160a01b031981166001600160a01b0384811691821784556040805160a08082528101959095527036b0b935b2ba34b733a932b1b2b4bb32b960791b60c086015292166020840181905291830152336060830152426080830152907ff7df6bc5c0f9735c300a374247b60dcacf1942b6031785957e762d77977ed4209060e001610f73565b6114f96123dc565b60c88110156115455760408051639bc7434d60e01b81526004810191909152600e60448201526d13585e15d85b1b195d131a5b5a5d60921b606482015260c86024820152608401610c5f565b60125460408051808201909152600b81526a15d85b1b195d131a5b5a5d60aa1b602082015261157e91600160a81b900460ff1690612467565b61158a81600e5461248c565b600e80548282556040805160a08082528101939093526d1b585e15d85b1b195d131a5b5a5d60921b60c08401526020830182905282018390523360608301524260808301529060008051602061352b8339815191529060e001610f73565b6115f06123dc565b60125460408051808201909152600381526246656560e81b602082015261162191600160c01b900460ff1690612467565b6105dc81111561164f5760405163211a907760e11b8152600481018290526105dc6024820152604401610c5f565b61165e8160016000015461248c565b60018054908290556040805160a08082526006908201526562757946656560d01b60c08201526020810183905290810183905233606082015242608082015260008051602061352b8339815191529060e001610f73565b6116bd6123dc565b6001600160a01b0382166000908152601560205260409020546116e490829060ff166127dd565b306001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175091906133e6565b6001600160a01b0316141580156117da5750306001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ce91906133e6565b6001600160a01b031614155b1561180357604051634726455360e11b81526001600160a01b0383166004820152602401610c5f565b6001600160a01b038216600081815260156020908152604091829020805485151560ff1982168117909255835160c08082526008908201526706973506169724c560c41b60e08201529283019490945260ff9093168015159282019290925260608101929092523360808301524260a0830152907f59efce2bd92f91881f8f3ffb8c70709a05ae83006301d26f9fe6170f3e690aea90610100016112e7565b6118aa612841565b674563918244f400008111156118dd5760405163181c9d0b60e21b8152674563918244f400006004820152602401610c5f565b80600a60008282546118ef91906133bd565b909155505042600b556119048161dead61287d565b50565b6001600160a01b031660009081526013602052604090205490565b61192a612841565b6119346000612a16565b565b61193e6123dc565b61271061194961205e565b611955906103e8613371565b61195f9190613388565b8111156119825760405163181c9d0b60e21b815260048101829052602401610c5f565b61198e81600f5461248c565b600f805490829055604080518281526020810184905233918101919091524260608201527f9a9f4704ac409fe039e92a996e415370980275aaff2992936ed5b432886c55c590608001610f73565b6119e46123dc565b60125460408051808201909152600b81526a15d85b1b195d131a5b5a5d60aa1b6020820152611a1d91600160a81b900460ff1690612467565b601254611a35908290600160b01b900460ff166127dd565b60128054821515600160b01b81810260ff60b01b198416179093556040805160a080825260139082015272697357616c6c65744c696d697441637469766560681b60c082015260ff949093049390931680151560208401529282015233606082015242608082015260008051602061354b8339815191529060e001610f73565b611abd6123dc565b6012546040805180820190915260088152674661696c7361666560c01b6020820152611af391600160d01b900460ff1690612467565b6012805460ff60d01b1916600160d01b1790556040805160608082526010908201526f1a5cd1985a5b1cd85999531bd8dad95960821b6080820152336020820152429181019190915260008051602061350b8339815191529060a0015b60405180910390a1565b611b626123dc565b60125460408051808201909152600381526246656560e81b6020820152611b9391600160c01b900460ff1690612467565b6105dc811115611bc15760405163211a907760e11b8152600481018290526105dc6024820152604401610c5f565b611bd08160036000015461248c565b60038054908290556040805160a0808252600b908201526a7472616e7366657246656560a81b60c08201526020810183905290810183905233606082015242608082015260008051602061352b8339815191529060e001610f73565b611c34612841565b601254600160a01b900460ff1615611c785760125460085460405163e39c1e8760e01b8152600160a01b90920460ff16151560048301526024820152604401610c5f565b6000546001600160a01b031615801590611cac575033611ca06000546001600160a01b031690565b6001600160a01b031614155b8015611ce3575042611ce17f000000000000000000000000000000000000000000000000000000000000000062278d006133bd565b115b15611d035760405163118cdaa760e01b8152336004820152602401610c5f565b6000546001600160a01b0316158015611d36575033611d2a6000546001600160a01b031690565b6001600160a01b031614155b8015611d6d575042611d6b7f00000000000000000000000000000000000000000000000000000000000000006213c6806133bd565b115b15611df957611d9f7f00000000000000000000000000000000000000000000000000000000000000006213c6806133bd565b42611dcd7f00000000000000000000000000000000000000000000000000000000000000006213c6806133bd565b611dd791906133aa565b604051636ddcad9f60e01b815260048101929092526024820152604401610c5f565b601254600160b01b900460ff16611e1e576012805460ff60b01b1916600160b01b1790555b601254600160b81b900460ff16611e43576012805460ff60b81b1916600160b81b1790555b601254600160d81b900460ff16611e68576012805460ff60d81b1916600160d81b1790555b601254600160b01b900460ff16611e8d576012805460ff60b01b1916600160b01b1790555b6012805460ff60a01b1916600160a01b179055426008819055436009556040805133815260208101929092527f8b70aa279b24da71d8a874fa0b0ee8f1a587c4fb32b80d87e95cdbdae01b7b4f9101611b50565b611ee96123dc565b6001600160a01b038216600090815260176020526040902054611f1090829060ff166127dd565b6001600160a01b038216600081815260176020908152604091829020805485151560ff1982168117909255835160c08082526019908201527f69734578636c75646546726f6d57616c6c65744c696d6974730000000000000060e08201529283019490945260ff9093168015159282019290925260608101929092523360808301524260a0830152907f59efce2bd92f91881f8f3ffb8c70709a05ae83006301d26f9fe6170f3e690aea90610100016112e7565b611fcc6123dc565b601254611fe4908290600160d81b900460ff166127dd565b60128054821515600160d81b81810260ff60d81b198416179093556040805160a0808252600d908201526c1a5cd4ddd85c115b98589b1959609a1b60c082015260ff949093049390931680151560208401529282015233606082015242608082015260008051602061354b8339815191529060e001610f73565b600061206a6000611907565b61207561dead611907565b60075461208291906133aa565b61208c91906133aa565b905090565b6120996123dc565b60125460408051808201909152600b81526a15d85b1b195d131a5b5a5d60aa1b60208201526120d291600160a81b900460ff1690612467565b6012805460ff60a81b1916600160a81b179055604080516060808252601390820152721a5cd5d85b1b195d131a5b5a5d131bd8dad959606a1b6080820152336020820152429181019190915260008051602061350b8339815191529060a001611b50565b600033610e9d818585612579565b61214c6123dc565b60125460408051808201909152600381526246656560e81b602082015261217d91600160c01b900460ff1690612467565b6012805460ff60c01b1916600160c01b179055604080516060808252600b908201526a1a5cd19959531bd8dad95960aa1b6080820152336020820152429181019190915260008051602061350b8339815191529060a001611b50565b6121e16123dc565b601254600160b01b900460ff1661220b5760405163019601bd60e41b815260040160405180910390fd5b612710600e556012805461ffff60a81b1916600160a81b1790556040805160a0808252600f908201526e1a5cd5d85b1b195d131a5b5a5d1959608a1b60c08201526001602082015260009181019190915233606082015242608082015260008051602061354b8339815191529060e001611b50565b6122886123dc565b6012546040805180820190915260088152672932b1b2b4bb32b960c11b60208201526122be91600160c81b900460ff1690612467565b6012805460ff60c81b1916600160c81b1790556040805160608082526010908201526f1a5cd49958d95a5d995c931bd8dad95960821b6080820152336020820152429181019190915260008051602061350b8339815191529060a001611b50565b612327612841565b6000546001600160a01b03166001600160a01b0316816001600160a01b03160361236f5760405163a936636960e01b81526001600160a01b0382166004820152602401610c5f565b61deac196001600160a01b038216016123a657604051634726455360e11b81526001600160a01b0382166004820152602401610c5f565b601080546001600160a01b0319166001600160a01b03831617905561190481612a66565b6123d78383836001612aa1565b505050565b6012546040805180820190915260088152674661696c7361666560c01b602082015261241291600160d01b900460ff1690612467565b6010546001600160a01b0316331480159061244757503361243b6000546001600160a01b031690565b6001600160a01b031614155b156119345760405163118cdaa760e01b8152336004820152602401610c5f565b811561248857806040516354f3dc5160e11b8152600401610c5f91906131f7565b5050565b8082036124885760405163657e16cf60e01b815260048101839052602401610c5f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526123d7908490612b76565b6001600160a01b0383811660009081526014602090815260408083209386168352929052205460001981146111ee578181101561256a57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610c5f565b6111ee84848484036000612aa1565b6001600160a01b0383166125a357604051634b637e8f60e11b815260006004820152602401610c5f565b6001600160a01b0382166125cd5760405163ec442f0560e01b815260006004820152602401610c5f565b601254600160a01b900460ff1661263e576001600160a01b03831660009081526016602052604090205460ff1615801561262057506001600160a01b03821660009081526016602052604090205460ff16155b1561263e5760405163ab9827ff60e01b815260040160405180910390fd5b601254600160e01b900460ff168061266e57506001600160a01b03831660009081526016602052604090205460ff165b1561267e576123d7838383612bd9565b6012546001600160a01b038481169116148015906126a55750601254600160d81b900460ff165b80156126c25750600f54600d54600c546126bf91906133aa565b10155b80156126d85750600f546126d530611907565b10155b1561274a57600f54601254600160d01b900460ff16801561270257506000546001600160a01b0316155b1561273f57600061271061271461205e565b61271f90600a613371565b6127299190613388565b905081811115612739578161273b565b805b9150505b61274881610be4565b505b6012548190600160b81b900460ff16801561277e57506001600160a01b03841660009081526016602052604090205460ff16155b80156127a357506001600160a01b03831660009081526016602052604090205460ff16155b156127b6576127b3848484612d03565b90505b601254600160b01b900460ff16156127d2576127d28184612e02565b6111ee848483612bd9565b801515821515036124885760405162a7e72d60e41b81528215156004820152602401610c5f565b806001600160a01b0316826001600160a01b0316036124885760405163a936636960e01b81526001600160a01b0383166004820152602401610c5f565b336128546000546001600160a01b031690565b6001600160a01b0316146119345760405163118cdaa760e01b8152336004820152602401610c5f565b6012805460ff60e01b1916600160e01b17905561deac1933016128b757604051634726455360e11b815261dead6004820152602401610c5f565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612921573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294591906133e6565b81600081518110612958576129586133d0565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061298c5761298c6133d0565b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959085906129d2906000908690889042906004016134b9565b6000604051808303818588803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b50506012805460ff60e01b19169055505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612a6e612841565b6001600160a01b038116612a9857604051631e4fbdf760e01b815260006004820152602401610c5f565b61190481612a16565b6001600160a01b038416612acb5760405163e602df0560e01b815260006004820152602401610c5f565b6001600160a01b038316612af557604051634a1406b160e11b815260006004820152602401610c5f565b6001600160a01b03808516600090815260146020908152604080832093871683529290522082905580156111ee57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612b6891815260200190565b60405180910390a350505050565b6000612b8b6001600160a01b03841683612ec3565b90508051600014158015612bb0575080806020019051810190612bae9190613483565b155b156123d757604051635274afe760e01b81526001600160a01b0384166004820152602401610c5f565b6001600160a01b038316612c04578060076000828254612bf991906133bd565b90915550612c769050565b6001600160a01b03831660009081526013602052604090205481811015612c575760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610c5f565b6001600160a01b03841660009081526013602052604090209082900390555b6001600160a01b038216612c9257600780548290039055612cb1565b6001600160a01b03821660009081526013602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612cf691815260200190565b60405180910390a3505050565b6012805460ff60e01b1916600160e01b1790556001600160a01b03831660009081526015602052604081205460ff168015612d3f575060015415155b15612d5557612d4e8483612ed1565b9050612dee565b6001600160a01b03831660009081526015602052604090205460ff168015612d7e575060025415155b15612d8d57612d4e8483612f02565b6001600160a01b03841660009081526015602052604090205460ff16158015612dcf57506001600160a01b03831660009081526015602052604090205460ff16155b8015612ddc575060035415155b15612deb57612d4e8483612f33565b50805b6012805460ff60e01b191690559392505050565b600082612e0e83611907565b612e1891906133bd565b90506000612710600e54612e2a61205e565b612e349190613371565b612e3e9190613388565b601254909150600160b01b900460ff168015612e7357506001600160a01b03831660009081526017602052604090205460ff16155b8015612e7e57508082115b156111ee5760408051639bc7434d60e01b81526004810191909152600b60448201526a15d85b1b195d131a5b5a5d60aa1b606482015260248101829052608401610c5f565b606061121383836000612f64565b6012805460ff60e01b1916600160e01b17905560408051602081019091526001548152600090612dee908484613001565b6012805460ff60e01b1916600160e01b17905560408051602081019091526002548152600090612dee908484613001565b6012805460ff60e01b1916600160e01b17905560408051602081019091526003548152600090612dee908484613001565b606081471015612f895760405163cd78605960e01b8152306004820152602401610c5f565b600080856001600160a01b03168486604051612fa591906134ee565b60006040518083038185875af1925050503d8060008114612fe2576040519150601f19603f3d011682016040523d82523d6000602084013e612fe7565b606091505b5091509150612ff7868383613085565b9695505050505050565b6012805460ff60e01b1916600160e01b1790558251600954600091906130289060026133bd565b431161303357506126ac5b60006127106130428386613371565b61304c9190613388565b9050600061305a82866133aa565b9050811561306e5761306e878784866130e1565b6012805460ff60e01b191690559695505050505050565b60608261309a576130958261313a565b611213565b81511580156130b157506001600160a01b0384163b155b156130da57604051639996b31560e01b81526001600160a01b0385166004820152602401610c5f565b5080611213565b6012805460ff60e01b1916600160e01b179055835160009082906131059085613371565b61310f9190613388565b905061311b8184613163565b613126843085612bd9565b50506012805460ff60e01b19169055505050565b80511561314a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6012805460ff60e01b1916600160e01b1790556004805483919060009061318b9084906133bd565b9250508190555080600c60008282546131a491906133bd565b90915550506012805460ff60e01b191690555050565b6000602082840312156131cc57600080fd5b5035919050565b60005b838110156131ee5781810151838201526020016131d6565b50506000910152565b60208152600082518060208401526132168160408501602087016131d3565b601f01601f19169190910160400192915050565b6001600160a01b038116811461190457600080fd5b60006020828403121561325157600080fd5b81356112138161322a565b6000806040838503121561326f57600080fd5b823561327a8161322a565b946020939093013593505050565b60008060006060848603121561329d57600080fd5b83356132a88161322a565b925060208401356132b88161322a565b929592945050506040919091013590565b801515811461190457600080fd5b600080604083850312156132ea57600080fd5b82356132f58161322a565b91506020830135613305816132c9565b809150509250929050565b60006020828403121561332257600080fd5b8135611213816132c9565b6000806040838503121561334057600080fd5b823561334b8161322a565b915060208301356133058161322a565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ea357610ea361335b565b6000826133a557634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610ea357610ea361335b565b80820180821115610ea357610ea361335b565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156133f857600080fd5b81516112138161322a565b600081518084526020808501945080840160005b8381101561343c5781516001600160a01b031687529582019590820190600101613417565b509495945050505050565b85815284602082015260a06040820152600061346660a0830186613403565b6001600160a01b0394909416606083015250608001529392505050565b60006020828403121561349557600080fd5b8151611213816132c9565b6000602082840312156134b257600080fd5b5051919050565b8481526080602082015260006134d26080830186613403565b6001600160a01b03949094166040830152506060015292915050565b600082516135008184602087016131d3565b919091019291505056fe611312486a6540001c2b69bc849753e64cdefc853bbbc7a576d987821aec28b42dc908b86b38cfca773aadc8861ff9f24d2b644be4f8a6c2024cd71e120e5ef5da986e332f97963bfa4bb220bda255b40296aa680cff592b805c2deb80b1dbf3a2646970667358221220d5756756294cee5b4320f152a022906e8cce523bdf88ef164589180fc849504c64736f6c63430008120033