Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
100,000,000.00 SCANS

Holders:
1
Profile Summary
Blockchain:
Ethereum (1)


Decimals:
18
Contract Source Code Verified (Partial Match)
Contract Name:
ZeroXScans

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Created At:
Mon, 29 Jul 2024 06:21:23 GMT
ZeroXScans.sol
ZeroXScans.sol
ZeroXScans.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "payable",
    "type": "constructor"
  },
  {
    "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": "amountCurrency",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountTokens",
        "type": "uint256"
      }
    ],
    "name": "AutoLiquify",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bool",
        "name": "enabled",
        "type": "bool"
      }
    ],
    "name": "ContractSwapEnabledUpdated",
    "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"
  },
  {
    "inputs": [],
    "name": "DEAD",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "_hasLiqBeenAdded",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "_ratios",
    "outputs": [
      {
        "internalType": "uint16",
        "name": "marketing",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "development",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "sales",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "manualBuybackLP",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "team",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "totalSwap",
        "type": "uint16"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "_taxRates",
    "outputs": [
      {
        "internalType": "uint16",
        "name": "buyFee",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "sellFee",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "transferFee",
        "type": "uint16"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "_taxWallets",
    "outputs": [
      {
        "internalType": "address payable",
        "name": "marketing",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "development",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "sales",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "manualBuybackLP",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "team",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "holder",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "approveContractContingency",
    "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": "blacklistRenounced",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractSwapEnabled",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "dexRouter",
    "outputs": [
      {
        "internalType": "contract IRouter02",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "enableTrading",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCirculatingSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getMaxTX",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getMaxWallet",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getOwner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "priceImpactInHundreds",
        "type": "uint256"
      }
    ],
    "name": "getTokenAmountAtPriceImpact",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "isBlacklisted",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "isExcludedFromFees",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "isExcludedFromLimits",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "isExcludedFromProtection",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "launchStamp",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "lockTaxes",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "lpPair",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxBuyTaxes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxSellTaxes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxTransferTaxes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "accounts",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "amounts",
        "type": "uint256[]"
      }
    ],
    "name": "multiSendTokens",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "piContractSwapsEnabled",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "piSwapPercent",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "removeBlacklisted",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "removeSniper",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceBlacklist",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "enabled",
        "type": "bool"
      }
    ],
    "name": "setBlacklistEnabled",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address[]",
        "name": "accounts",
        "type": "address[]"
      },
      {
        "internalType": "bool",
        "name": "enabled",
        "type": "bool"
      }
    ],
    "name": "setBlacklistEnabledMultiple",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "swapEnabled",
        "type": "bool"
      },
      {
        "internalType": "bool",
        "name": "priceImpactSwapEnabled",
        "type": "bool"
      }
    ],
    "name": "setContractSwapEnabled",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "enabled",
        "type": "bool"
      }
    ],
    "name": "setExcludedFromFees",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "enabled",
        "type": "bool"
      }
    ],
    "name": "setExcludedFromLimits",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "enabled",
        "type": "bool"
      }
    ],
    "name": "setExcludedFromProtection",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "init",
        "type": "address"
      }
    ],
    "name": "setInitializer",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "pair",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "enabled",
        "type": "bool"
      }
    ],
    "name": "setLpPair",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "percent",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "divisor",
        "type": "uint256"
      }
    ],
    "name": "setMaxTxPercent",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "percent",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "divisor",
        "type": "uint256"
      }
    ],
    "name": "setMaxWalletSize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newRouter",
        "type": "address"
      }
    ],
    "name": "setNewRouter",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "priceImpactSwapPercent",
        "type": "uint256"
      }
    ],
    "name": "setPriceImpactSwapAmount",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "_antiSnipe",
        "type": "bool"
      },
      {
        "internalType": "bool",
        "name": "_antiBlock",
        "type": "bool"
      }
    ],
    "name": "setProtectionSettings",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "marketing",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "development",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "sales",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "manualBuybackLP",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "team",
        "type": "uint16"
      }
    ],
    "name": "setRatios",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "thresholdPercent",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "thresholdDivisor",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amountPercent",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amountDivisor",
        "type": "uint256"
      }
    ],
    "name": "setSwapSettings",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "buyFee",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "sellFee",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "transferFee",
        "type": "uint16"
      }
    ],
    "name": "setTaxes",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address payable",
        "name": "marketing",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "development",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "sales",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "manualBuybackLP",
        "type": "address"
      },
      {
        "internalType": "address payable",
        "name": "team",
        "type": "address"
      }
    ],
    "name": "setWallets",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "swapAmount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "swapThreshold",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "sweepContingency",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "sweepExternalTokens",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "taxesAreLocked",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "tradingEnabled",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwner",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]


