Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
1,000,000,000.00 POTUS

Holders:
2
Profile Summary
Blockchain:
Base (8453)


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

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Created At:
Wed, 06 Nov 2024 15:21:59 GMT
MoonshotToken.sol
contracts
MoonshotToken.sol


Contract ABI
[
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "string",
            "name": "name",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "symbol",
            "type": "string"
          },
          {
            "internalType": "address",
            "name": "creator",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "totalSupply",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "virtualTokenReserves",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "virtualCollateralReserves",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "feeBasisPoints",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dexFeeBasisPoints",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "migrationFeeFixed",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "poolCreationFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "mcLowerLimit",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "mcUpperLimit",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "tokensMigrationThreshold",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "treasury",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniV2Router",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "dexTreasury",
            "type": "address"
          }
        ],
        "internalType": "struct IMoonshotToken.ConstructorParams",
        "name": "_params",
        "type": "tuple"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "allowance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientAllowance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "balance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSpender",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "FailedToSendETH",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InsufficientTokenReserves",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MarketcapThresholdReached",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotEnoughETHReserves",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotEnoughtETHToBuyTokens",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyFactory",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ReentrancyGuardReentrantCall",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SendingToPairIsNotAllowedBeforeMigration",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SlippageCheckFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TradingStopped",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "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": "MAX_BPS",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "burnFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_amountOutMin",
        "type": "uint256"
      }
    ],
    "name": "buyExactIn",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "collateralToPayWithFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "helioFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "dexFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_maxCollateralAmount",
        "type": "uint256"
      }
    ],
    "name": "buyExactOut",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "collateralToPayWithFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "helioFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "dexFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "creator",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "curveType",
    "outputs": [
      {
        "internalType": "enum IMoonshotToken.CurveType",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "dexFeeBPS",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "dexTreasury",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "factory",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "feeBPS",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "fixedMigrationFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_amountOut",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_reserveIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_reserveOut",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_paymentTokenIsOut",
        "type": "bool"
      }
    ],
    "name": "getAmountInAndFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "fee",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_amountIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_reserveIn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_reserveOut",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_paymentTokenIsIn",
        "type": "bool"
      }
    ],
    "name": "getAmountOutAndFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amountOut",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "fee",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCurveProgressBps",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getMarketCap",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "initalTokenSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "mcLowerLimit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "mcUpperLimit",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "migrate",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "tokensToMigrate",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "tokensToBurn",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "collateralAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pair",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "poolCreationFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenAmount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_amountCollateralMin",
        "type": "uint256"
      }
    ],
    "name": "sellExactIn",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "collateralToReceiveMinusFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "helioFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "dexFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenAmountMax",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_amountCollateral",
        "type": "uint256"
      }
    ],
    "name": "sellExactOut",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "collateralToReceiveMinusFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "tokensOut",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "helioFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "dexFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "sendingToPairNotAllowed",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "tokensMigrationThreshold",
    "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": "tradingStopped",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_value",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "treasury",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "uniswapV2Router",
    "outputs": [
      {
        "internalType": "contract IUniswapV2Router02",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "virtualCollateralReserves",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "virtualCollateralReservesInitial",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "virtualTokenReserves",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
61024080604052346200068a57620026df803803809162000021828562000a0a565b833981016020828203126200068a5781516001600160401b0381116200068a576102008184018303126200068a576040519161020083016001600160401b038111848210176200063957604052838201516001600160401b0381116200068a578162000091918487010162000a2e565b835283820160200151916001600160401b0383116200068a57620000c16101e0926200017d948388010162000a2e565b94856020860152620000d860408383010162000aa4565b6040860152808201606081810151908701526080808201519087015260a0808201519087015260c0808201519087015260e080820151908701526101008082015190870152610120808201519087015261014080820151908701526101608082015190870152610180808201519087015262000158906101a00162000aa4565b6101a08601526200016f6101c08383010162000aa4565b6101c0860152010162000aa4565b6101e0820152805180519092906001600160401b0381116200063957600354600181811c91168015620009ff575b6020821014620008fd57601f811162000999575b506020601f82116001146200092a57819293946000926200091e575b50508160011b916000199060031b1c1916176003555b8051906001600160401b038211620006395760045490600182811c9216801562000913575b6020831014620008fd5781601f8493116200088b575b50602090601f8311600114620007fc57600092620007f0575b50508160011b916000199060031b1c1916176004555b600160055561010061ff001960095416176009556060810151903015620007d757600254908282018211620007c15782600493602093016002553060005260008352604060002081815401905560405190815260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef843093a3606081015160065560a081015180600855608052608081015160075560018060a01b036040820151166101805260c081015160a05260e081015160c05260018060a01b036101a0820151166101c05260018060a01b036101e0820151166101e052610100810151610140526101208101516101605261014081015160e05261016081015161010052610180810151610120526101c060018060a01b039101511680610220523361020052604051928380926315ab88c960e31b82525afa90811562000698576000916200077f575b506000906001600160a01b0316301015620006e65750610220516040516315ab88c960e31b815290602090829060049082906001600160a01b03165afa80156200069857600090620006a4575b60049150305b6102205160405163c45a015560e01b81529360209185919082906001600160a01b03165afa92831562000698576000936200064f575b506040516001600160601b0319606092831b81166020830190815293831b811660348301526028825291810192918184106001600160401b03851117620006395760e092846040528251902090608083019560ff60f81b875260601b16608183015260958201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f60b582015260558352019181831060018060401b0384111762000639576040839052905190206001600160a01b03166101a052611c25908162000aba823960805181818161056401526109d9015260a0518181816113a7015261184c015260c05181818161094001528181610cba0152611878015260e051818181610e6d0152611a630152610100518181816110500152611aa20152610120518181816101fe01526113280152610140518181816104aa01526108b101526101605181818161052901526108ef0152610180518161164a01526101a0518181816105b00152818161062a0152610a8601526101c0518181816102f10152818161097001528181610d4501528181610ea501528181610f5301526111c901526101e05181818161031b015281816109a701528181610c4001528181610d6f01528181610f7d01526111f3015261020051818181610271015281816104e20152818161079c01528181610cec01528181610ee801526111330152610220518181816107df01526113fe0152f35b634e487b7160e01b600052604160045260246000fd5b9092506020813d6020116200068f575b816200066e6020938362000a0a565b810103126200068a57620006829062000aa4565b91386200042c565b600080fd5b3d91506200065f565b6040513d6000823e3d90fd5b506020813d602011620006dd575b81620006c16020938362000a0a565b810103126200068a57620006d760049162000aa4565b620003f0565b3d9150620006b2565b610220516040516315ab88c960e31b81529190602090839060049082906001600160a01b03165afa908115620007735780916200072b575b50600491503090620003f6565b90506020823d6020116200076a575b81620007496020938362000a0a565b810103126200076757506200076060049162000aa4565b386200071e565b80fd5b3d91506200073a565b604051903d90823e3d90fd5b90506020813d602011620007b8575b816200079d6020938362000a0a565b810103126200068a57620007b19062000aa4565b38620003a3565b3d91506200078e565b634e487b7160e01b600052601160045260246000fd5b60405163ec442f0560e01b815260006004820152602490fd5b01519050388062000245565b6004600090815293507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91905b601f19841685106200086f576001945083601f1981161062000855575b505050811b016004556200025b565b015160001960f88460031b161c1916905538808062000846565b8181015183556020948501946001909301929091019062000829565b60046000529091507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c810160208510620008f5575b90849392915b601f830160051c82018110620008e55750506200022c565b60008155859450600101620008cd565b5080620008c7565b634e487b7160e01b600052602260045260246000fd5b91607f169162000216565b015190503880620001db565b600360005260206000209060005b601f1984168110620009805750600193949583601f1981161062000966575b505050811b01600355620001f1565b015160001960f88460031b161c1916905538808062000957565b9091602060018192858a01518155019301910162000938565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c810160208410620009f7575b601f830160051c82018110620009ea575050620001bf565b60008155600101620009d2565b5080620009d2565b90607f1690620001ab565b601f909101601f19168101906001600160401b038211908210176200063957604052565b919080601f840112156200068a5782516001600160401b03811162000639576020906040519262000a6983601f19601f850116018562000a0a565b8184528282870101116200068a5760005b81811062000a9057508260009394955001015290565b858101830151848201840152820162000a7a565b51906001600160a01b03821682036200068a5756fe608060408181526004918236101561001657600080fd5b600092833560e01c91826302d05d3f146116365750816306fdde031461153f578163095ea7b314611495578163152044811461144c5781631655bc621461142d5781631694505e146113e957816318160ddd146113ca5781631a1c6e531461138f5781632368da32146112df57816323b872dd146112a257816325e17b5714611121578163313ce5671461110557816342966c68146110e757816349a30246146110735781634c7766b5146110385781634fb3fbe714610ed457816361d027b314610e905781636d04eb9f14610e5557816370a0823114610e1e5781637187631814610cdd57816371ea0d8e14610ca257816379cc679014610c6f57816385f377ca14610c2b5781638fd3ab801461077e57816390825c281461075a57816395d89b4114610659578163a8aa1b3114610615578163a9059cbb14610587578163b026a1211461054c578163be74615f14610511578163c45a0155146104cd578163c48afe1614610492578163c6d8b7781461046b578163c78d0b0e1461044c578163d3728de414610431578163dd62ed3e146103e8578163e8e70c4c146103c9578163e98d5cd51461026457508063fd62bcd714610241578063fd967f47146102255763fe94c269146101e857600080fd5b34610221578160031936011261022157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5080fd5b5034610221578160031936011261022157602090516127108152f35b503461022157816003193601126102215760209060ff6009541690519015158152f35b8261026e3661171a565b917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036103ba5760ff600954166103ab576102ca6102b860085484611768565b6102c484600754611791565b9061179e565b916102d48361183d565b9390956102ea856102e589856117be565b6117be565b95610315887f0000000000000000000000000000000000000000000000000000000000000000611ada565b61033f867f0000000000000000000000000000000000000000000000000000000000000000611ada565b861061039d57508161036a61037e9261035f610399979695600754611791565b6007556008546117be565b6008556103778633611ada565b303361197b565b51938493846040919493926060820195825260208201520152565b0390f35b8351630a1c173f60e41b8152fd5b5163058aab2d60e21b81528390fd5b51630636a15760e11b81528390fd5b5050346102215781600319360112610221576020906008549051908152f35b505034610221578060031936011261022157806020926104066116c2565b61040e6116dd565b6001600160a01b0391821683526001865283832091168252845220549051908152f35b50503461022157816003193601126102215751908152602090f35b5050346102215781600319360112610221576020906006549051908152f35b50503461022157816003193601126102215760209060ff60095460081c1690519015158152f35b505034610221578160031936011261022157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b505034610221578160031936011261022157517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b505034610221578160031936011261022157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b505034610221578160031936011261022157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b828434610612578160031936011261061257506105a26116c2565b916001600160a01b038084167f00000000000000000000000000000000000000000000000000000000000000009091161480610603575b6105f557506105ee602092602435903361197b565b5160018152f35b9051633b95747f60e21b8152fd5b5060ff60095460081c166105d9565b80fd5b505034610221578160031936011261022157517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b83833461022157816003193601126102215780519180938054916001908360011c9260018516948515610750575b602095868610811461073d5785895290811561071957506001146106c1575b61039987876106b7828c0383611730565b5191829182611679565b81529295507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106107065750505082610399946106b7928201019486806106a6565b80548685018801529286019281016106e8565b60ff19168887015250505050151560051b83010192506106b78261039986806106a6565b634e487b7160e01b845260228352602484fd5b93607f1693610687565b505034610221578160031936011261022157602090610777611802565b9051908152f35b91905034610b565782600319360112610b56576001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610c1c5761ff0019600954166009553084526020908482528085205491837f000000000000000000000000000000000000000000000000000000000000000016825163c45a015560e01b815282818881855afa908115610b9c578891610bff575b5083516315ab88c960e31b81528884828a81875afa918215610bf3579189828a889581979594610bd3575b50604493948a5197889687956364e329cb60e11b87523090870152166024850152165af18015610b9c57610ba6575b5082519563095ea7b360e01b8752818188015284602488015282876044818b305af1968715610b9c576109a1959697610b7f575b507f0000000000000000000000000000000000000000000000000000000000000000966109fe6108de89476117be565b6102e561092d61092661091d6109157f000000000000000000000000000000000000000000000000000000000000000080966117be565b600754611768565b6008549061179e565b809b6117be565b9a6102e58c6109d161096d6127106109657f000000000000000000000000000000000000000000000000000000000000000087611768565b0480956117be565b917f00000000000000000000000000000000000000000000000000000000000000009d8e61099b8986611791565b90611ada565b6109cb857f0000000000000000000000000000000000000000000000000000000000000000611ada565b30611b50565b6102e56008547f0000000000000000000000000000000000000000000000000000000000000000906117be565b95600a4201804211610b6c579060608b94939260c48b8b8b51998a94859363f305d71960e01b8552308b860152806024860152604485015282606485015230608485015260a48401525af1948515610b62579084939291879596610b20575b5060449291849147610b0f575b508851968795869463a9059cbb60e01b865285015260248401527f0000000000000000000000000000000000000000000000000000000000000000165af18015610b055761039995969750610ad7575b505051938493846040919493926060820195825260208201520152565b81610af692903d10610afe575b610aee8183611730565b8101906117ea565b503880610aba565b503d610ae4565b83513d89823e3d90fd5b610b1a904790611ada565b38610a6a565b94509450906060843d606011610b5a575b81610b3e60609383611730565b81010312610b56579286015193859391906044610a5d565b8280fd5b3d9150610b31565b87513d86823e3d90fd5b634e487b7160e01b8b526011845260248bfd5b610b9590843d8611610afe57610aee8183611730565b50386108ae565b84513d8a823e3d90fd5b610bc590833d8511610bcc575b610bbd8183611730565b8101906117cb565b503861087a565b503d610bb3565b60449450610bed90873d8911610bcc57610bbd8183611730565b9361084b565b508551903d90823e3d90fd5b610c169150833d8511610bcc57610bbd8183611730565b38610820565b51630636a15760e11b81529050fd5b505034610221578160031936011261022157517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346102215736600319011261061257610c9f610c8b6116c2565b60243590610c9a8233836118a8565b611b50565b80f35b505034610221578160031936011261022157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b9050610ce83661171a565b92907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610e105760ff60095416610e0257610d2d8461183d565b929091610d3e846102e585896117be565b94610d69847f0000000000000000000000000000000000000000000000000000000000000000611ada565b610d93857f0000000000000000000000000000000000000000000000000000000000000000611ada565b610dae610da260075489611768565b6102c4896008546117be565b918211610df45750610dd3608096610dc783303361197b565b61035f83600754611791565b600855610de08533611ada565b815194855260208501528301526060820152f35b8251630a1c173f60e41b8152fd5b505163058aab2d60e21b8152fd5b5051630636a15760e11b8152fd5b5050346102215760203660031901126102215760209181906001600160a01b03610e466116c2565b16815280845220549051908152f35b505034610221578160031936011261022157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b505034610221578160031936011261022157517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9190506020366003190112610b56578135927f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610e105760ff60095416610e0257818491308152806020522054111561102b57610f3b3461183d565b939092610f4c856102e586346117be565b90610f77857f0000000000000000000000000000000000000000000000000000000000000000611ada565b610fa1867f0000000000000000000000000000000000000000000000000000000000000000611ada565b600754610fae8184611768565b91610fc0600854936102c48686611791565b94851061101d5750610ff1928492610fdf6103999796610fe7946117be565b600755611791565b600855333061197b565b610ff9611a59565b611001611a98565b5192839234846040919493926060820195825260208201520152565b8551630a1c173f60e41b8152fd5b5163904db1ff60e01b8152fd5b505034610221578160031936011261022157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b82843461061257611083366116f3565b9193509190156110c557906102c4826110b16110aa6110a46110b79661183d565b90611791565b9582611768565b926117be565b905b82519182526020820152f35b806110b16110d6946102c493611768565b6110e26110a48261183d565b6110b9565b83903461022157602036600319011261022157610c9f903533611b50565b5050346102215781600319360112610221576020905160128152f35b905061112c3661171a565b90939092907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610e105760ff60095416610e0257818591308152806020522054111561102b5761119861118c60085486611768565b6102c4866007546117be565b936111a28561183d565b9390956111b8856111b38984611791565b611791565b9586116112935761122e906111ed887f0000000000000000000000000000000000000000000000000000000000000000611ada565b611217867f0000000000000000000000000000000000000000000000000000000000000000611ada565b611223846007546117be565b600755600854611791565b60085584341160001461126f57509061125f610399939261125861125287346117be565b33611ada565b333061197b565b611267611a59565b61037e611a98565b84341061128557509061125f6103999392611258565b82516367c45b4f60e11b8152fd5b508251630a1c173f60e41b8152fd5b505034610221576060366003190112610221576020906105ee6112c36116c2565b6112cb6116dd565b604435916112da8333836118a8565b61197b565b8284346106125780600319360112610612576113086006543083528260205283832054906117be565b90612710918281029080820484149015171561137c576020945061134d907f00000000000000000000000000000000000000000000000000000000000000009061179e565b906064821015611364575050506064905b51908152f35b508181111561137557505b9061135e565b905061136f565b634e487b7160e01b825260118552602482fd5b505034610221578160031936011261022157602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346102215781600319360112610221576020906002549051908152f35b505034610221578160031936011261022157517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346102215781600319360112610221576020906007549051908152f35b8284346106125761145c366116f3565b9093509091901561148457906102c48261147e6110aa6110a46110b79661183d565b92611791565b8061147e6110d6946102c493611768565b905034610b565781600319360112610b56576114af6116c2565b602435903315611528576001600160a01b031691821561151157508083602095338152600187528181208582528752205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b8351634a1406b160e11b8152908101859052602490fd5b835163e602df0560e01b8152808401869052602490fd5b91905034610b565782600319360112610b565780519183600354906001908260011c9260018116801561162c575b602095868610821461161957508488529081156115f7575060011461159e575b61039986866106b7828b0383611730565b929550600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8284106115e45750505082610399946106b792820101943861158d565b80548685018801529286019281016115c7565b60ff191687860152505050151560051b83010192506106b7826103993861158d565b634e487b7160e01b845260229052602483fd5b93607f169361156d565b8490346102215781600319360112610221577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6020808252825181830181905290939260005b8281106116ae57505060409293506000838284010152601f8019910116010190565b81810186015184820160400152850161168c565b600435906001600160a01b03821682036116d857565b600080fd5b602435906001600160a01b03821682036116d857565b60809060031901126116d85760043590602435906044359060643580151581036116d85790565b60409060031901126116d8576004359060243590565b90601f8019910116810190811067ffffffffffffffff82111761175257604052565b634e487b7160e01b600052604160045260246000fd5b8181029291811591840414171561177b57565b634e487b7160e01b600052601160045260246000fd5b9190820180921161177b57565b81156117a8570490565b634e487b7160e01b600052601260045260246000fd5b9190820391821161177b57565b908160209103126116d857516001600160a01b03811681036116d85790565b908160209103126116d8575180151581036116d85790565b600854670de0b6b3a7640000908181029080820483149015171561177b576118306118399160025490611768565b6007549061179e565b0490565b6118a5611871916127109283917f000000000000000000000000000000000000000000000000000000000000000090611768565b049161189d7f000000000000000000000000000000000000000000000000000000000000000084611768565b0480926117be565b91565b9160018060a01b0380931691600093838552600160205260409384862091831691828752602052848620549260001984036118e7575b50505050505050565b84841061194b5750801561193357811561191b578552600160205283852090855260205203912055388080808080806118de565b8451634a1406b160e11b815260048101879052602490fd5b845163e602df0560e01b815260048101879052602490fd5b8551637dc7a0d960e11b81526001600160a01b039190911660048201526024810184905260448101859052606490fd5b916001600160a01b03808416928315611a405716928315611a2757600090838252816020526040822054908382106119f5575091604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815220818154019055604051908152a3565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101839052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b611a61611802565b7f000000000000000000000000000000000000000000000000000000000000000010611a8957565b600160ff196009541617600955565b611aa0611802565b7f000000000000000000000000000000000000000000000000000000000000000010611ac857565b6040516353dfa97560e01b8152600490fd5b60008080809481945af1903d15611b4a573d9067ffffffffffffffff8211611b365760405191611b14601f8201601f191660200184611730565b825260203d92013e5b15611b2457565b6040516338822c1360e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b50611b1d565b906001600160a01b038216908115611a405760009282845283602052604084205490828210611bbd5750817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926020928587528684520360408620558060025403600255604051908152a3565b60405163391434e360e21b81526001600160a01b03919091166004820152602481019190915260448101829052606490fdfea26469706673582212206c168d4114c8a8139787643a85f4ab9dc680349cba703cbf283159035036401064736f6c6343000817003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000048dd0921bb414c90e2595786b6caae07fde22bbc0000000000000000000000000000000000000000033b2e3c9fd0803ce80000000000000000000000000000000000000000000000036ccfbb244887eea400000000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000015af1d78b58c4000000000000000000000000000000000000000000000000000176b344f2a78c0000000000000000000000000000000000000000000002955cf104607ca9a4370703000000000000000000000000c01ab97ec9371157de1fc7a5341f7b899894d6320000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24000000000000000000000000c654972dd50bf174629a5ce12fae7849100a073d0000000000000000000000000000000000000000000000000000000000000005504f5455530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005504f545553000000000000000000000000000000000000000000000000000000