/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */

import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
import { Provider, TransactionRequest } from "@ethersproject/providers";
import type { Hypervisor, HypervisorInterface } from "../Hypervisor";

const _abi = [
  {
    inputs: [
      {
        internalType: "address",
        name: "_pool",
        type: "address",
      },
      {
        internalType: "address",
        name: "_owner",
        type: "address",
      },
      {
        internalType: "string",
        name: "name",
        type: "string",
      },
      {
        internalType: "string",
        name: "symbol",
        type: "string",
      },
    ],
    stateMutability: "nonpayable",
    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: true,
        internalType: "address",
        name: "sender",
        type: "address",
      },
      {
        indexed: true,
        internalType: "address",
        name: "to",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "shares",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "amount0",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "amount1",
        type: "uint256",
      },
    ],
    name: "Deposit",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "uint256",
        name: "_deposit0Max",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "_deposit1Max",
        type: "uint256",
      },
    ],
    name: "DepositMaxSet",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "uint256",
        name: "_maxTotalSupply",
        type: "uint256",
      },
    ],
    name: "MaxTotalSupplySet",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "int24",
        name: "tick",
        type: "int24",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "totalAmount0",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "totalAmount1",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "feeAmount0",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "feeAmount1",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "totalSupply",
        type: "uint256",
      },
    ],
    name: "Rebalance",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "from",
        type: "address",
      },
      {
        indexed: true,
        internalType: "address",
        name: "to",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "value",
        type: "uint256",
      },
    ],
    name: "Transfer",
    type: "event",
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "sender",
        type: "address",
      },
      {
        indexed: true,
        internalType: "address",
        name: "to",
        type: "address",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "shares",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "amount0",
        type: "uint256",
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "amount1",
        type: "uint256",
      },
    ],
    name: "Withdraw",
    type: "event",
  },
  {
    inputs: [],
    name: "DOMAIN_SEPARATOR",
    outputs: [
      {
        internalType: "bytes32",
        name: "",
        type: "bytes32",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "PRECISION",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "amount0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "amount1",
        type: "uint256",
      },
    ],
    name: "addBaseLiquidity",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "amount0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "amount1",
        type: "uint256",
      },
    ],
    name: "addLimitLiquidity",
    outputs: [],
    stateMutability: "nonpayable",
    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: "listed",
        type: "address[]",
      },
    ],
    name: "appendList",
    outputs: [],
    stateMutability: "nonpayable",
    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: [
      {
        internalType: "address",
        name: "account",
        type: "address",
      },
    ],
    name: "balanceOf",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "baseLower",
    outputs: [
      {
        internalType: "int24",
        name: "",
        type: "int24",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "baseUpper",
    outputs: [
      {
        internalType: "int24",
        name: "",
        type: "int24",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "compound",
    outputs: [
      {
        internalType: "uint128",
        name: "baseToken0Owed",
        type: "uint128",
      },
      {
        internalType: "uint128",
        name: "baseToken1Owed",
        type: "uint128",
      },
      {
        internalType: "uint128",
        name: "limitToken0Owed",
        type: "uint128",
      },
      {
        internalType: "uint128",
        name: "limitToken1Owed",
        type: "uint128",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "currentTick",
    outputs: [
      {
        internalType: "int24",
        name: "tick",
        type: "int24",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "decimals",
    outputs: [
      {
        internalType: "uint8",
        name: "",
        type: "uint8",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "spender",
        type: "address",
      },
      {
        internalType: "uint256",
        name: "subtractedValue",
        type: "uint256",
      },
    ],
    name: "decreaseAllowance",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "deposit0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "deposit1",
        type: "uint256",
      },
      {
        internalType: "address",
        name: "to",
        type: "address",
      },
      {
        internalType: "address",
        name: "from",
        type: "address",
      },
    ],
    name: "deposit",
    outputs: [
      {
        internalType: "uint256",
        name: "shares",
        type: "uint256",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "deposit0Max",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "deposit1Max",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "directDeposit",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "fee",
    outputs: [
      {
        internalType: "uint24",
        name: "",
        type: "uint24",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "getBasePosition",
    outputs: [
      {
        internalType: "uint128",
        name: "liquidity",
        type: "uint128",
      },
      {
        internalType: "uint256",
        name: "amount0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "amount1",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "getLimitPosition",
    outputs: [
      {
        internalType: "uint128",
        name: "liquidity",
        type: "uint128",
      },
      {
        internalType: "uint256",
        name: "amount0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "amount1",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "getTotalAmounts",
    outputs: [
      {
        internalType: "uint256",
        name: "total0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "total1",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "spender",
        type: "address",
      },
      {
        internalType: "uint256",
        name: "addedValue",
        type: "uint256",
      },
    ],
    name: "increaseAllowance",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "limitLower",
    outputs: [
      {
        internalType: "int24",
        name: "",
        type: "int24",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "limitUpper",
    outputs: [
      {
        internalType: "int24",
        name: "",
        type: "int24",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    name: "list",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "maxTotalSupply",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "name",
    outputs: [
      {
        internalType: "string",
        name: "",
        type: "string",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "owner",
        type: "address",
      },
    ],
    name: "nonces",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "owner",
    outputs: [
      {
        internalType: "address",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "owner",
        type: "address",
      },
      {
        internalType: "address",
        name: "spender",
        type: "address",
      },
      {
        internalType: "uint256",
        name: "value",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "deadline",
        type: "uint256",
      },
      {
        internalType: "uint8",
        name: "v",
        type: "uint8",
      },
      {
        internalType: "bytes32",
        name: "r",
        type: "bytes32",
      },
      {
        internalType: "bytes32",
        name: "s",
        type: "bytes32",
      },
    ],
    name: "permit",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "pool",
    outputs: [
      {
        internalType: "contract IUniswapV3Pool",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "shares",
        type: "uint256",
      },
    ],
    name: "pullLiquidity",
    outputs: [
      {
        internalType: "uint256",
        name: "base0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "base1",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "limit0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "limit1",
        type: "uint256",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "int24",
        name: "_baseLower",
        type: "int24",
      },
      {
        internalType: "int24",
        name: "_baseUpper",
        type: "int24",
      },
      {
        internalType: "int24",
        name: "_limitLower",
        type: "int24",
      },
      {
        internalType: "int24",
        name: "_limitUpper",
        type: "int24",
      },
      {
        internalType: "address",
        name: "feeRecipient",
        type: "address",
      },
      {
        internalType: "int256",
        name: "swapQuantity",
        type: "int256",
      },
    ],
    name: "rebalance",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "address",
        name: "listed",
        type: "address",
      },
    ],
    name: "removeListed",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "_deposit0Max",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "_deposit1Max",
        type: "uint256",
      },
    ],
    name: "setDepositMax",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "_maxTotalSupply",
        type: "uint256",
      },
    ],
    name: "setMaxTotalSupply",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "symbol",
    outputs: [
      {
        internalType: "string",
        name: "",
        type: "string",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "tickSpacing",
    outputs: [
      {
        internalType: "int24",
        name: "",
        type: "int24",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "toggleDirectDeposit",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "toggleWhitelist",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "token0",
    outputs: [
      {
        internalType: "contract IERC20",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "token1",
    outputs: [
      {
        internalType: "contract IERC20",
        name: "",
        type: "address",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [],
    name: "totalSupply",
    outputs: [
      {
        internalType: "uint256",
        name: "",
        type: "uint256",
      },
    ],
    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: "transferOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "amount0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "amount1",
        type: "uint256",
      },
      {
        internalType: "bytes",
        name: "data",
        type: "bytes",
      },
    ],
    name: "uniswapV3MintCallback",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "int256",
        name: "amount0Delta",
        type: "int256",
      },
      {
        internalType: "int256",
        name: "amount1Delta",
        type: "int256",
      },
      {
        internalType: "bytes",
        name: "data",
        type: "bytes",
      },
    ],
    name: "uniswapV3SwapCallback",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
  },
  {
    inputs: [],
    name: "whitelisted",
    outputs: [
      {
        internalType: "bool",
        name: "",
        type: "bool",
      },
    ],
    stateMutability: "view",
    type: "function",
  },
  {
    inputs: [
      {
        internalType: "uint256",
        name: "shares",
        type: "uint256",
      },
      {
        internalType: "address",
        name: "to",
        type: "address",
      },
      {
        internalType: "address",
        name: "from",
        type: "address",
      },
    ],
    name: "withdraw",
    outputs: [
      {
        internalType: "uint256",
        name: "amount0",
        type: "uint256",
      },
      {
        internalType: "uint256",
        name: "amount1",
        type: "uint256",
      },
    ],
    stateMutability: "nonpayable",
    type: "function",
  },
];

const _bytecode =
  "0x6101406040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b50604051620052a6380380620052a6833981810160405260808110156200005d57600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200008957600080fd5b9083019060208201858111156200009f57600080fd5b8251640100000000811182820188101715620000ba57600080fd5b82525081516020918201929091019080838360005b83811015620000e9578181015183820152602001620000cf565b50505050905090810190601f168015620001175780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200013b57600080fd5b9083019060208201858111156200015157600080fd5b82516401000000008111828201881017156200016c57600080fd5b82525081516020918201929091019080838360005b838110156200019b57818101518382015260200162000181565b50505050905090810190601f168015620001c95780820380516001836020036101000a031916815260200191505b506040525050508180604051806040016040528060018152602001603160f81b815250848481600390805190602001906200020692919062000602565b5080516200021c90600490602084019062000602565b50506005805460ff1916601217905550815160208084019190912082519183019190912060c082905260e08190527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620002756200059a565b60a052620002858184846200059e565b60805261010052505060016007555050506001600160a01b038416620002aa57600080fd5b6001600160a01b038316620002be57600080fd5b600880546001600160a01b0319166001600160a01b03868116919091179182905560408051630dfe168160e01b815290519290911691630dfe168191600480820192602092909190829003018186803b1580156200031b57600080fd5b505afa15801562000330573d6000803e3d6000fd5b505050506040513d60208110156200034757600080fd5b5051600980546001600160a01b0319166001600160a01b039283161790556008546040805163d21220a760e01b81529051919092169163d21220a7916004808301926020929190829003018186803b158015620003a357600080fd5b505afa158015620003b8573d6000803e3d6000fd5b505050506040513d6020811015620003cf57600080fd5b5051600a80546001600160a01b0319166001600160a01b0392831617905560095416620003fb57600080fd5b600a546001600160a01b03166200041157600080fd5b600860009054906101000a90046001600160a01b03166001600160a01b031663ddca3f436040518163ffffffff1660e01b815260040160206040518083038186803b1580156200046057600080fd5b505afa15801562000475573d6000803e3d6000fd5b505050506040513d60208110156200048c57600080fd5b5051600a805462ffffff909216600160a01b0262ffffff60a01b19909216919091179055600854604080516334324e9f60e21b815290516001600160a01b039092169163d0c93a7c91600480820192602092909190829003018186803b158015620004f657600080fd5b505afa1580156200050b573d6000803e3d6000fd5b505050506040513d60208110156200052257600080fd5b5051600a805460029290920b62ffffff16600160b81b0262ffffff60b81b199092169190911790555050600b80546001600160a01b03909216660100000000000002600160301b600160d01b0319909216919091179055506000600e55600019600c819055600d556010805460ff19169055620006ae565b4690565b6000838383620005ad6200059a565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200063a576000855562000685565b82601f106200065557805160ff191683800117855562000685565b8280016001018555821562000685579182015b828111156200068557825182559160200191906001019062000668565b506200069392915062000697565b5090565b5b8082111562000693576000815560010162000698565b60805160a05160c05160e0516101005161012051614bae620006f8600039806128a252508061342e52508061347052508061344f5250806133d55250806134055250614bae6000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c80637ecebe00116101bd578063bb032a66116100f9578063d505accf116100a2578063f2fde38b1161007c578063f2fde38b146109f8578063f69e204614610a1e578063fa08274314610a5a578063fa461e3314610a6257610341565b8063d505accf14610959578063dd62ed3e146109aa578063ddca3f43146109d857610341565b8063d21220a7116100d3578063d21220a7146108cd578063d2eabcfc146108d5578063d3487997146108dd57610341565b8063bb032a6614610897578063c4a7761e146108bd578063d0c93a7c146108c557610341565b806395d89b4111610166578063a9059cbb11610140578063a9059cbb1461080e578063aaf5eb681461083a578063b1a3d53314610842578063b460af941461084a57610341565b806395d89b41146107aa578063a049de6b146107b2578063a457c2d7146107e257610341565b806384715b111161019757806384715b1114610760578063888a91341461079a5780638da5cb5b146107a257610341565b80637ecebe00146106545780637f2116ff1461067a5780637fe75b07146106bd57610341565b80633644e5151161028c57806351e87af711610235578063648cab851161020f578063648cab85146106165780636d90a39c1461061e57806370a08231146106265780637e15144b1461064c57610341565b806351e87af71461059b578063549f6dc9146105a35780635dbba48e146105f357610341565b80633e091ee9116102665780633e091ee9146105535780633f3e4c11146105765780634d461fbb1461059357610341565b80633644e51514610517578063395093511461051f5780633d9287fa1461054b57610341565b806316f0115b116102ee57806328b0e4cc116102c857806328b0e4cc146104cb5780632ab4d052146104f1578063313ce567146104f957610341565b806316f0115b1461047357806318160ddd1461047b57806323b872dd1461049557610341565b80630d1df8dc1161031f5780630d1df8dc146104225780630dfe1681146104475780630f35bcac1461046b57610341565b8063065e53601461034657806306fdde0314610365578063095ea7b3146103e2575b600080fd5b61034e610ade565b6040805160029290920b8252519081900360200190f35b61036d610b57565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103a757818101518382015260200161038f565b50505050905090810190601f1680156103d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61040e600480360360408110156103f857600080fd5b506001600160a01b038135169060200135610bee565b604080519115158252519081900360200190f35b6104456004803603604081101561043857600080fd5b5080359060200135610c0c565b005b61044f610dce565b604080516001600160a01b039092168252519081900360200190f35b61034e610ddd565b61044f610ded565b610483610dfc565b60408051918252519081900360200190f35b61040e600480360360608110156104ab57600080fd5b506001600160a01b03813581169160208101359091169060400135610e02565b610445600480360360208110156104e157600080fd5b50356001600160a01b0316610e8a565b610483610efe565b610501610f04565b6040805160ff9092168252519081900360200190f35b610483610f0d565b61040e6004803603604081101561053557600080fd5b506001600160a01b038135169060200135610f1c565b61040e610f6a565b6104456004803603604081101561056957600080fd5b5080359060200135610f73565b6104456004803603602081101561058c57600080fd5b503561100f565b61048361109d565b61034e6110a3565b610445600480360360c08110156105b957600080fd5b508035600290810b916020810135820b916040820135810b91606081013590910b906001600160a01b036080820135169060a001356110ac565b6104456004803603604081101561060957600080fd5b5080359060200135611906565b6104836119a7565b61040e6119ad565b6104836004803603602081101561063c57600080fd5b50356001600160a01b03166119bb565b6104456119da565b6104836004803603602081101561066a57600080fd5b50356001600160a01b0316611a41565b6106976004803603602081101561069057600080fd5b5035611a62565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610445600480360360208110156106d357600080fd5b8101906020810181356401000000008111156106ee57600080fd5b82018360208201111561070057600080fd5b8035906020019184602083028401116401000000008311171561072257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611b3c945050505050565b6104836004803603608081101561077657600080fd5b508035906020810135906001600160a01b0360408201358116916060013516611bf1565b61034e611fb8565b61044f611fc8565b61036d611fde565b6107ba61203f565b604080516001600160801b039094168452602084019290925282820152519081900360600190f35b61040e600480360360408110156107f857600080fd5b506001600160a01b0381351690602001356120c5565b61040e6004803603604081101561082457600080fd5b506001600160a01b03813516906020013561212d565b610483612141565b610445612154565b61087e6004803603606081101561086057600080fd5b508035906001600160a01b03602082013581169160400135166121c4565b6040805192835260208301919091528051918290030190f35b61040e600480360360208110156108ad57600080fd5b50356001600160a01b03166125da565b61087e6125ef565b61034e6126ff565b61044f61270f565b6107ba61271e565b610445600480360360608110156108f357600080fd5b81359160208101359181019060608101604082013564010000000081111561091a57600080fd5b82018360208201111561092c57600080fd5b8035906020019184600183028401116401000000008311171561094e57600080fd5b50909250905061277a565b610445600480360360e081101561096f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135612833565b610483600480360360408110156109c057600080fd5b506001600160a01b03813581169160200135166129ea565b6109e0612a15565b6040805162ffffff9092168252519081900360200190f35b61044560048036036020811015610a0e57600080fd5b50356001600160a01b0316612a38565b610a26612adf565b604080516001600160801b039586168152938516602085015291841683830152909216606082015290519081900360800190f35b61034e612e1b565b61044560048036036060811015610a7857600080fd5b813591602081013591810190606081016040820135640100000000811115610a9f57600080fd5b820183602082011115610ab157600080fd5b80359060200191846001830284011164010000000083111715610ad357600080fd5b509092509050612e2b565b60085460408051633850c7bd60e01b815290516000926001600160a01b031691633850c7bd9160048083019260e0929190829003018186803b158015610b2357600080fd5b505afa158015610b37573d6000803e3d6000fd5b505050506040513d60e0811015610b4d57600080fd5b5060200151919050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610be35780601f10610bb857610100808354040283529160200191610be3565b820191906000526020600020905b815481529060010190602001808311610bc657829003601f168201915b505050505090505b90565b6000610c02610bfb612ef8565b8484612efc565b5060015b92915050565b600b54600160301b90046001600160a01b03163314610c5f576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600a54600090610da090600160d01b8104600290810b91600160e81b9004900b85158015610c8b575084155b610c955785610d0d565b600954604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610ce057600080fd5b505afa158015610cf4573d6000803e3d6000fd5b505050506040513d6020811015610d0a57600080fd5b50515b86158015610d19575085155b610d235785610d9b565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610d6e57600080fd5b505afa158015610d82573d6000803e3d6000fd5b505050506040513d6020811015610d9857600080fd5b50515b612fe8565b600a54909150610dc790600160d01b8104600290810b91600160e81b9004900b833061308e565b5050505050565b6009546001600160a01b031681565b600b546301000000900460020b81565b6008546001600160a01b031681565b60025490565b6000610e0f8484846131df565b610e7f84610e1b612ef8565b610e7a85604051806060016040528060288152602001614ac1602891396001600160a01b038a16600090815260016020526040812090610e59612ef8565b6001600160a01b03168152602081019190915260400160002054919061333a565b612efc565b5060015b9392505050565b600b54600160301b90046001600160a01b03163314610edd576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b600e5481565b60055460ff1690565b6000610f176133d1565b905090565b6000610c02610f29612ef8565b84610e7a8560016000610f3a612ef8565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061349b565b60105460ff1681565b600b54600160301b90046001600160a01b03163314610fc6576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600c829055600d819055604080518381526020810183905281517fd56b0d2b7ea797f337fd193b1d0c4f146c60fa488b1616739b6bf7466600c809929181900390910190a15050565b600b54600160301b90046001600160a01b03163314611062576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600e8190556040805182815290517f0120f799fc820eabb910038e9cce6e8024add369b4d780181846e300df2844849181900360200190a150565b600d5481565b600b5460020b81565b60026007541415611104576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600755600b54600160301b90046001600160a01b0316331461115c576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b8460020b8660020b12801561118e5750600a54600160b81b9004600290810b810b9087900b8161118857fe5b0760020b155b80156111b75750600a54600160b81b9004600290810b810b9086900b816111b157fe5b0760020b155b6111c057600080fd5b8260020b8460020b1280156111f25750600a54600160b81b9004600290810b810b9085900b816111ec57fe5b0760020b155b801561121b5750600a54600160b81b9004600290810b810b9084900b8161121557fe5b0760020b155b61122457600080fd5b8460020b8360020b14158061123f57508560020b8460020b14155b61124857600080fd5b6001600160a01b03821661125b57600080fd5b6000806112666134f5565b600a549193509150600090819061129290600160d01b8104600290810b91600160e81b9004900b61369e565b600b546001600160801b039283169550911692506000915081906112c490600281810b9163010000009004900b61369e565b6001600160801b039182169450169150600090506112e2838661349b565b905060006112f0838661349b565b600a5490915061131590600160d01b8104600290810b91600160e81b9004900b61369e565b5050600b5490985061133590600281810b9163010000009004900b61369e565b5050600a5490975061136090600160d01b8104600290810b91600160e81b9004900b8a306001613779565b5050600b5461138190600281810b9163010000009004900b89306001613779565b505081156113ab576113ab8a61139884600a613957565b6009546001600160a01b031691906139be565b80156113d3576113d38a6113c083600a613957565b600a546001600160a01b031691906139be565b7fbc4c20ad04f161d631d9ce94d27659391196415aa3c42f6a71c62e905ece782d6113fc610ade565b600954604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561144757600080fd5b505afa15801561145b573d6000803e3d6000fd5b505050506040513d602081101561147157600080fd5b5051600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156114be57600080fd5b505afa1580156114d2573d6000803e3d6000fd5b505050506040513d60208110156114e857600080fd5b505185856114f4610dfc565b6040805160029790970b87526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190a1881561169d576008546001600160a01b031663128acb083060008c1380611555578c600003611557565b8c5b60008e136115795773fffd8963efd1fc6a506488495d951d5263988d25611580565b6401000276a45b3060405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611621578181015183820152602001611609565b50505050905090810190601f16801561164e5780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b15801561167057600080fd5b505af1158015611684573d6000803e3d6000fd5b505050506040513d604081101561169a57600080fd5b50505b8d600a601a6101000a81548162ffffff021916908360020b62ffffff1602179055508c600a601d6101000a81548162ffffff021916908360020b62ffffff1602179055506117dd600a601a9054906101000a900460020b600a601d9054906101000a900460020b600960009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561176657600080fd5b505afa15801561177a573d6000803e3d6000fd5b505050506040513d602081101561179057600080fd5b5051600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610d6e57600080fd5b600a5490985061180490600160d01b8104600290810b91600160e81b9004900b8a3061308e565b50508b600b60006101000a81548162ffffff021916908360020b62ffffff1602179055508a600b60036101000a81548162ffffff021916908360020b62ffffff1602179055506118cf600b60009054906101000a900460020b600b60039054906101000a900460020b600960009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561176657600080fd5b600b549097506118ef90600281810b9163010000009004900b893061308e565b505060016007555050505050505050505050505050565b600b54600160301b90046001600160a01b03163314611959576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b600b5460009061198790600281810b9163010000009004900b85158015610c8b57508415610c955785610d0d565b600b54909150610dc790600281810b9163010000009004900b833061308e565b600c5481565b601054610100900460ff1681565b6001600160a01b0381166000908152602081905260409020545b919050565b600b54600160301b90046001600160a01b03163314611a2d576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6010805460ff19811660ff90911615179055565b6001600160a01b0381166000908152600660205260408120610c0690613a2a565b600080600080600b60069054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b031614611ad0576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b611ad86134f5565b5050600a54611b0a90600160d01b8104600290810b91600160e81b9004900b611b0282828a613a2e565b306000613779565b600b549195509350611b3090600281810b9163010000009004900b611b0282828a613a2e565b94969395509392915050565b600b54600160301b90046001600160a01b03163314611b8f576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b60005b81518160ff161015611bed576001600f6000848460ff1681518110611bb357fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101611b92565b5050565b600080851180611c015750600084115b611c0a57600080fd5b600c548511158015611c1e5750600d548411155b611c2757600080fd5b6001600160a01b03831615801590611c4857506001600160a01b0383163014155b611c7e576040805162461bcd60e51b8152602060048201526002602482015261746f60f01b604482015290519081900360640190fd5b60105460ff161580611c9f5750336000908152600f602052604090205460ff165b611ca857600080fd5b600080611cb36134f5565b915091506000611cc9611cc4610ade565b613a6e565b90506000611d12611ce36001600160a01b03841680613dad565b6ec097ce7bc90715b34b9f10000000007801000000000000000000000000000000000000000000000000613e06565b9050600080611d1f6125ef565b9092509050611d51611d4a6ec097ce7bc90715b34b9f1000000000611d448e87613dad565b90613957565b8b9061349b565b96508a15611d7157600954611d71906001600160a01b031689308e613eb5565b8915611d8f57600a54611d8f906001600160a01b031689308d613eb5565b6000611d99610dfc565b90508015611f07576000611dc06ec097ce7bc90715b34b9f1000000000611d448688613dad565b9050611dd9611dcf828561349b565b611d448b85613dad565b601054909950610100900460ff1615611f0557600a54600954604080516370a0823160e01b81523060048201529051611e5693600160d01b8104600290810b94600160e81b909204900b926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561176657600080fd5b600a54909850611e7d90600160d01b8104600290810b91600160e81b9004900b8a3061308e565b5050600b54600954604080516370a0823160e01b81523060048201529051611ee293600281810b946301000000909204900b926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561176657600080fd5b600b54909750611f0290600281810b9163010000009004900b893061308e565b50505b505b611f118a89613f2a565b60408051898152602081018e90528082018d905290516001600160a01b03808d1692908c16917f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69181900360600190a3600e541580611f725750600e548111155b611fa9576040805162461bcd60e51b81526020600482015260036024820152620dac2f60eb1b604482015290519081900360640190fd5b50505050505050949350505050565b600a54600160e81b900460020b81565b600b54600160301b90046001600160a01b031681565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610be35780601f10610bb857610100808354040283529160200191610be3565b600b546000908190819081908190819061206790600281810b9163010000009004900b61369e565b600b54929550909350915061208b90600281810b9163010000009004900b8561401a565b90955093506120a3856001600160801b03841661349b565b94506120b8846001600160801b03831661349b565b9350829550505050909192565b6000610c026120d2612ef8565b84610e7a85604051806060016040528060258152602001614b7d60259139600160006120fc612ef8565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061333a565b6000610c0261213a612ef8565b84846131df565b6ec097ce7bc90715b34b9f100000000081565b600b54600160301b90046001600160a01b031633146121a7576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6010805461ff001981166101009182900460ff1615909102179055565b6000806002600754141561221f576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260075584612276576040805162461bcd60e51b815260206004820152600660248201527f7368617265730000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0384166122b6576040805162461bcd60e51b8152602060048201526002602482015261746f60f01b604482015290519081900360640190fd5b6122be6134f5565b5050600a5460009081906122f590600160d01b8104600290810b91600160e81b9004900b6122ed82828c613a2e565b896000613779565b600b549193509150600090819061232890600281810b9163010000009004900b61232082828e613a2e565b8b6000613779565b915091506000612336610dfc565b905060006123d682611d448d600960009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156123a457600080fd5b505afa1580156123b8573d6000803e3d6000fd5b505050506040513d60208110156123ce57600080fd5b505190613dad565b9050600061244483611d448e600a60009054906101000a90046001600160a01b03166001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156123a457600080fd5b9050811561246357600954612463906001600160a01b03168c846139be565b801561248057600a54612480906001600160a01b03168c836139be565b6124948261248e898861349b565b9061349b565b98506124a48161248e888761349b565b97506001600160a01b038a163314806125325750336001600160a01b03168a6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124fb57600080fd5b505afa15801561250f573d6000803e3d6000fd5b505050506040513d602081101561252557600080fd5b50516001600160a01b0316145b612569576040805162461bcd60e51b815260206004820152600360248201526237bbb760e91b604482015290519081900360640190fd5b6125738a8d6140c4565b604080518d8152602081018b90528082018a905290516001600160a01b03808e1692908d16917febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9181900360600190a3505050505050506001600781905550935093915050565b600f6020526000908152604090205460ff1681565b6000806000806125fd61271e565b925092505060008061260d61203f565b600954604080516370a0823160e01b8152306004820152905193965091945061269b9350859261248e9289926001600160a01b0316916370a0823191602480820192602092909190829003018186803b15801561266957600080fd5b505afa15801561267d573d6000803e3d6000fd5b505050506040513d602081101561269357600080fd5b50519061349b565b600a54604080516370a0823160e01b815230600482015290519298506126f592849261248e9288926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561266957600080fd5b9450505050509091565b600a54600160b81b900460020b81565b600a546001600160a01b031681565b60008060008060008061274f600a601a9054906101000a900460020b600a601d9054906101000a900460020b61369e565b600a54929550909350915061208b90600160d01b8104600290810b91600160e81b9004900b8561401a565b6008546001600160a01b0316331461279157600080fd5b6000828260208110156127a357600080fd5b50356001600160a01b03169050308114156127f75784156127d5576009546127d5906001600160a01b031633876139be565b83156127f257600a546127f2906001600160a01b031633866139be565b610dc7565b841561281557600954612815906001600160a01b0316823388613eb5565b8315610dc757600a54610dc7906001600160a01b0316823387613eb5565b83421115612888576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b6001600160a01b03871660009081526006602052604081207f0000000000000000000000000000000000000000000000000000000000000000908990899089906128d190613a2a565b8960405160200180878152602001866001600160a01b03168152602001856001600160a01b031681526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600061293a826141c0565b9050600061294a8287878761420c565b9050896001600160a01b0316816001600160a01b0316146129b2576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a1660009081526006602052604090206129d390614381565b6129de8a8a8a612efc565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600a5474010000000000000000000000000000000000000000900462ffffff1681565b600b54600160301b90046001600160a01b03163314612a8b576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6001600160a01b038116612a9e57600080fd5b600b80546001600160a01b03909216600160301b027fffffffffffff0000000000000000000000000000000000000000ffffffffffff909216919091179055565b600080600080600b60069054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b031614612b4d576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b612b556134f5565b5050600a54612b7990600160d01b8104600290810b91600160e81b9004900b61369e565b600b549196509450612b9a9150600281810b9163010000009004900b61369e565b600854600a54604080516309e3d67b60e31b8152306004820152600160d01b909204600290810b900b6024830181905260448301526001600160801b03808b1660648401528916608483015280519497509295506001600160a01b039091169350634f1eb3d89260a480830193928290030181600087803b158015612c1e57600080fd5b505af1158015612c32573d6000803e3d6000fd5b505050506040513d6040811015612c4857600080fd5b5050600854600b54604080516309e3d67b60e31b8152306004820152600283810b810b60248301526301000000909304830b90920b60448301526001600160801b0380861660648401528416608483015280516001600160a01b0390931692634f1eb3d89260a48082019392918290030181600087803b158015612ccb57600080fd5b505af1158015612cdf573d6000803e3d6000fd5b505050506040513d6040811015612cf557600080fd5b5050600a54600954604080516370a0823160e01b81523060048201529051600093612d6393600160d01b8204600290810b94600160e81b909304900b926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561176657600080fd5b600a54909150612d8a90600160d01b8104600290810b91600160e81b9004900b833061308e565b5050600b54600954604080516370a0823160e01b81523060048201529051600093612df193600282810b946301000000909304900b926001600160a01b03909116916370a08231916024808301926020929190829003018186803b15801561176657600080fd5b600b54909150612e1190600281810b9163010000009004900b833061308e565b5050505090919293565b600a54600160d01b900460020b81565b6008546001600160a01b03163314612e4257600080fd5b600082826020811015612e5457600080fd5b50356001600160a01b031690506000851315612eaf576001600160a01b038116301415612e9757600954612e92906001600160a01b031633876139be565b6127f2565b6009546127f2906001600160a01b0316823388613eb5565b6000841315610dc7576001600160a01b038116301415612ee057600a546127f2906001600160a01b031633866139be565b600a54610dc7906001600160a01b0316823387613eb5565b3390565b6001600160a01b038316612f415760405162461bcd60e51b8152600401808060200182810382526024815260200180614b2f6024913960400191505060405180910390fd5b6001600160a01b038216612f865760405162461bcd60e51b81526004018080602001828103825260228152602001806149ee6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600080600860009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561303957600080fd5b505afa15801561304d573d6000803e3d6000fd5b505050506040513d60e081101561306357600080fd5b505190506130848161307488613a6e565b61307d88613a6e565b878761438a565b9695505050505050565b6000806001600160801b038416156131d657600854604080516001600160a01b0386811660208084019190915283518084038201815283850194859052633c8a7d8d60e01b909452306044840181815260028d810b60648701528c900b60848601526001600160801b038b1660a486015260a060c48601908152865160e487015286519490971696633c8a7d8d9692958e958e958e9594939261010401919085019080838360005b8381101561314e578181015183820152602001613136565b50505050905090810190601f16801561317b5780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b15801561319d57600080fd5b505af11580156131b1573d6000803e3d6000fd5b505050506040513d60408110156131c757600080fd5b50805160209091015190925090505b94509492505050565b6001600160a01b0383166132245760405162461bcd60e51b8152600401808060200182810382526025815260200180614b0a6025913960400191505060405180910390fd5b6001600160a01b0382166132695760405162461bcd60e51b81526004018080602001828103825260238152602001806149a96023913960400191505060405180910390fd5b613274838383613a25565b6132b181604051806060016040528060268152602001614a10602691396001600160a01b038616600090815260208190526040902054919061333a565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546132e0908261349b565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156133c95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561338e578181015183820152602001613376565b50505050905090810190601f1680156133bb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60007f00000000000000000000000000000000000000000000000000000000000000006133fc614442565b141561342957507f0000000000000000000000000000000000000000000000000000000000000000610beb565b6134947f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614446565b9050610beb565b600082820183811015610e83576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600a54600090819061351c90600160d01b8104600290810b91600160e81b9004900b61369e565b50909250506001600160801b038216156135d157600854600a546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b602483015260006044830181905281516001600160a01b039094169363a34123a79360648082019493918390030190829087803b1580156135a457600080fd5b505af11580156135b8573d6000803e3d6000fd5b505050506040513d60408110156135ce57600080fd5b50505b600b546135ec90600281810b9163010000009004900b61369e565b50909150506001600160801b0381161561369a57600854600b546040805163a34123a760e01b8152600283810b810b60048301526301000000909304830b90920b602483015260006044830181905281516001600160a01b039094169363a34123a79360648082019493918390030190829087803b15801561366d57600080fd5b505af1158015613681573d6000803e3d6000fd5b505050506040513d604081101561369757600080fd5b50505b9091565b604080513060601b602080830191909152600285810b60e890811b60348501529085900b901b60378301528251808303601a018152603a83018085528151919092012060085463514ea4bf60e01b909252603e830181905292516000938493849391926001600160a01b039092169163514ea4bf91605e8082019260a092909190829003018186803b15801561373357600080fd5b505afa158015613747573d6000803e3d6000fd5b505050506040513d60a081101561375d57600080fd5b5080516060820151608090920151909891975095509350505050565b6000806001600160801b0385161561394d576008546040805163a34123a760e01b815260028a810b600483015289900b60248201526001600160801b0388166044820152815160009384936001600160a01b039091169263a34123a7926064808301939282900301818787803b1580156137f257600080fd5b505af1158015613806573d6000803e3d6000fd5b505050506040513d604081101561381c57600080fd5b508051602090910151909250905060008561383f5761383a836144a8565b613848565b6001600160801b035b905060008661385f5761385a836144a8565b613868565b6001600160801b035b90506000826001600160801b0316118061388b57506000816001600160801b0316115b1561394857600854604080516309e3d67b60e31b81526001600160a01b038b8116600483015260028f810b60248401528e900b60448301526001600160801b038087166064840152851660848301528251931692634f1eb3d89260a4808401939192918290030181600087803b15801561390457600080fd5b505af1158015613918573d6000803e3d6000fd5b505050506040513d604081101561392e57600080fd5b5080516020909101516001600160801b0391821697501694505b505050505b9550959350505050565b60008082116139ad576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816139b657fe5b049392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052613a259084906144bf565b505050565b5490565b600080613a3b858561369e565b50509050613a65613a60613a4d610dfc565b611d446001600160801b03851687613dad565b6144a8565b95945050505050565b60008060008360020b12613a85578260020b613a8d565b8260020b6000035b9050620d89e8811115613acb576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216613aec57700100000000000000000000000000000000613afe565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613b32576ffff97272373d413259a46990580e213a0260801c5b6004821615613b51576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613b70576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613b8f576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613bae576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613bcd576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613bec576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613c0c576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613c2c576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613c4c576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613c6c576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613c8c576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613cac576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613ccc576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613cec576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613d0d576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613d2d576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613d4c576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613d69576b048a170391f7dc42444e8fa20260801c5b60008460020b1315613d84578060001981613d8057fe5b0490505b640100000000810615613d98576001613d9b565b60005b60ff16602082901c0192505050919050565b600082613dbc57506000610c06565b82820282848281613dc957fe5b0414610e835760405162461bcd60e51b8152600401808060200182810382526021815260200180614aa06021913960400191505060405180910390fd5b6000808060001985870986860292508281109083900303905080613e3c5760008411613e3157600080fd5b508290049050610e83565b808411613e4857600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b179052613f249085906144bf565b50505050565b6001600160a01b038216613f85576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b613f9160008383613a25565b600254613f9e908261349b565b6002556001600160a01b038216600090815260208190526040902054613fc4908261349b565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000806000600860009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561406d57600080fd5b505afa158015614081573d6000803e3d6000fd5b505050506040513d60e081101561409757600080fd5b505190506140b7816140a888613a6e565b6140b188613a6e565b87614570565b9250925050935093915050565b6001600160a01b0382166141095760405162461bcd60e51b8152600401808060200182810382526021815260200180614ae96021913960400191505060405180910390fd5b61411582600083613a25565b614152816040518060600160405280602281526020016149cc602291396001600160a01b038516600090815260208190526040902054919061333a565b6001600160a01b038316600090815260208190526040902055600254614178908261460b565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60006141ca6133d1565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561426d5760405162461bcd60e51b8152600401808060200182810382526022815260200180614a366022913960400191505060405180910390fd5b8360ff16601b148061428257508360ff16601c145b6142bd5760405162461bcd60e51b8152600401808060200182810382526022815260200180614a7e6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614319573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613a65576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b80546001019055565b6000836001600160a01b0316856001600160a01b031611156143aa579293925b846001600160a01b0316866001600160a01b0316116143d5576143ce858585614668565b9050613a65565b836001600160a01b0316866001600160a01b031610156144375760006143fc878686614668565b9050600061440b8789866146cb565b9050806001600160801b0316826001600160801b03161061442c578061442e565b815b92505050613a65565b6130848585846146cb565b4690565b6000838383614453614442565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b60006001600160801b038211156144bb57fe5b5090565b6000614514826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166147109092919063ffffffff16565b805190915015613a255780806020019051602081101561453357600080fd5b5051613a255760405162461bcd60e51b815260040180806020018281038252602a815260200180614b53602a913960400191505060405180910390fd5b600080836001600160a01b0316856001600160a01b03161115614591579293925b846001600160a01b0316866001600160a01b0316116145bc576145b585858561471f565b91506131d6565b836001600160a01b0316866001600160a01b031610156145f5576145e186858561471f565b91506145ee858785614788565b90506131d6565b614600858585614788565b905094509492505050565b600082821115614662576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000826001600160a01b0316846001600160a01b03161115614688579192915b60006146ab856001600160a01b0316856001600160a01b0316600160601b613e06565b9050613a656146c684838888036001600160a01b0316613e06565b6147cb565b6000826001600160a01b0316846001600160a01b031611156146eb579192915b6147086146c683600160601b8787036001600160a01b0316613e06565b949350505050565b606061470884846000856147e1565b6000826001600160a01b0316846001600160a01b0316111561473f579192915b836001600160a01b0316614778606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316613e06565b8161477f57fe5b04949350505050565b6000826001600160a01b0316846001600160a01b031611156147a8579192915b614708826001600160801b03168585036001600160a01b0316600160601b613e06565b806001600160801b03811681146119d557600080fd5b6060824710156148225760405162461bcd60e51b8152600401808060200182810382526026815260200180614a586026913960400191505060405180910390fd5b61482b8561493c565b61487c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106148ba5780518252601f19909201916020918201910161489b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461491c576040519150601f19603f3d011682016040523d82523d6000602084013e614921565b606091505b5091509150614931828286614942565b979650505050505050565b3b151590565b60608315614951575081610e83565b8251156149615782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561338e57818101518382015260200161337656fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c45434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a";

export class Hypervisor__factory extends ContractFactory {
  constructor(
    ...args: [signer: Signer] | ConstructorParameters<typeof ContractFactory>
  ) {
    if (args.length === 1) {
      super(_abi, _bytecode, args[0]);
    } else {
      super(...args);
    }
  }

  deploy(
    _pool: string,
    _owner: string,
    name: string,
    symbol: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<Hypervisor> {
    return super.deploy(
      _pool,
      _owner,
      name,
      symbol,
      overrides || {}
    ) as Promise<Hypervisor>;
  }
  getDeployTransaction(
    _pool: string,
    _owner: string,
    name: string,
    symbol: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): TransactionRequest {
    return super.getDeployTransaction(
      _pool,
      _owner,
      name,
      symbol,
      overrides || {}
    );
  }
  attach(address: string): Hypervisor {
    return super.attach(address) as Hypervisor;
  }
  connect(signer: Signer): Hypervisor__factory {
    return super.connect(signer) as Hypervisor__factory;
  }
  static readonly bytecode = _bytecode;
  static readonly abi = _abi;
  static createInterface(): HypervisorInterface {
    return new utils.Interface(_abi) as HypervisorInterface;
  }
  static connect(
    address: string,
    signerOrProvider: Signer | Provider
  ): Hypervisor {
    return new Contract(address, _abi, signerOrProvider) as Hypervisor;
  }
}