Contract Creation Code
5f60028190556107d0608081905260a05260c0526008805465ffffffffffff19166307d007d0179055600160e081905261010081905261012081905261014081905261016052600561018052600980546a05000100010001000100016001600160601b03199091161790556102406040527337eed540ff1c1be591cd31d206d35d82178ccf8d6101a081905273883ff095c6bdcae0cddebf360286268858b1fc1c6101c081905273183fc2f0f7b5bbb0006d2e7089f15151902a639e6101e081905273d20c7eec5bfa0bbf9c9731c3c8645e0f7c1a16bb61020081905273fb36163c602978b2144ea2dfb258b1dd81a21e17610220819052600c80546001600160a01b03199081169096179055600d80548616909417909355600e80548516909217909155600f805484169091179055601080549092161790556011805461ff0019169055600a60158190556127109061015b90601290610481565b610169906305f5e100610496565b610174906019610496565b61017e91906104ad565b6016556103e86101906012600a610481565b61019e906305f5e100610496565b6101a9906005610496565b6101b391906104ad565b6017556018805461ffff19169055601a80546001600160a81b03191661010033021790556101e36012600a610481565b6101f1906305f5e100610496565b601a80546001600160a01b036101009182900481165f9081526020819052604081209490945591540416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6102496012600a610481565b610257906305f5e100610496565b60405190815260200160405180910390a3601a80546001600160a01b036101009182900481165f908152600660208181526040808420805460ff19908116600190811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805482168317905597549690960490941683526004815292822080548616851790559091527f9f0450866e340883c5637ebf25d629ea9e0ea06bf9caa3748b581238b1bc2bb980548416831790557f9b00c99845a242ceea732a2478bee8e7b057d22892cafbdc32d0e607c88ddea0805484168317905573dba68f07d1b7ca219f78ae8582c213d975c25caf90527fab9d0a02af394b8961be3a9588d91fbbf70984385fd8d3031385f593b62a4bf980549092161790556104cc565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156103d7578085048111156103bb576103bb610388565b60018416156103c957908102905b60019390931c9280026103a0565b935093915050565b5f826103ed5750600161047b565b816103f957505f61047b565b816001811461040f576002811461041957610435565b600191505061047b565b60ff84111561042a5761042a610388565b50506001821b61047b565b5060208310610133831016604e8410600b8410161715610458575081810a61047b565b6104645f19848461039c565b805f190482111561047757610477610388565b0290505b92915050565b5f61048f60ff8416836103df565b9392505050565b808202811582820484141761047b5761047b610388565b5f826104c757634e487b7160e01b5f52601260045260245ffd5b500490565b614610806104d95f395ff3fe6080604052600436106103c1575f3560e01c8063590ffdce116101f4578063ab558e4d11610113578063eafb5a3c116100a8578063f94aa1b411610078578063f94aa1b414610b85578063fb78680d14610bf7578063fdb78c0e14610c16578063fe575a8714610c34578063feadde9c14610c53575f80fd5b8063eafb5a3c14610b14578063ee5d9c2d14610b33578063eec2744e14610b47578063f08f43a214610b66575f80fd5b8063bfc2fc35116100e3578063bfc2fc3514610a08578063c6a276c214610a27578063cf84770614610a46578063dd62ed3e14610ad0575f80fd5b8063ab558e4d146109d0578063b1b08f711461063f578063b3d514fb1461063f578063b7df8b36146109ef575f80fd5b806378648edf116101895780638a63bd9b116101595780638a63bd9b1461095c5780638a8c523c1461097057806395d89b4114610984578063a9059cbb146109b1575f80fd5b806378648edf146108e857806380c581d1146108fc578063825287911461091b578063893d20e81461093a575f80fd5b80635f189361116101c45780635f1893611461088d5780636ebd0078146108a157806370a08231146108b5578063715018a6146108d4575f80fd5b8063590ffdce146108035780635a6f0918146108225780635c24b074146108375780635cce86cd14610856575f80fd5b80632b112e49116102e05780633f3cf56c116102755780634e718e48116102455780634e718e48146107705780634fb2e45d1461078f5780634fbee193146107ae57806350a8e016146107e5575f80fd5b80633f3cf56c146106fa578063452ed4f1146107195780634ada218b146107385780634bbb93eb14610751575f80fd5b806332cde664116102b057806332cde6641461068457806333251a0b146106a357806336fddb04146106c25780633dc599ff146106e1575f80fd5b80632b112e491461062b5780632b28fc7a1461063f5780632e8fa82114610654578063313ce56714610669575f80fd5b8063095ea7b31161035657806323b872dd1161032657806323b872dd146105b957806326003957146105d85780632610eaca146105f75780632857775114610616575f80fd5b8063095ea7b31461053b5780630dcbcf1c1461055a5780630fa604e41461059157806318160ddd146105a5575f80fd5b8063069d955f11610391578063069d955f1461046157806306fdde03146104b65780630758d924146104ee57806307dd79e014610512575f80fd5b806303fd2a45146103cc5780630445b667146103fe578063044df7261461042157806305bbedb614610442575f80fd5b366103c857005b5f80fd5b3480156103d7575f80fd5b506103e161dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610409575f80fd5b5061041360125481565b6040519081526020016103f5565b34801561042c575f80fd5b5061044061043b366004613d11565b610c72565b005b34801561044d575f80fd5b5061044061045c366004613e37565b610d16565b34801561046c575f80fd5b506008546104919061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103f5565b3480156104c1575f80fd5b5060408051808201909152600781526630785363616e7360c81b60208201525b6040516103f59190613e7b565b3480156104f9575f80fd5b50600a546103e19061010090046001600160a01b031681565b34801561051d575f80fd5b50600a5461052b9060ff1681565b60405190151581526020016103f5565b348015610546575f80fd5b5061052b610555366004613eb0565b610de5565b348015610565575f80fd5b5061052b610574366004613eda565b6001600160a01b03165f9081526005602052604090205460ff1690565b34801561059c575f80fd5b50610413610dfb565b3480156105b0575f80fd5b50610413610e1a565b3480156105c4575f80fd5b5061052b6105d3366004613ef5565b610e35565b3480156105e3575f80fd5b506104406105f2366004613f33565b610eaa565b348015610602575f80fd5b50610440610611366004613f53565b610fcd565b348015610621575f80fd5b5061041360155481565b348015610636575f80fd5b5061041361114d565b34801561064a575f80fd5b50610413610bb881565b34801561065f575f80fd5b5061041360135481565b348015610674575f80fd5b50604051601281526020016103f5565b34801561068f575f80fd5b5061044061069e366004614027565b611190565b3480156106ae575f80fd5b506104406106bd366004613eda565b6112bf565b3480156106cd575f80fd5b506104406106dc366004614067565b611353565b3480156106ec575f80fd5b50601a5461052b9060ff1681565b348015610705575f80fd5b50610440610714366004613f33565b6113ac565b348015610724575f80fd5b50600b546103e1906001600160a01b031681565b348015610743575f80fd5b5060185461052b9060ff1681565b34801561075c575f80fd5b5061041361076b366004614083565b6114e8565b34801561077b575f80fd5b5061044061078a366004614083565b611519565b34801561079a575f80fd5b506104406107a9366004613eda565b611597565b3480156107b9575f80fd5b5061052b6107c8366004613eda565b6001600160a01b03165f9081526006602052604090205460ff1690565b3480156107f0575f80fd5b5060185461052b90610100900460ff1681565b34801561080e575f80fd5b5061044061081d366004614067565b6116d9565b34801561082d575f80fd5b5061041360195481565b348015610842575f80fd5b50610440610851366004613eda565b611732565b348015610861575f80fd5b5061052b610870366004613eda565b6001600160a01b03165f9081526007602052604090205460ff1690565b348015610898575f80fd5b506104406118d8565b3480156108ac575f80fd5b5061041361195e565b3480156108c0575f80fd5b506104136108cf366004613eda565b611978565b3480156108df575f80fd5b50610440611992565b3480156108f3575f80fd5b50610440611a98565b348015610907575f80fd5b50610440610916366004614067565b611ad6565b348015610926575f80fd5b5061044061093536600461409a565b611c85565b348015610945575f80fd5b50601a5461010090046001600160a01b03166103e1565b348015610967575f80fd5b5061052b611dba565b34801561097b575f80fd5b50610440611e0f565b34801561098f575f80fd5b506040805180820190915260058152645343414e5360d81b60208201526104e1565b3480156109bc575f80fd5b5061052b6109cb366004613eb0565b61203a565b3480156109db575f80fd5b506104406109ea366004613eda565b612050565b3480156109fa575f80fd5b5060145461052b9060ff1681565b348015610a13575f80fd5b50610440610a22366004613d11565b6121d0565b348015610a32575f80fd5b50610440610a41366004613eda565b61225e565b348015610a51575f80fd5b50600954610a939061ffff808216916201000081048216916401000000008204811691600160301b8104821691600160401b8204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103f5565b348015610adb575f80fd5b50610413610aea366004614107565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b348015610b1f575f80fd5b50610440610b2e366004613eda565b6122c6565b348015610b3e575f80fd5b5061044061268f565b348015610b52575f80fd5b50610440610b61366004614067565b612753565b348015610b71575f80fd5b50610440610b80366004614133565b6127e6565b348015610b90575f80fd5b50600c54600d54600e54600f54601054610bbd946001600160a01b03908116948116938116928116911685565b604080516001600160a01b03968716815294861660208601529285169284019290925283166060830152909116608082015260a0016103f5565b348015610c02575f80fd5b50610440610c11366004614194565b61294c565b348015610c21575f80fd5b5060115461052b90610100900460ff1681565b348015610c3f575f80fd5b5061052b610c4e366004613eda565b612b64565b348015610c5e575f80fd5b50610440610c6d366004614067565b612bd6565b601a5461010090046001600160a01b03163314610caa5760405162461bcd60e51b8152600401610ca1906141c3565b60405180910390fd5b60185460405163efbdbabd60e01b815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b5f604051808303815f87803b158015610cfc575f80fd5b505af1158015610d0e573d5f803e3d5ffd5b505050505050565b601a5461010090046001600160a01b03163314610d455760405162461bcd60e51b8152600401610ca1906141c3565b606482511115610d8b5760405162461bcd60e51b81526020600482015260116024820152702a37b79036b0b73c9030ba1037b731b29760791b6044820152606401610ca1565b601a5460ff1615610dae5760405162461bcd60e51b8152600401610ca1906141ee565b6018546040516302ddf6db60e11b8152620100009091046001600160a01b0316906305bbedb690610ce59085908590600401614286565b5f610df1338484612c2f565b5060015b92915050565b5f610e086012600a6143a0565b601754610e1591906143ae565b905090565b5f610e276012600a6143a0565b610e15906305f5e1006143cd565b6001600160a01b0383165f9081526003602090815260408083203384529091528120545f1914610e97576001600160a01b0384165f90815260036020908152604080832033845290915281208054849290610e919084906143e4565b90915550505b610ea2848484612d27565b949350505050565b601a5461010090046001600160a01b03163314610ed95760405162461bcd60e51b8152600401610ca1906141c3565b6064610ee76012600a6143a0565b610ef5906305f5e1006143cd565b610eff91906143ae565b8183610f0d6012600a6143a0565b610f1b906305f5e1006143cd565b610f2591906143cd565b610f2f91906143ae565b1015610f965760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b6064820152608401610ca1565b8082610fa46012600a6143a0565b610fb2906305f5e1006143cd565b610fbc91906143cd565b610fc691906143ae565b6017555050565b601a5461010090046001600160a01b03163314610ffc5760405162461bcd60e51b8152600401610ca1906141c3565b80518251146110455760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b6044820152606401610ca1565b5f5b82518161ffff161015611148576110606012600a6143a0565b828261ffff1681518110611076576110766143f7565b602002602001015161108891906143cd565b61109133611978565b10156110d45760405162461bcd60e51b81526020600482015260126024820152712737ba1032b737bab3b4103a37b5b2b7399760711b6044820152606401610ca1565b61113533848361ffff16815181106110ee576110ee6143f7565b60200260200101516012600a61110491906143a0565b858561ffff168151811061111a5761111a6143f7565b602002602001015161112c91906143cd565b5f8060016131cd565b50806111408161440b565b915050611047565b505050565b5f6111575f611978565b61116261dead611978565b61116c919061442b565b6111786012600a6143a0565b611186906305f5e1006143cd565b610e1591906143e4565b601a5461010090046001600160a01b031633146111bf5760405162461bcd60e51b8152600401610ca1906141c3565b600a5460ff16156112065760405162461bcd60e51b81526020600482015260116024820152702a30bc32b99030b932903637b1b5b2b21760791b6044820152606401610ca1565b610bb88361ffff16111580156112225750610bb88261ffff1611155b80156112345750610bb88161ffff1611155b6112805760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ca1565b6008805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b601a5461010090046001600160a01b031633146112ee5760405162461bcd60e51b8152600401610ca1906141c3565b6018546040516333251a0b60e01b81526001600160a01b03838116600483015262010000909204909116906333251a0b906024015b5f604051808303815f87803b15801561133a575f80fd5b505af115801561134c573d5f803e3d5ffd5b5050505050565b601a5461010090046001600160a01b031633146113825760405162461bcd60e51b8152600401610ca1906141c3565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b601a5461010090046001600160a01b031633146113db5760405162461bcd60e51b8152600401610ca1906141c3565b6103e86113ea6012600a6143a0565b6113f8906305f5e1006143cd565b6114039060056143cd565b61140d91906143ae565b818361141b6012600a6143a0565b611429906305f5e1006143cd565b61143391906143cd565b61143d91906143ae565b10156114b15760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ca1565b80826114bf6012600a6143a0565b6114cd906305f5e1006143cd565b6114d791906143cd565b6114e191906143ae565b6016555050565b600b545f90612710908390611505906001600160a01b0316611978565b61150f91906143cd565b610df591906143ae565b601a5461010090046001600160a01b031633146115485760405162461bcd60e51b8152600401610ca1906141c3565b60968111156115925760405162461bcd60e51b815260206004820152601660248201527521b0b73737ba1039b2ba1030b137bb329018971a929760511b6044820152606401610ca1565b601555565b601a5461010090046001600160a01b031633146115c65760405162461bcd60e51b8152600401610ca1906141c3565b6001600160a01b0381166115ec5760405162461bcd60e51b8152600401610ca19061443e565b61deac196001600160a01b038216016116175760405162461bcd60e51b8152600401610ca19061443e565b601a546116329061010090046001600160a01b03165f6116d9565b61163d8160016116d9565b601a545f906116599061010090046001600160a01b0316611978565b111561168057601a5461167e9061010090046001600160a01b03168261112c82611978565b505b601a80546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b601a5461010090046001600160a01b031633146117085760405162461bcd60e51b8152600401610ca1906141c3565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b601a5461010090046001600160a01b031633146117615760405162461bcd60e51b8152600401610ca1906141c3565b60185460ff1615611770575f80fd5b306001600160a01b038216036117b95760405162461bcd60e51b815260206004820152600e60248201526d21b0b713ba1031329039b2b6331760911b6044820152606401610ca1565b6018805462010000600160b01b031916620100006001600160a01b0384811682029290921792839055604080516330fe427560e21b81528151929094049092169263c3f909d492600480830193919282900301815f875af192505050801561183e575060408051601f3d908101601f1916820190925261183b9181019061449b565b60015b611846575f80fd5b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b80546001600160a01b0319168584169081179091555f908152600160208190526040909120805460ff19169091179055601a5492546118b793829004831692919004165f19612c2f565b600a5461114890309061010090046001600160a01b03165f19612c2f565b50565b601a5461010090046001600160a01b031633146119075760405162461bcd60e51b8152600401610ca1906141c3565b601a5460ff161561194f5760405162461bcd60e51b815260206004820152601260248201527120b63932b0b23c903932b737bab731b2b21760711b6044820152606401610ca1565b601a805460ff19166001179055565b5f61196b6012600a6143a0565b601654610e1591906143ae565b6001600160a01b03165f9081526020819052604090205490565b601a5461010090046001600160a01b031633146119c15760405162461bcd60e51b8152600401610ca1906141c3565b60185460ff16611a2b5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f742072656e6f756e636520756e74696c2074726164696e6720686160448201526e39903132b2b71032b730b13632b21760891b6064820152608401610ca1565b601a54611a469061010090046001600160a01b03165f6116d9565b601a8054610100600160a81b031981169091556040516101009091046001600160a01b0316905f9082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b601a5461010090046001600160a01b03163314611ac75760405162461bcd60e51b8152600401610ca1906141c3565b600a805460ff19166001179055565b601a5461010090046001600160a01b03163314611b055760405162461bcd60e51b8152600401610ca1906141c3565b80611b62576001600160a01b038281165f81815260016020526040808220805460ff1916905560185490516380c581d160e01b815260048101939093526024830191909152620100009004909116906380c581d190604401610ce5565b60025415611bbb576203f48060025442611b7c91906143e4565b11611bbb5760405162461bcd60e51b815260206004820152600f60248201526e19902230bc9031b7b7b63237bbb71760891b6044820152606401610ca1565b6001600160a01b0382165f9081526001602052604090205460ff1615611c235760405162461bcd60e51b815260206004820152601b60248201527f5061697220616c726561647920616464656420746f206c6973742e00000000006044820152606401610ca1565b6001600160a01b038281165f81815260016020819052604091829020805460ff1916821790554260025560185491516380c581d160e01b815260048101939093526024830152620100009004909116906380c581d190604401610ce5565b5050565b601a5461010090046001600160a01b03163314611cb45760405162461bcd60e51b8152600401610ca1906141c3565b6001600160a01b03851615801590611cd457506001600160a01b03831615155b8015611ce857506001600160a01b03841615155b8015611cfc57506001600160a01b03821615155b8015611d1057506001600160a01b03811615155b611d5c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732e0000000000000000006044820152606401610ca1565b600c80546001600160a01b03199081166001600160a01b0397881617909155600e8054821694871694909417909355600d8054841694861694909417909355600f805483169185169190911790556010805490911691909216179055565b601a545f9061010090046001600160a01b03163314611deb5760405162461bcd60e51b8152600401610ca1906141c3565b600a54611e0990309061010090046001600160a01b03165f19612c2f565b50600190565b601a5461010090046001600160a01b03163314611e3e5760405162461bcd60e51b8152600401610ca1906141c3565b60185460ff1615611e915760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ca1565b601854610100900460ff16611ee85760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ca1565b6018546201000090046001600160a01b0316611f18576018805462010000600160b01b0319163062010000021790555b601854600b54604051631b04570d60e21b81526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c34906084015f604051808303815f87803b158015611f87575f80fd5b505af1925050508015611f98575060015b50601854600b546001600160a01b03620100009092048216916325a71cae91611fc19116611978565b6040518263ffffffff1660e01b8152600401611fdf91815260200190565b60408051808303815f875af1925050508015612018575060408051601f3d908101601f19168201909252612015918101906144c8565b60015b15612027576012919091556013555b6018805460ff1916600117905542601955565b5f612046338484612d27565b5060019392505050565b601a5461010090046001600160a01b0316331461207f5760405162461bcd60e51b8152600401610ca1906141c3565b601854610100900460ff16156120e757306001600160a01b038216036120e75760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207377656570206e617469766520746f6b656e732e00000000006044820152606401610ca1565b601a546040516370a0823160e01b815230600482015282916001600160a01b038084169263a9059cbb9261010090049091169083906370a0823190602401602060405180830381865afa158015612140573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061216491906144ea565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156121ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111489190614501565b601a5461010090046001600160a01b031633146121ff5760405162461bcd60e51b8152600401610ca1906141c3565b6011805461ff001916610100841515908102919091179091556014805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b601a5461010090046001600160a01b0316331461228d5760405162461bcd60e51b8152600401610ca1906141c3565b6018546040516363513b6160e11b81526001600160a01b038381166004830152620100009092049091169063c6a276c290602401611323565b601a5461010090046001600160a01b031633146122f55760405162461bcd60e51b8152600401610ca1906141c3565b601854610100900460ff161561234d5760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610ca1565b5f8190505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b2919061451c565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612421919061451c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561246a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248e919061451c565b600b546001600160a01b039081165f908152600160205260409020805460ff19169055909150811661261c57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061251a919061451c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612565573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612589919061451c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156125d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f7919061451c565b600b80546001600160a01b0319166001600160a01b0392909216919091179055612638565b600b80546001600160a01b0319166001600160a01b0383161790555b600a8054610100600160a81b0319166101006001600160a01b038581168202929092178355600b5482165f908152600160208190526040909120805460ff1916909117905591546111489230929104165f19612c2f565b601a5461010090046001600160a01b031633146126be5760405162461bcd60e51b8152600401610ca1906141c3565b601854610100900460ff16156127165760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ca1565b601a546040516001600160a01b0361010090920491909116904780156108fc02915f818181858888f193505050501580156118d5573d5f803e3d5ffd5b601a5461010090046001600160a01b031633146127825760405162461bcd60e51b8152600401610ca1906141c3565b601a5460ff16156127a55760405162461bcd60e51b8152600401610ca1906141ee565b6018546040516377613a2760e11b81526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610ce5565b601a5461010090046001600160a01b031633146128155760405162461bcd60e51b8152600401610ca1906141c3565b6009805461ffff87811663ffffffff199092169190911762010000878316021767ffffffff0000000019166401000000008683160267ffff000000000000191617600160301b858316021769ffff00000000000000001916600160401b918416919091021790558082846128898789614537565b6128939190614537565b61289d9190614537565b6128a79190614537565b6009805461ffff60501b1916600160501b61ffff938416021790556008545f916128da9162010000810482169116614537565b60095461ffff9182169250600160501b900416811015610d0e5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201526636103332b2b99760c91b6064820152608401610ca1565b601a5461010090046001600160a01b0316331461297b5760405162461bcd60e51b8152600401610ca1906141c3565b82846129896012600a6143a0565b612997906305f5e1006143cd565b6129a191906143cd565b6129ab91906143ae565b6012908155819083906129bf90600a6143a0565b6129cd906305f5e1006143cd565b6129d791906143cd565b6129e191906143ae565b60138190556012541115612a415760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e746044820152601760f91b6064820152608401610ca1565b600b5461271090612a5a906001600160a01b0316611978565b612a659060966143cd565b612a6f91906143ae565b6013541115612acc5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201526228249760e91b6064820152608401610ca1565b620f4240612adc6012600a6143a0565b612aea906305f5e1006143cd565b612af491906143ae565b6013541015612b155760405162461bcd60e51b8152600401610ca190614551565b620f4240612b256012600a6143a0565b612b33906305f5e1006143cd565b612b3d91906143ae565b6012541015612b5e5760405162461bcd60e51b8152600401610ca190614551565b50505050565b60185460405163fe575a8760e01b81526001600160a01b0383811660048301525f92620100009004169063fe575a8790602401602060405180830381865afa158015612bb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df59190614501565b601a5461010090046001600160a01b03163314612c055760405162461bcd60e51b8152600401610ca1906141c3565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316612c7b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ca1565b6001600160a01b038216612cc75760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401610ca1565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6001600160a01b038416612d8c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ca1565b6001600160a01b038316612dee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ca1565b5f8211612e4f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ca1565b6001600160a01b0384165f908152600160205260408120548190819060ff1615612e7c5760019250612ea9565b6001600160a01b0386165f9081526001602052604090205460ff1615612ea55760019150612ea9565b5060015b612eb38787613471565b156131255760185460ff16612fb25780612f0f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ca1565b6001600160a01b0387165f9081526005602052604090205460ff16158015612f4f57506001600160a01b0386165f9081526005602052604090205460ff16155b15612fb25760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e732063616e6e6f74206265206d6f76656420756e74696c2074726160448201526c3234b7339034b9903634bb329760991b6064820152608401610ca1565b8280612fbb5750815b15613068576001600160a01b0387165f9081526007602052604090205460ff1615801561300057506001600160a01b0386165f9081526007602052604090205460ff16155b15613068576016548511156130685760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610ca1565b600a546001600160a01b038781166101009092041614801590613089575081155b15613125576001600160a01b0386165f9081526007602052604090205460ff1661312557601754856130ba88611978565b6130c4919061442b565b11156131255760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610ca1565b81156131b45760115460ff166131b457601154610100900460ff16156131b4575f61314f30611978565b905060125481106131b25760135460145460ff161561319c57601554600b546127109190613185906001600160a01b0316611978565b61318f91906143cd565b61319991906143ae565b90505b8082106131a7578091505b6131b082613594565b505b505b6131c28787878686866131cd565b979650505050505050565b5f6131d88787613471565b1561326e5760185460405163ecd07a5360e01b81526001600160a01b0389811660048301528881166024830152604482018890525f92620100009004169063ecd07a53906064016020604051808303815f875af1925050508015613259575060408051601f3d908101601f1916820190925261325691810190614501565b60015b613261575f80fd5b90508061326c575f80fd5b505b6001600160a01b0387165f9081526006602052604090205460019060ff16806132ae57506001600160a01b0387165f9081526006602052604090205460ff165b156132b657505f5b6001600160a01b0388165f90815260208190526040812080548892906132dd9084906143e4565b909155505f9050816132ef57866132fb565b6132fb89888888613abd565b9050805f808a6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461332e919061442b565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161337a91815260200190565b60405180910390a3601854610100900460ff166134625761339b8989613bc5565b601854610100900460ff161580156133b857506133b88989613471565b80156133dc57506001600160a01b0389165f9081526005602052604090205460ff16155b801561340057506001600160a01b0388165f9081526005602052604090205460ff16155b801561340a575083155b156134625760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401610ca1565b50600198975050505050505050565b601a545f906001600160a01b0384811661010090920416148015906134a95750601a546001600160a01b038381166101009092041614155b80156134c55750601a5461010090046001600160a01b03163214155b80156134e957506001600160a01b0382165f9081526004602052604090205460ff16155b801561350d57506001600160a01b0383165f9081526004602052604090205460ff16155b801561352457506001600160a01b03821661dead14155b801561353857506001600160a01b03821615155b801561354d57506001600160a01b0383163014155b801561356d57506018546001600160a01b03848116620100009092041614155b801561358d57506018546001600160a01b03838116620100009092041614155b9392505050565b6011805460ff191660011790556040805160c08101825260095461ffff8082168352620100008204811660208401526401000000008204811693830193909352600160301b810483166060830152600160401b810483166080830152600160501b900490911660a082018190525f0361360d5750613ab0565b305f908152600360209081526040808320600a5461010090046001600160a01b031684529091529020545f191461366c57305f908152600360209081526040808320600a5461010090046001600160a01b0316845290915290205f1990555b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061369f5761369f6143f7565b60200260200101906001600160a01b031690816001600160a01b031681525050600a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613710573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613734919061451c565b81600181518110613747576137476143f7565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b81526101009091049091169063791ac947906137939086905f9086903090429060040161459f565b5f604051808303815f87803b1580156137aa575f80fd5b505af19250505080156137bb575060015b6137c6575050613ab0565b5f4790505f808460a0015161ffff16856020015161ffff16846137e991906143cd565b6137f391906143ae565b90505f8560a0015161ffff16866060015161ffff168561381391906143cd565b61381d91906143ae565b90505f8660a0015161ffff16876040015161ffff168661383d91906143cd565b61384791906143ae565b90505f8760a0015161ffff16886080015161ffff168761386791906143cd565b61387191906143ae565b90505f8183613880868861442b565b61388a919061442b565b613894919061442b565b61389e90886143e4565b895190915061ffff161561390657600c546040516001600160a01b039091169061d6d89083905f818181858888f193505050503d805f81146138fb576040519150601f19603f3d011682016040523d82523d5f602084013e613900565b606091505b50909650505b602089015161ffff161561396e57600d546040516001600160a01b039091169061d6d89087905f818181858888f193505050503d805f8114613963576040519150601f19603f3d011682016040523d82523d5f602084013e613968565b606091505b50909650505b606089015161ffff16156139d657600f546040516001600160a01b039091169061d6d89086905f818181858888f193505050503d805f81146139cb576040519150601f19603f3d011682016040523d82523d5f602084013e6139d0565b606091505b50909650505b604089015161ffff1615613a3e57600e546040516001600160a01b039091169061d6d89085905f818181858888f193505050503d805f8114613a33576040519150601f19603f3d011682016040523d82523d5f602084013e613a38565b606091505b50909650505b608089015161ffff1615613aa6576010546040516001600160a01b039091169061d6d89084905f818181858888f193505050503d805f8114613a9b576040519150601f19603f3d011682016040523d82523d5f602084013e613aa0565b606091505b50909650505b5050505050505050505b506011805460ff19169055565b5f808315613ad2575060085461ffff16613afc565b8215613aeb575060085462010000900461ffff16613afc565b50600854640100000000900461ffff165b6018546201000090046001600160a01b031630148015613b1d575046606114155b15613b2757506111945b805f03613b375784915050610ea2565b5f612710613b4583886143cd565b613b4f91906143ae565b90508015613bbb57305f9081526020819052604081208054839290613b7590849061442b565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6131c281876143e4565b601854610100900460ff1615613c295760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610ca1565b613c338282613471565b158015613c4d5750600b546001600160a01b038281169116145b15611c81576001600160a01b038083165f908152600460209081526040808320805460ff19908116600190811790925560069093529220805490911690911790556018805461ff001916610100179081905562010000900416613cc4576018805462010000600160b01b0319163062010000021790555b6011805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790602001612252565b80151581146118d5575f80fd5b5f8060408385031215613d22575f80fd5b8235613d2d81613d04565b91506020830135613d3d81613d04565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613d8557613d85613d48565b604052919050565b5f67ffffffffffffffff821115613da657613da6613d48565b5060051b60200190565b6001600160a01b03811681146118d5575f80fd5b5f82601f830112613dd3575f80fd5b8135613de6613de182613d8d565b613d5c565b8082825260208201915060208360051b860101925085831115613e07575f80fd5b602085015b83811015613e2d578035613e1f81613db0565b835260209283019201613e0c565b5095945050505050565b5f8060408385031215613e48575f80fd5b823567ffffffffffffffff811115613e5e575f80fd5b613e6a85828601613dc4565b9250506020830135613d3d81613d04565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613ec1575f80fd5b8235613ecc81613db0565b946020939093013593505050565b5f60208284031215613eea575f80fd5b813561358d81613db0565b5f805f60608486031215613f07575f80fd5b8335613f1281613db0565b92506020840135613f2281613db0565b929592945050506040919091013590565b5f8060408385031215613f44575f80fd5b50508035926020909101359150565b5f8060408385031215613f64575f80fd5b823567ffffffffffffffff811115613f7a575f80fd5b613f8685828601613dc4565b925050602083013567ffffffffffffffff811115613fa2575f80fd5b8301601f81018513613fb2575f80fd5b8035613fc0613de182613d8d565b8082825260208201915060208360051b850101925087831115613fe1575f80fd5b6020840193505b82841015614003578335825260209384019390910190613fe8565b809450505050509250929050565b803561ffff81168114614022575f80fd5b919050565b5f805f60608486031215614039575f80fd5b61404284614011565b925061405060208501614011565b915061405e60408501614011565b90509250925092565b5f8060408385031215614078575f80fd5b8235613d2d81613db0565b5f60208284031215614093575f80fd5b5035919050565b5f805f805f60a086880312156140ae575f80fd5b85356140b981613db0565b945060208601356140c981613db0565b935060408601356140d981613db0565b925060608601356140e981613db0565b915060808601356140f981613db0565b809150509295509295909350565b5f8060408385031215614118575f80fd5b823561412381613db0565b91506020830135613d3d81613db0565b5f805f805f60a08688031215614147575f80fd5b61415086614011565b945061415e60208701614011565b935061416c60408701614011565b925061417a60608701614011565b915061418860808701614011565b90509295509295909350565b5f805f80608085870312156141a7575f80fd5b5050823594602084013594506040840135936060013592509050565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b60208082526035908201527f43616e6e6f742063616c6c2c20626c61636b6c6973742066756e6374696f6e73604082015274103430bb32903132b2b7103932b737bab731b2b21760591b606082015260800190565b5f8151808452602084019350602083015f5b8281101561427c5781516001600160a01b0316865260209586019590910190600101614255565b5093949350505050565b604081525f6142986040830185614243565b905082151560208301529392505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156142f8578085048111156142dc576142dc6142a9565b60018416156142ea57908102905b60019390931c9280026142c1565b935093915050565b5f8261430e57506001610df5565b8161431a57505f610df5565b8160018114614330576002811461433a57614356565b6001915050610df5565b60ff84111561434b5761434b6142a9565b50506001821b610df5565b5060208310610133831016604e8410600b8410161715614379575081810a610df5565b6143855f1984846142bd565b805f1904821115614398576143986142a9565b029392505050565b5f61358d60ff841683614300565b5f826143c857634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610df557610df56142a9565b81810381811115610df557610df56142a9565b634e487b7160e01b5f52603260045260245ffd5b5f61ffff821661ffff8103614422576144226142a9565b60010192915050565b80820180821115610df557610df56142a9565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b5f80604083850312156144ac575f80fd5b82516144b781613db0565b6020840151909250613d3d81613db0565b5f80604083850312156144d9575f80fd5b505080516020909101519092909150565b5f602082840312156144fa575f80fd5b5051919050565b5f60208284031215614511575f80fd5b815161358d81613d04565b5f6020828403121561452c575f80fd5b815161358d81613db0565b61ffff8181168382160190811115610df557610df56142a9565b6020808252602e908201527f43616e6e6f74206265206c6f776572207468616e20302e303030303125206f6660408201526d103a37ba30b61039bab838363c9760911b606082015260800190565b85815284602082015260a060408201525f6145bd60a0830186614243565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220f6a7ebbe2b1b939dfe7c2827b9d4a08e71f2a026b346ce7681d170790dc5a12464736f6c634300081a0033