UNPKG

clanker-sdk

Version:
6,824 lines 398 kB
// src/legacyFeeClaims/index.ts
import { StandardMerkleTree } from "@openzeppelin/merkle-tree";
import { encodeFunctionData, isAddressEqual } from "viem";
import { simulateContract as simulateContract2, writeContract as writeContract2 } from "viem/actions";

// src/abi/legacyFeeClaims/ClankerSafeErc20Spender.ts
var Clanker_v0_abi = [
  {
    type: "constructor",
    inputs: [
      { name: "owner_", type: "address", internalType: "address" },
      { name: "teamSpender_", type: "address", internalType: "address" },
      { name: "teamGrantedTokens_", type: "address[]", internalType: "address[]" }
    ],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "initializeTokenCreator",
    inputs: [
      { name: "token", type: "address", internalType: "address" },
      { name: "newCreator", type: "address", internalType: "address" },
      { name: "proof", type: "bytes32[]", internalType: "bytes32[]" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "owner",
    inputs: [],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "renounceOwnership",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "setTeamSpender",
    inputs: [{ name: "teamSpender_", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "setTokenCreatorRoot",
    inputs: [{ name: "tokenCreatorRoot_", type: "bytes32", internalType: "bytes32" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "teamGrantedTokens",
    inputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "teamGrantedTokensMap",
    inputs: [{ name: "token", type: "address", internalType: "address" }],
    outputs: [{ name: "teamGranted", type: "bool", internalType: "bool" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "teamSpender",
    inputs: [],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "teamTransfer",
    inputs: [
      { name: "safe", type: "address", internalType: "address" },
      { name: "token", type: "address", internalType: "address" },
      { name: "recipient", type: "address", internalType: "address" },
      { name: "amount", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "teamTransferEth",
    inputs: [{ name: "safe", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "tokenCreator",
    inputs: [{ name: "token", type: "address", internalType: "address" }],
    outputs: [{ name: "creator", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "tokenCreatorRoot",
    inputs: [],
    outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "tokenCreatorTransfer",
    inputs: [
      { name: "safe", type: "address", internalType: "address" },
      { name: "token", type: "address", internalType: "address" },
      { name: "recipient", type: "address", internalType: "address" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "transferOwnership",
    inputs: [{ name: "newOwner", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateTokenCreator",
    inputs: [
      { name: "token", type: "address", internalType: "address" },
      { name: "newCreator", type: "address", internalType: "address" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "event",
    name: "InitializeTokenCreator",
    inputs: [
      { name: "token", type: "address", indexed: false, internalType: "address" },
      { name: "initializer", type: "address", indexed: false, internalType: "address" },
      { name: "creator", type: "address", indexed: false, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "OwnershipTransferred",
    inputs: [
      { name: "previousOwner", type: "address", indexed: true, internalType: "address" },
      { name: "newOwner", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "SetTeamSpender",
    inputs: [
      { name: "previousTeamSpender", type: "address", indexed: true, internalType: "address" },
      { name: "newTeamSpender", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "SetTokenCreatorRoot",
    inputs: [
      { name: "tokenCreatorRoot", type: "bytes32", indexed: false, internalType: "bytes32" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "Transfer",
    inputs: [
      { name: "safe", type: "address", indexed: true, internalType: "address" },
      { name: "token", type: "address", indexed: true, internalType: "address" },
      { name: "amount", type: "uint256", indexed: false, internalType: "uint256" },
      { name: "spender", type: "address", indexed: false, internalType: "address" },
      { name: "recipient", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateTokenCreator",
    inputs: [
      { name: "token", type: "address", indexed: false, internalType: "address" },
      { name: "previousCreator", type: "address", indexed: false, internalType: "address" },
      { name: "newCreator", type: "address", indexed: false, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "error",
    name: "InsufficientBalance",
    inputs: [
      { name: "safe", type: "address", internalType: "address" },
      { name: "token", type: "address", internalType: "address" },
      { name: "balance", type: "uint256", internalType: "uint256" }
    ]
  },
  { type: "error", name: "InvalidProof", inputs: [] },
  {
    type: "error",
    name: "NotAuthorizedToSpend",
    inputs: [
      { name: "sender", type: "address", internalType: "address" },
      { name: "token", type: "address", internalType: "address" }
    ]
  },
  {
    type: "error",
    name: "OwnableInvalidOwner",
    inputs: [{ name: "owner", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "OwnableUnauthorizedAccount",
    inputs: [{ name: "account", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "TokenCreatorAlreadyInitialized",
    inputs: [
      { name: "token", type: "address", internalType: "address" },
      { name: "delegate", type: "address", internalType: "address" }
    ]
  },
  {
    type: "error",
    name: "TokenCreatorRootAlreadySet",
    inputs: [{ name: "tokenCreatorRoot", type: "bytes32", internalType: "bytes32" }]
  },
  { type: "error", name: "TokenCreatorRootNotSet", inputs: [] },
  {
    type: "error",
    name: "Unauthorized",
    inputs: [{ name: "unauthorized", type: "address", internalType: "address" }]
  }
];

// src/utils/clankers.ts
import {
  abstract,
  arbitrum,
  base,
  baseSepolia,
  mainnet,
  monadTestnet,
  unichain
} from "viem/chains";

// src/abi/v0/Clanker.ts
var Clanker_v0_abi2 = [
  {
    inputs: [
      { internalType: "address", name: "taxCollector_", type: "address" },
      { internalType: "address", name: "weth_", type: "address" },
      { internalType: "address", name: "locker_", type: "address" },
      {
        internalType: "address",
        name: "uniswapV3Factory_",
        type: "address"
      },
      {
        internalType: "address",
        name: "positionManager_",
        type: "address"
      },
      {
        internalType: "uint64",
        name: "defaultLockingPeriod_",
        type: "uint64"
      },
      { internalType: "address", name: "swapRouter_", type: "address" }
    ],
    stateMutability: "nonpayable",
    type: "constructor"
  },
  {
    inputs: [{ internalType: "address", name: "owner", type: "address" }],
    name: "OwnableInvalidOwner",
    type: "error"
  },
  {
    inputs: [{ internalType: "address", name: "account", type: "address" }],
    name: "OwnableUnauthorizedAccount",
    type: "error"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "previousOwner",
        type: "address"
      },
      {
        indexed: true,
        internalType: "address",
        name: "newOwner",
        type: "address"
      }
    ],
    name: "OwnershipTransferred",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "tokenAddress",
        type: "address"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "lpNftId",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "address",
        name: "deployer",
        type: "address"
      },
      {
        indexed: false,
        internalType: "string",
        name: "name",
        type: "string"
      },
      {
        indexed: false,
        internalType: "string",
        name: "symbol",
        type: "string"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "supply",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "_supply",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "address",
        name: "lockerAddress",
        type: "address"
      }
    ],
    name: "TokenCreated",
    type: "event"
  },
  {
    inputs: [],
    name: "defaultLockingPeriod",
    outputs: [{ internalType: "uint64", name: "", type: "uint64" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "string", name: "_name", type: "string" },
      { internalType: "string", name: "_symbol", type: "string" },
      { internalType: "uint256", name: "_supply", type: "uint256" },
      { internalType: "int24", name: "_initialTick", type: "int24" },
      { internalType: "uint24", name: "_fee", type: "uint24" },
      { internalType: "bytes32", name: "_salt", type: "bytes32" },
      { internalType: "address", name: "_deployer", type: "address" }
    ],
    name: "deployToken",
    outputs: [
      { internalType: "contract Token", name: "token", type: "address" },
      { internalType: "uint256", name: "tokenId", type: "uint256" }
    ],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "deployer", type: "address" },
      { internalType: "string", name: "name", type: "string" },
      { internalType: "string", name: "symbol", type: "string" },
      { internalType: "uint256", name: "supply", type: "uint256" }
    ],
    name: "generateSalt",
    outputs: [
      { internalType: "bytes32", name: "salt", type: "bytes32" },
      { internalType: "address", name: "token", type: "address" }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint24", name: "_fee", type: "uint24" }
    ],
    name: "initialSwapTokens",
    outputs: [],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [],
    name: "liquidityLocker",
    outputs: [
      {
        internalType: "contract ILockerFactory",
        name: "",
        type: "address"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "lpFeesCut",
    outputs: [{ internalType: "uint8", name: "", type: "uint8" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "owner",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "positionManager",
    outputs: [
      {
        internalType: "contract INonfungiblePositionManager",
        name: "",
        type: "address"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "deployer", type: "address" },
      { internalType: "string", name: "name", type: "string" },
      { internalType: "string", name: "symbol", type: "string" },
      { internalType: "uint256", name: "supply", type: "uint256" },
      { internalType: "bytes32", name: "salt", type: "bytes32" }
    ],
    name: "predictToken",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "protocolCut",
    outputs: [{ internalType: "uint8", name: "", type: "uint8" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "renounceOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "swapRouter",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "taxCollector",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "taxRate",
    outputs: [{ internalType: "uint8", name: "", type: "uint8" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newOwner", type: "address" }],
    name: "transferOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "uniswapV3Factory",
    outputs: [
      {
        internalType: "contract IUniswapV3Factory",
        name: "",
        type: "address"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "uint64", name: "newPeriod", type: "uint64" }],
    name: "updateDefaultLockingPeriod",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newLocker", type: "address" }],
    name: "updateLiquidityLocker",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "uint8", name: "newFee", type: "uint8" }],
    name: "updateProtocolFees",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newCollector", type: "address" }],
    name: "updateTaxCollector",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "uint8", name: "newRate", type: "uint8" }],
    name: "updateTaxRate",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "weth",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  }
];

// src/abi/v1/Clanker.ts
var Clanker_v1_abi = [
  {
    inputs: [
      { internalType: "address", name: "taxCollector_", type: "address" },
      { internalType: "address", name: "weth_", type: "address" },
      { internalType: "address", name: "locker_", type: "address" },
      { internalType: "address", name: "uniswapV3Factory_", type: "address" },
      { internalType: "address", name: "positionManager_", type: "address" },
      { internalType: "uint64", name: "defaultLockingPeriod_", type: "uint64" },
      { internalType: "address", name: "swapRouter_", type: "address" },
      { internalType: "address", name: "owner_", type: "address" }
    ],
    stateMutability: "nonpayable",
    type: "constructor"
  },
  { inputs: [], name: "Deprecated", type: "error" },
  {
    inputs: [{ internalType: "address", name: "owner", type: "address" }],
    name: "OwnableInvalidOwner",
    type: "error"
  },
  {
    inputs: [{ internalType: "address", name: "account", type: "address" }],
    name: "OwnableUnauthorizedAccount",
    type: "error"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "previousOwner",
        type: "address"
      },
      {
        indexed: true,
        internalType: "address",
        name: "newOwner",
        type: "address"
      }
    ],
    name: "OwnershipTransferred",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "tokenAddress",
        type: "address"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "lpNftId",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "address",
        name: "deployer",
        type: "address"
      },
      { indexed: false, internalType: "uint256", name: "fid", type: "uint256" },
      { indexed: false, internalType: "string", name: "name", type: "string" },
      {
        indexed: false,
        internalType: "string",
        name: "symbol",
        type: "string"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "supply",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "address",
        name: "lockerAddress",
        type: "address"
      },
      {
        indexed: false,
        internalType: "string",
        name: "castHash",
        type: "string"
      }
    ],
    name: "TokenCreated",
    type: "event"
  },
  {
    inputs: [],
    name: "bundleFeeSwitch",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "defaultLockingPeriod",
    outputs: [{ internalType: "uint64", name: "", type: "uint64" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "string", name: "_name", type: "string" },
      { internalType: "string", name: "_symbol", type: "string" },
      { internalType: "uint256", name: "_supply", type: "uint256" },
      { internalType: "int24", name: "_initialTick", type: "int24" },
      { internalType: "uint24", name: "_fee", type: "uint24" },
      { internalType: "bytes32", name: "_salt", type: "bytes32" },
      { internalType: "address", name: "_deployer", type: "address" },
      { internalType: "uint256", name: "_fid", type: "uint256" },
      { internalType: "string", name: "_image", type: "string" },
      { internalType: "string", name: "_castHash", type: "string" }
    ],
    name: "deployToken",
    outputs: [
      { internalType: "contract Token", name: "token", type: "address" },
      { internalType: "uint256", name: "tokenId", type: "uint256" }
    ],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [],
    name: "deprecated",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "deployer", type: "address" },
      { internalType: "uint256", name: "fid", type: "uint256" },
      { internalType: "string", name: "name", type: "string" },
      { internalType: "string", name: "symbol", type: "string" },
      { internalType: "string", name: "image", type: "string" },
      { internalType: "string", name: "castHash", type: "string" },
      { internalType: "uint256", name: "supply", type: "uint256" }
    ],
    name: "generateSalt",
    outputs: [
      { internalType: "bytes32", name: "salt", type: "bytes32" },
      { internalType: "address", name: "token", type: "address" }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint24", name: "_fee", type: "uint24" }
    ],
    name: "initialSwapTokens",
    outputs: [],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [],
    name: "liquidityLocker",
    outputs: [{ internalType: "contract ILockerFactory", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "lpFeesCut",
    outputs: [{ internalType: "uint8", name: "", type: "uint8" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "owner",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "positionManager",
    outputs: [
      {
        internalType: "contract INonfungiblePositionManager",
        name: "",
        type: "address"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "deployer", type: "address" },
      { internalType: "uint256", name: "fid", type: "uint256" },
      { internalType: "string", name: "name", type: "string" },
      { internalType: "string", name: "symbol", type: "string" },
      { internalType: "string", name: "image", type: "string" },
      { internalType: "string", name: "castHash", type: "string" },
      { internalType: "uint256", name: "supply", type: "uint256" },
      { internalType: "bytes32", name: "salt", type: "bytes32" }
    ],
    name: "predictToken",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "protocolCut",
    outputs: [{ internalType: "uint8", name: "", type: "uint8" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "renounceOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "bool", name: "_deprecated", type: "bool" }],
    name: "setDeprecated",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "swapRouter",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "taxCollector",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "taxRate",
    outputs: [{ internalType: "uint8", name: "", type: "uint8" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "bool", name: "_enabled", type: "bool" }],
    name: "toggleBundleFeeSwitch",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newOwner", type: "address" }],
    name: "transferOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "uniswapV3Factory",
    outputs: [{ internalType: "contract IUniswapV3Factory", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "uint64", name: "newPeriod", type: "uint64" }],
    name: "updateDefaultLockingPeriod",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newLocker", type: "address" }],
    name: "updateLiquidityLocker",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "uint8", name: "newFee", type: "uint8" }],
    name: "updateProtocolFees",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newCollector", type: "address" }],
    name: "updateTaxCollector",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "uint8", name: "newRate", type: "uint8" }],
    name: "updateTaxRate",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "weth",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  }
];

// src/abi/v2/Clanker.ts
var Clanker_v2_abi = [
  {
    inputs: [
      { internalType: "address", name: "locker_", type: "address" },
      { internalType: "address", name: "uniswapV3Factory_", type: "address" },
      { internalType: "address", name: "positionManager_", type: "address" },
      { internalType: "address", name: "swapRouter_", type: "address" },
      { internalType: "address", name: "owner_", type: "address" }
    ],
    stateMutability: "nonpayable",
    type: "constructor"
  },
  { inputs: [], name: "Deprecated", type: "error" },
  { inputs: [], name: "InvalidConfig", type: "error" },
  {
    inputs: [{ internalType: "address", name: "user", type: "address" }],
    name: "NotAdmin",
    type: "error"
  },
  {
    inputs: [{ internalType: "address", name: "token", type: "address" }],
    name: "NotAllowedPairedToken",
    type: "error"
  },
  {
    inputs: [{ internalType: "address", name: "owner", type: "address" }],
    name: "OwnableInvalidOwner",
    type: "error"
  },
  {
    inputs: [{ internalType: "address", name: "account", type: "address" }],
    name: "OwnableUnauthorizedAccount",
    type: "error"
  },
  {
    inputs: [{ internalType: "address", name: "token", type: "address" }],
    name: "TokenNotFound",
    type: "error"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "previousOwner",
        type: "address"
      },
      {
        indexed: true,
        internalType: "address",
        name: "newOwner",
        type: "address"
      }
    ],
    name: "OwnershipTransferred",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "tokenAddress",
        type: "address"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "positionId",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "address",
        name: "deployer",
        type: "address"
      },
      { indexed: false, internalType: "uint256", name: "fid", type: "uint256" },
      { indexed: false, internalType: "string", name: "name", type: "string" },
      {
        indexed: false,
        internalType: "string",
        name: "symbol",
        type: "string"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "supply",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "address",
        name: "lockerAddress",
        type: "address"
      },
      {
        indexed: false,
        internalType: "string",
        name: "castHash",
        type: "string"
      }
    ],
    name: "TokenCreated",
    type: "event"
  },
  {
    inputs: [{ internalType: "address", name: "", type: "address" }],
    name: "admins",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "", type: "address" }],
    name: "allowedPairedTokens",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "token", type: "address" }],
    name: "claimRewards",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "string", name: "_name", type: "string" },
      { internalType: "string", name: "_symbol", type: "string" },
      { internalType: "uint256", name: "_supply", type: "uint256" },
      { internalType: "uint24", name: "_fee", type: "uint24" },
      { internalType: "bytes32", name: "_salt", type: "bytes32" },
      { internalType: "address", name: "_deployer", type: "address" },
      { internalType: "uint256", name: "_fid", type: "uint256" },
      { internalType: "string", name: "_image", type: "string" },
      { internalType: "string", name: "_castHash", type: "string" },
      {
        components: [
          { internalType: "int24", name: "tick", type: "int24" },
          { internalType: "address", name: "pairedToken", type: "address" },
          { internalType: "uint24", name: "devBuyFee", type: "uint24" }
        ],
        internalType: "struct Clanker.PoolConfig",
        name: "_poolConfig",
        type: "tuple"
      }
    ],
    name: "deployToken",
    outputs: [
      { internalType: "contract ClankerToken", name: "token", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" }
    ],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "", type: "address" }],
    name: "deploymentInfoForToken",
    outputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" },
      { internalType: "address", name: "locker", type: "address" }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "deprecated",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "user", type: "address" }],
    name: "getTokensDeployedByUser",
    outputs: [
      {
        components: [
          { internalType: "address", name: "token", type: "address" },
          { internalType: "uint256", name: "positionId", type: "uint256" },
          { internalType: "address", name: "locker", type: "address" }
        ],
        internalType: "struct Clanker.DeploymentInfo[]",
        name: "",
        type: "tuple[]"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "liquidityLocker",
    outputs: [{ internalType: "contract LpLockerv2", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "owner",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "positionManager",
    outputs: [
      {
        internalType: "contract INonfungiblePositionManager",
        name: "",
        type: "address"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "renounceOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "admin", type: "address" },
      { internalType: "bool", name: "isAdmin", type: "bool" }
    ],
    name: "setAdmin",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "bool", name: "_deprecated", type: "bool" }],
    name: "setDeprecated",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "swapRouter",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "bool", name: "allowed", type: "bool" }
    ],
    name: "toggleAllowedPairedToken",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "", type: "address" },
      { internalType: "uint256", name: "", type: "uint256" }
    ],
    name: "tokensDeployedByUsers",
    outputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" },
      { internalType: "address", name: "locker", type: "address" }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newOwner", type: "address" }],
    name: "transferOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "uniswapV3Factory",
    outputs: [{ internalType: "contract IUniswapV3Factory", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newLocker", type: "address" }],
    name: "updateLiquidityLocker",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "version",
    outputs: [{ internalType: "string", name: "", type: "string" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "weth",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  }
];

// src/abi/v3/Clanker.ts
var Clanker_v3_abi = [
  {
    inputs: [
      { internalType: "address", name: "locker_", type: "address" },
      { internalType: "address", name: "uniswapV3Factory_", type: "address" },
      { internalType: "address", name: "positionManager_", type: "address" },
      { internalType: "address", name: "swapRouter_", type: "address" },
      { internalType: "address", name: "owner_", type: "address" }
    ],
    stateMutability: "nonpayable",
    type: "constructor"
  },
  { inputs: [], name: "Invalid", type: "error" },
  { inputs: [], name: "NotFound", type: "error" },
  {
    inputs: [{ internalType: "address", name: "owner", type: "address" }],
    name: "OwnableInvalidOwner",
    type: "error"
  },
  {
    inputs: [{ internalType: "address", name: "account", type: "address" }],
    name: "OwnableUnauthorizedAccount",
    type: "error"
  },
  { inputs: [], name: "Unauthorized", type: "error" },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "previousOwner",
        type: "address"
      },
      {
        indexed: true,
        internalType: "address",
        name: "newOwner",
        type: "address"
      }
    ],
    name: "OwnershipTransferred",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "tokenAddress",
        type: "address"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "positionId",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "address",
        name: "deployer",
        type: "address"
      },
      { indexed: false, internalType: "uint256", name: "fid", type: "uint256" },
      { indexed: false, internalType: "string", name: "name", type: "string" },
      {
        indexed: false,
        internalType: "string",
        name: "symbol",
        type: "string"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "supply",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "string",
        name: "castHash",
        type: "string"
      }
    ],
    name: "TokenCreated",
    type: "event"
  },
  {
    inputs: [{ internalType: "address", name: "", type: "address" }],
    name: "admins",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "token", type: "address" }],
    name: "claimRewards",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      {
        components: [
          { internalType: "string", name: "_name", type: "string" },
          { internalType: "string", name: "_symbol", type: "string" },
          { internalType: "uint256", name: "_supply", type: "uint256" },
          { internalType: "uint24", name: "_fee", type: "uint24" },
          { internalType: "bytes32", name: "_salt", type: "bytes32" },
          { internalType: "address", name: "_deployer", type: "address" },
          { internalType: "uint256", name: "_fid", type: "uint256" },
          { internalType: "string", name: "_image", type: "string" },
          { internalType: "string", name: "_castHash", type: "string" },
          {
            components: [
              { internalType: "int24", name: "tick", type: "int24" },
              { internalType: "address", name: "pairedToken", type: "address" },
              { internalType: "uint24", name: "devBuyFee", type: "uint24" }
            ],
            internalType: "struct Clanker.PoolConfig",
            name: "_poolConfig",
            type: "tuple"
          }
        ],
        internalType: "struct Clanker.PreSaleTokenConfig",
        name: "preSaleTokenConfig",
        type: "tuple"
      }
    ],
    name: "deployToken",
    outputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" }
    ],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [
      {
        components: [
          { internalType: "string", name: "_name", type: "string" },
          { internalType: "string", name: "_symbol", type: "string" },
          { internalType: "uint256", name: "_supply", type: "uint256" },
          { internalType: "uint24", name: "_fee", type: "uint24" },
          { internalType: "bytes32", name: "_salt", type: "bytes32" },
          { internalType: "address", name: "_deployer", type: "address" },
          { internalType: "uint256", name: "_fid", type: "uint256" },
          { internalType: "string", name: "_image", type: "string" },
          { internalType: "string", name: "_castHash", type: "string" },
          {
            components: [
              { internalType: "int24", name: "tick", type: "int24" },
              { internalType: "address", name: "pairedToken", type: "address" },
              { internalType: "uint24", name: "devBuyFee", type: "uint24" }
            ],
            internalType: "struct Clanker.PoolConfig",
            name: "_poolConfig",
            type: "tuple"
          }
        ],
        internalType: "struct Clanker.PreSaleTokenConfig",
        name: "preSaleTokenConfig",
        type: "tuple"
      },
      { internalType: "uint256", name: "preSaleId", type: "uint256" },
      {
        components: [
          { internalType: "uint256", name: "bpsBought", type: "uint256" },
          { internalType: "address", name: "user", type: "address" }
        ],
        internalType: "struct Clanker.PreSalePurchase[]",
        name: "preSalePurchases",
        type: "tuple[]"
      },
      {
        components: [
          { internalType: "uint256", name: "bpsAvailable", type: "uint256" },
          { internalType: "uint256", name: "ethPerBps", type: "uint256" },
          { internalType: "uint256", name: "endTime", type: "uint256" },
          { internalType: "uint256", name: "bpsSold", type: "uint256" },
          { internalType: "address", name: "tokenAddress", type: "address" }
        ],
        internalType: "struct Clanker.PreSaleConfig",
        name: "preSaleConfig",
        type: "tuple"
      }
    ],
    name: "deployToken",
    outputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" }
    ],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "", type: "address" }],
    name: "deploymentInfoForToken",
    outputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" },
      { internalType: "address", name: "locker", type: "address" }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "user", type: "address" }],
    name: "getTokensDeployedByUser",
    outputs: [
      {
        components: [
          { internalType: "address", name: "token", type: "address" },
          { internalType: "uint256", name: "positionId", type: "uint256" },
          { internalType: "address", name: "locker", type: "address" }
        ],
        internalType: "struct Clanker.DeploymentInfo[]",
        name: "",
        type: "tuple[]"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "liquidityLocker",
    outputs: [{ internalType: "contract ILpLockerv2", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "owner",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "positionManager",
    outputs: [
      {
        internalType: "contract INonfungiblePositionManager",
        name: "",
        type: "address"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "renounceOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "admin", type: "address" },
      { internalType: "bool", name: "isAdmin", type: "bool" }
    ],
    name: "setAdmin",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "swapRouter",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "", type: "address" },
      { internalType: "uint256", name: "", type: "uint256" }
    ],
    name: "tokensDeployedByUsers",
    outputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" },
      { internalType: "address", name: "locker", type: "address" }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newOwner", type: "address" }],
    name: "transferOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "uniswapV3Factory",
    outputs: [{ internalType: "contract IUniswapV3Factory", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newLocker", type: "address" }],
    name: "updateLiquidityLocker",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "weth",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  }
];

// src/abi/v3.1/Clanker.ts
var Clanker_v3_1_abi = [
  {
    inputs: [{ internalType: "address", name: "owner_", type: "address" }],
    stateMutability: "nonpayable",
    type: "constructor"
  },
  { inputs: [], name: "Deprecated", type: "error" },
  { inputs: [], name: "InvalidCreatorInfo", type: "error" },
  { inputs: [], name: "InvalidCreatorReward", type: "error" },
  { inputs: [], name: "InvalidInterfaceInfo", type: "error" },
  { inputs: [], name: "InvalidTick", type: "error" },
  { inputs: [], name: "InvalidVaultConfiguration", type: "error" },
  { inputs: [], name: "NotFound", type: "error" },
  { inputs: [], name: "OnlyNonOriginatingChains", type: "error" },
  { inputs: [], name: "OnlyOriginatingChain", type: "error" },
  {
    inputs: [{ internalType: "address", name: "owner", type: "address" }],
    name: "OwnableInvalidOwner",
    type: "error"
  },
  {
    inputs: [{ internalType: "address", name: "account", type: "address" }],
    name: "OwnableUnauthorizedAccount",
    type: "error"
  },
  { inputs: [], name: "ReentrancyGuardReentrantCall", type: "error" },
  { inputs: [], name: "Unauthorized", type: "error" },
  { inputs: [], name: "ZeroTeamRewardRecipient", type: "error" },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "oldClankerDeployer",
        type: "address"
      },
      {
        indexed: false,
        internalType: "address",
        name: "newClankerDeployer",
        type: "address"
      }
    ],
    name: "ClankerDeployerUpdated",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "oldLocker",
        type: "address"
      },
      {
        indexed: false,
        internalType: "address",
        name: "newLocker",
        type: "address"
      }
    ],
    name: "LiquidityLockerUpdated",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "previousOwner",
        type: "address"
      },
      {
        indexed: true,
        internalType: "address",
        name: "newOwner",
        type: "address"
      }
    ],
    name: "OwnershipTransferred",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "admin",
        type: "address"
      },
      { indexed: false, internalType: "bool", name: "isAdmin", type: "bool" }
    ],
    name: "SetAdmin",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "bool",
        name: "deprecated",
        type: "bool"
      }
    ],
    name: "SetDeprecated",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: true,
        internalType: "address",
        name: "tokenAddress",
        type: "address"
      },
      {
        indexed: true,
        internalType: "address",
        name: "creatorAdmin",
        type: "address"
      },
      {
        indexed: true,
        internalType: "address",
        name: "interfaceAdmin",
        type: "address"
      },
      {
        indexed: false,
        internalType: "address",
        name: "creatorRewardRecipient",
        type: "address"
      },
      {
        indexed: false,
        internalType: "address",
        name: "interfaceRewardRecipient",
        type: "address"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "positionId",
        type: "uint256"
      },
      { indexed: false, internalType: "string", name: "name", type: "string" },
      {
        indexed: false,
        internalType: "string",
        name: "symbol",
        type: "string"
      },
      {
        indexed: false,
        internalType: "int24",
        name: "startingTickIfToken0IsNewToken",
        type: "int24"
      },
      {
        indexed: false,
        internalType: "string",
        name: "metadata",
        type: "string"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "amountTokensBought",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "uint256",
        name: "vaultDuration",
        type: "uint256"
      },
      {
        indexed: false,
        internalType: "uint8",
        name: "vaultPercentage",
        type: "uint8"
      },
      {
        indexed: false,
        internalType: "address",
        name: "msgSender",
        type: "address"
      }
    ],
    name: "TokenCreated",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      {
        indexed: false,
        internalType: "address",
        name: "oldVault",
        type: "address"
      },
      {
        indexed: false,
        internalType: "address",
        name: "newVault",
        type: "address"
      }
    ],
    name: "VaultUpdated",
    type: "event"
  },
  {
    inputs: [],
    name: "MAX_CREATOR_REWARD",
    outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "MAX_TICK",
    outputs: [{ internalType: "int24", name: "", type: "int24" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "MAX_VAULT_PERCENTAGE",
    outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "POOL_FEE",
    outputs: [{ internalType: "uint24", name: "", type: "uint24" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "TICK_SPACING",
    outputs: [{ internalType: "int24", name: "", type: "int24" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "TOKEN_SUPPLY",
    outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "", type: "address" }],
    name: "admins",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "token", type: "address" }],
    name: "claimRewards",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      {
        components: [
          {
            components: [
              { internalType: "string", name: "name", type: "string" },
              { internalType: "string", name: "symbol", type: "string" },
              { internalType: "bytes32", name: "salt", type: "bytes32" },
              { internalType: "string", name: "image", type: "string" },
              { internalType: "string", name: "metadata", type: "string" },
              { internalType: "string", name: "context", type: "string" },
              {
                internalType: "uint256",
                name: "originatingChainId",
                type: "uint256"
              }
            ],
            internalType: "struct IClanker.TokenConfig",
            name: "tokenConfig",
            type: "tuple"
          },
          {
            components: [
              { internalType: "uint8", name: "vaultPercentage", type: "uint8" },
              {
                internalType: "uint256",
                name: "vaultDuration",
                type: "uint256"
              }
            ],
            internalType: "struct IClanker.VaultConfig",
            name: "vaultConfig",
            type: "tuple"
          },
          {
            components: [
              { internalType: "address", name: "pairedToken", type: "address" },
              {
                internalType: "int24",
                name: "tickIfToken0IsNewToken",
                type: "int24"
              }
            ],
            internalType: "struct IClanker.PoolConfig",
            name: "poolConfig",
            type: "tuple"
          },
          {
            components: [
              {
                internalType: "uint24",
                name: "pairedTokenPoolFee",
                type: "uint24"
              },
              {
                internalType: "uint256",
                name: "pairedTokenSwapAmountOutMinimum",
                type: "uint256"
              }
            ],
            internalType: "struct IClanker.InitialBuyConfig",
            name: "initialBuyConfig",
            type: "tuple"
          },
          {
            components: [
              {
                internalType: "uint256",
                name: "creatorReward",
                type: "uint256"
              },
              {
                internalType: "address",
                name: "creatorAdmin",
                type: "address"
              },
              {
                internalType: "address",
                name: "creatorRewardRecipient",
                type: "address"
              },
              {
                internalType: "address",
                name: "interfaceAdmin",
                type: "address"
              },
              {
                internalType: "address",
                name: "interfaceRewardRecipient",
                type: "address"
              }
            ],
            internalType: "struct IClanker.RewardsConfig",
            name: "rewardsConfig",
            type: "tuple"
          }
        ],
        internalType: "struct IClanker.DeploymentConfig",
        name: "deploymentConfig",
        type: "tuple"
      }
    ],
    name: "deployToken",
    outputs: [
      { internalType: "address", name: "tokenAddress", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" }
    ],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [
      {
        components: [
          {
            components: [
              { internalType: "string", name: "name", type: "string" },
              { internalType: "string", name: "symbol", type: "string" },
              { internalType: "bytes32", name: "salt", type: "bytes32" },
              { internalType: "string", name: "image", type: "string" },
              { internalType: "string", name: "metadata", type: "string" },
              { internalType: "string", name: "context", type: "string" },
              {
                internalType: "uint256",
                name: "originatingChainId",
                type: "uint256"
              }
            ],
            internalType: "struct IClanker.TokenConfig",
            name: "tokenConfig",
            type: "tuple"
          },
          {
            components: [
              { internalType: "uint8", name: "vaultPercentage", type: "uint8" },
              {
                internalType: "uint256",
                name: "vaultDuration",
                type: "uint256"
              }
            ],
            internalType: "struct IClanker.VaultConfig",
            name: "vaultConfig",
            type: "tuple"
          },
          {
            components: [
              { internalType: "address", name: "pairedToken", type: "address" },
              {
                internalType: "int24",
                name: "tickIfToken0IsNewToken",
                type: "int24"
              }
            ],
            internalType: "struct IClanker.PoolConfig",
            name: "poolConfig",
            type: "tuple"
          },
          {
            components: [
              {
                internalType: "uint24",
                name: "pairedTokenPoolFee",
                type: "uint24"
              },
              {
                internalType: "uint256",
                name: "pairedTokenSwapAmountOutMinimum",
                type: "uint256"
              }
            ],
            internalType: "struct IClanker.InitialBuyConfig",
            name: "initialBuyConfig",
            type: "tuple"
          },
          {
            components: [
              {
                internalType: "uint256",
                name: "creatorReward",
                type: "uint256"
              },
              {
                internalType: "address",
                name: "creatorAdmin",
                type: "address"
              },
              {
                internalType: "address",
                name: "creatorRewardRecipient",
                type: "address"
              },
              {
                internalType: "address",
                name: "interfaceAdmin",
                type: "address"
              },
              {
                internalType: "address",
                name: "interfaceRewardRecipient",
                type: "address"
              }
            ],
            internalType: "struct IClanker.RewardsConfig",
            name: "rewardsConfig",
            type: "tuple"
          }
        ],
        internalType: "struct IClanker.DeploymentConfig",
        name: "deploymentConfig",
        type: "tuple"
      },
      { internalType: "address", name: "teamRewardRecipient", type: "address" }
    ],
    name: "deployTokenWithCustomTeamRewardRecipient",
    outputs: [
      { internalType: "address", name: "tokenAddress", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" }
    ],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [
      {
        components: [
          { internalType: "string", name: "name", type: "string" },
          { internalType: "string", name: "symbol", type: "string" },
          { internalType: "bytes32", name: "salt", type: "bytes32" },
          { internalType: "string", name: "image", type: "string" },
          { internalType: "string", name: "metadata", type: "string" },
          { internalType: "string", name: "context", type: "string" },
          {
            internalType: "uint256",
            name: "originatingChainId",
            type: "uint256"
          }
        ],
        internalType: "struct IClanker.TokenConfig",
        name: "tokenConfig",
        type: "tuple"
      },
      { internalType: "address", name: "tokenAdmin", type: "address" }
    ],
    name: "deployTokenZeroSupply",
    outputs: [{ internalType: "address", name: "tokenAddress", type: "address" }],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "", type: "address" }],
    name: "deploymentInfoForToken",
    outputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" },
      { internalType: "address", name: "locker", type: "address" }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "deprecated",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "user", type: "address" }],
    name: "getTokensDeployedByUser",
    outputs: [
      {
        components: [
          { internalType: "address", name: "token", type: "address" },
          { internalType: "uint256", name: "positionId", type: "uint256" },
          { internalType: "address", name: "locker", type: "address" }
        ],
        internalType: "struct IClanker.DeploymentInfo[]",
        name: "",
        type: "tuple[]"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "uniswapV3Factory_", type: "address" },
      { internalType: "address", name: "positionManager_", type: "address" },
      { internalType: "address", name: "swapRouter_", type: "address" },
      { internalType: "address", name: "weth_", type: "address" },
      { internalType: "address", name: "liquidityLocker_", type: "address" },
      { internalType: "address", name: "vault_", type: "address" }
    ],
    name: "initialize",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "liquidityLocker",
    outputs: [{ internalType: "contract ILpLockerv2", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "owner",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "positionManager",
    outputs: [
      {
        internalType: "contract INonfungiblePositionManager",
        name: "",
        type: "address"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "renounceOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "admin", type: "address" },
      { internalType: "bool", name: "isAdmin", type: "bool" }
    ],
    name: "setAdmin",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "bool", name: "deprecated_", type: "bool" }],
    name: "setDeprecated",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "swapRouter",
    outputs: [{ internalType: "contract ISwapRouter", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "", type: "address" },
      { internalType: "uint256", name: "", type: "uint256" }
    ],
    name: "tokensDeployedByUsers",
    outputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "uint256", name: "positionId", type: "uint256" },
      { internalType: "address", name: "locker", type: "address" }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newOwner", type: "address" }],
    name: "transferOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "uniswapV3Factory",
    outputs: [{ internalType: "contract IUniswapV3Factory", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newLocker", type: "address" }],
    name: "updateLiquidityLocker",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newVault", type: "address" }],
    name: "updateVault",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "vault",
    outputs: [{ internalType: "contract IClankerVault", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "weth",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  }
];

// src/abi/v3.1/ClankerToken.ts
var ClankerToken_v3_1_abi = [
  {
    type: "constructor",
    inputs: [
      { name: "name_", type: "string", internalType: "string" },
      { name: "symbol_", type: "string", internalType: "string" },
      { name: "maxSupply_", type: "uint256", internalType: "uint256" },
      { name: "admin_", type: "address", internalType: "address" },
      { name: "image_", type: "string", internalType: "string" },
      { name: "metadata_", type: "string", internalType: "string" },
      { name: "context_", type: "string", internalType: "string" },
      {
        name: "initialSupplyChainId_",
        type: "uint256",
        internalType: "uint256"
      }
    ],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "CLOCK_MODE",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "DOMAIN_SEPARATOR",
    inputs: [],
    outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "admin",
    inputs: [],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "allowance",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "approve",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "balanceOf",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "burn",
    inputs: [{ name: "value", type: "uint256", internalType: "uint256" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "burnFrom",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "checkpoints",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "pos", type: "uint32", internalType: "uint32" }
    ],
    outputs: [
      {
        name: "",
        type: "tuple",
        internalType: "struct Checkpoints.Checkpoint208",
        components: [
          { name: "_key", type: "uint48", internalType: "uint48" },
          { name: "_value", type: "uint208", internalType: "uint208" }
        ]
      }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "clock",
    inputs: [],
    outputs: [{ name: "", type: "uint48", internalType: "uint48" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "context",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "crosschainBurn",
    inputs: [
      { name: "_from", type: "address", internalType: "address" },
      { name: "_amount", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "crosschainMint",
    inputs: [
      { name: "_to", type: "address", internalType: "address" },
      { name: "_amount", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "decimals",
    inputs: [],
    outputs: [{ name: "", type: "uint8", internalType: "uint8" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "delegate",
    inputs: [{ name: "delegatee", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegateBySig",
    inputs: [
      { name: "delegatee", type: "address", internalType: "address" },
      { name: "nonce", type: "uint256", internalType: "uint256" },
      { name: "expiry", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegates",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "eip712Domain",
    inputs: [],
    outputs: [
      { name: "fields", type: "bytes1", internalType: "bytes1" },
      { name: "name", type: "string", internalType: "string" },
      { name: "version", type: "string", internalType: "string" },
      { name: "chainId", type: "uint256", internalType: "uint256" },
      { name: "verifyingContract", type: "address", internalType: "address" },
      { name: "salt", type: "bytes32", internalType: "bytes32" },
      { name: "extensions", type: "uint256[]", internalType: "uint256[]" }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastTotalSupply",
    inputs: [{ name: "timepoint", type: "uint256", internalType: "uint256" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastVotes",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "timepoint", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getVotes",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "imageUrl",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "isVerified",
    inputs: [],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "metadata",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "name",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "nonces",
    inputs: [{ name: "owner", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "numCheckpoints",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint32", internalType: "uint32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "permit",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" },
      { name: "deadline", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "supportsInterface",
    inputs: [{ name: "_interfaceId", type: "bytes4", internalType: "bytes4" }],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "pure"
  },
  {
    type: "function",
    name: "symbol",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "totalSupply",
    inputs: [],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "transfer",
    inputs: [
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "transferFrom",
    inputs: [
      { name: "from", type: "address", internalType: "address" },
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateImage",
    inputs: [{ name: "image_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateMetadata",
    inputs: [{ name: "metadata_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "verify",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "event",
    name: "Approval",
    inputs: [
      {
        name: "owner",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "spender",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "value",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "CrosschainBurn",
    inputs: [
      { name: "from", type: "address", indexed: true, internalType: "address" },
      {
        name: "amount",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      },
      {
        name: "sender",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "CrosschainMint",
    inputs: [
      { name: "to", type: "address", indexed: true, internalType: "address" },
      {
        name: "amount",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      },
      {
        name: "sender",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateChanged",
    inputs: [
      {
        name: "delegator",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "fromDelegate",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "toDelegate",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateVotesChanged",
    inputs: [
      {
        name: "delegate",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "previousVotes",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      },
      {
        name: "newVotes",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      }
    ],
    anonymous: false
  },
  { type: "event", name: "EIP712DomainChanged", inputs: [], anonymous: false },
  {
    type: "event",
    name: "Transfer",
    inputs: [
      { name: "from", type: "address", indexed: true, internalType: "address" },
      { name: "to", type: "address", indexed: true, internalType: "address" },
      {
        name: "value",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "Verified",
    inputs: [
      {
        name: "admin",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "token",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  { type: "error", name: "AlreadyVerified", inputs: [] },
  { type: "error", name: "CheckpointUnorderedInsertion", inputs: [] },
  { type: "error", name: "ECDSAInvalidSignature", inputs: [] },
  {
    type: "error",
    name: "ECDSAInvalidSignatureLength",
    inputs: [{ name: "length", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ECDSAInvalidSignatureS",
    inputs: [{ name: "s", type: "bytes32", internalType: "bytes32" }]
  },
  {
    type: "error",
    name: "ERC20ExceededSafeSupply",
    inputs: [
      { name: "increasedSupply", type: "uint256", internalType: "uint256" },
      { name: "cap", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientAllowance",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "allowance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientBalance",
    inputs: [
      { name: "sender", type: "address", internalType: "address" },
      { name: "balance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InvalidApprover",
    inputs: [{ name: "approver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidReceiver",
    inputs: [{ name: "receiver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSender",
    inputs: [{ name: "sender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSpender",
    inputs: [{ name: "spender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC2612ExpiredSignature",
    inputs: [{ name: "deadline", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ERC2612InvalidSigner",
    inputs: [
      { name: "signer", type: "address", internalType: "address" },
      { name: "owner", type: "address", internalType: "address" }
    ]
  },
  {
    type: "error",
    name: "ERC5805FutureLookup",
    inputs: [
      { name: "timepoint", type: "uint256", internalType: "uint256" },
      { name: "clock", type: "uint48", internalType: "uint48" }
    ]
  },
  { type: "error", name: "ERC6372InconsistentClock", inputs: [] },
  {
    type: "error",
    name: "InvalidAccountNonce",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "currentNonce", type: "uint256", internalType: "uint256" }
    ]
  },
  { type: "error", name: "InvalidShortString", inputs: [] },
  { type: "error", name: "NotAdmin", inputs: [] },
  {
    type: "error",
    name: "SafeCastOverflowedUintDowncast",
    inputs: [
      { name: "bits", type: "uint8", internalType: "uint8" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "StringTooLong",
    inputs: [{ name: "str", type: "string", internalType: "string" }]
  },
  { type: "error", name: "Unauthorized", inputs: [] },
  {
    type: "error",
    name: "VotesExpiredSignature",
    inputs: [{ name: "expiry", type: "uint256", internalType: "uint256" }]
  }
];
var ClankerToken_v3_1_bytecode = "0x61016060405234610141576140a2803803809161001b82610159565b610160396101008161016001911261014157610160516001600160401b038111610141578161004d91610160016101b9565b610180516001600160401b038111610141578261006d91610160016101b9565b6101a05161007c6101c061020e565b6101e0516001600160401b038111610141578561009c91610160016101b9565b610200519091906001600160401b03811161014157866100bf91610160016101b9565b610220519093906001600160401b038111610141576100f0976100e591610160016101b9565b946102405196610669565b604051612ffa908161106882396080518161210a015260a051816121c7015260c051816120db015260e051816121590152610100518161217f01526101205181610bf701526101405181610c200152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b610160601f91909101601f19168101906001600160401b0382119082101761018057604052565b610145565b601f909101601f19168101906001600160401b0382119082101761018057604052565b604051906101b7604083610185565b565b81601f82011215610141578051906001600160401b03821161018057604051926101ed601f8401601f191660200185610185565b8284526020838301011161014157815f9260208093018386015e8301015290565b51906001600160a01b038216820361014157565b90600182811c92168015610250575b602083101461023c57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610231565b601f8111610266575050565b60035f5260205f20906020601f840160051c830193106102a0575b601f0160051c01905b818110610295575050565b5f815560010161028a565b9091508190610281565b601f82116102b757505050565b5f5260205f20906020601f840160051c830193106102ef575b601f0160051c01905b8181106102e4575050565b5f81556001016102d9565b90915081906102d0565b80519091906001600160401b038111610180576103228161031b600454610222565b60046102aa565b602092601f821160011461036257610352929382915f92610357575b50508160011b915f199060031b1c19161790565b600455565b015190505f8061033e565b60045f52601f198216937f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f5b8681106103c657508360019596106103ae575b505050811b01600455565b01515f1960f88460031b161c191690555f80806103a3565b91926020600181928685015181550194019201610390565b80519091906001600160401b0381116101805761040781610400600e54610222565b600e6102aa565b602092601f821160011461043b57610436929382915f926103575750508160011b915f199060031b1c19161790565b600e55565b600e5f52601f198216937fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b86811061049f5750836001959610610487575b505050811b01600e55565b01515f1960f88460031b161c191690555f808061047c565b91926020600181928685015181550194019201610469565b80519091906001600160401b038111610180576104e0816104d9600c54610222565b600c6102aa565b602092601f82116001146105145761050f929382915f926103575750508160011b915f199060031b1c19161790565b600c55565b600c5f52601f198216937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8681106105785750836001959610610560575b505050811b01600c55565b01515f1960f88460031b161c191690555f8080610555565b91926020600181928685015181550194019201610542565b80519091906001600160401b038111610180576105b9816105b2600d54610222565b600d6102aa565b602092601f82116001146105ed576105e8929382915f926103575750508160011b915f199060031b1c19161790565b600d55565b600d5f52601f198216937fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5915f5b8681106106515750836001959610610639575b505050811b01600d55565b01515f1960f88460031b161c191690555f808061062e565b9192602060018192868501518155019401920161061b565b969594939291966040519061067f604083610185565b60018252603160f81b6020830190815281519093906001600160401b038111610180576106b6816106b1600354610222565b61025a565b6020601f821160011461078f5793610762936107026107719b9a98946106fa856107679a9661076c9d9a5f91610784575b508160011b915f199060031b1c19161790565b6003556102f9565b61070b816108d2565b61012052610718826109c7565b610140526020815191012060e052519020610100524660a052610739610ab9565b6080523060c052600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6103de565b6104b7565b610590565b461461077a5750565b6101b79033610826565b90508501515f6106e7565b60035f52601f198216907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b81811061080e57506107719b9a989460018561076c9c999561076299956107679c9861070296106107f6575b5050811b016003556102f9565b8601515f1960f88460031b161c191690555f806107e9565b9192602060018192868a0151815501940192016107bd565b91906001600160a01b03831680156108bf576002548281018091116108ba576002555f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160d01b038085116108a357506101b7929350610b96565b630e58ae9360e11b5f52600485905260245260445ffd5b610b82565b63ec442f0560e01b5f525f60045260245ffd5b908151602081105f146108ed5750906108ea90610b17565b90565b6001600160401b038111610180576109118161090a600554610222565b60056102aa565b602092601f821160011461094857610940929382915f926103575750508160011b915f199060031b1c19161790565b60055560ff90565b60055f52601f198216937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b8681106109af5750836001959610610997575b505050811b0160055560ff90565b01515f1960f88460031b161c191690555f8080610989565b91926020600181928685015181550194019201610976565b908151602081105f146109df5750906108ea90610b17565b6001600160401b03811161018057610a03816109fc600654610222565b60066102aa565b602092601f8211600114610a3a57610a32929382915f926103575750508160011b915f199060031b1c19161790565b60065560ff90565b60065f52601f198216937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b868110610aa15750836001959610610a89575b505050811b0160065560ff90565b01515f1960f88460031b161c191690555f8080610a7b565b91926020600181928685015181550194019201610a68565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152610b1160c082610185565b51902090565b601f815111610b42576020815191015160208210610b33571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b634e487b7160e01b5f52601160045260245ffd5b90610ba081610c95565b9165ffffffffffff4311610c7d57600a5480610c475750610bda610bca6101b7945f5b600161100b565b65ffffffffffff4316600a610f35565b50506001600160a01b03168015610c2f575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f9182526040909120546001600160a01b039081169116610dc4565b610c40610c3b83610c95565b610cc6565b5050610bec565b92835f198101116108ba57600a5f525f5160206140625f395f51905f52909301546101b793610bda91610bca919060301c610bc3565b6306dfcc6560e41b5f5260306004524360245260445ffd5b6001600160d01b038111610caf576001600160d01b031690565b6306dfcc6560e41b5f5260d060045260245260445ffd5b65ffffffffffff4311610c7d57600a5480610cf05750610bca610cec915f5b600261100b565b9091565b805f198101116108ba57600a5f525f5160206140625f395f51905f520154610cec91610bca9160301c610ce5565b65ffffffffffff4311610c7d57805480610d525750610d42610cec925f600261100b565b9065ffffffffffff431690610f35565b805f198101116108ba575f82815260209020015f190154610cec92610d429160301c610ce5565b65ffffffffffff4311610c7d57805480610d9d5750610d42610cec925f600161100b565b805f198101116108ba575f82815260209020015f190154610cec92610d429160301c610bc3565b6001600160a01b03808316939291908116908185141580610eb7575b610dec575b5050505050565b81610e5d575b505082610e01575b8080610de5565b6001600160a01b03165f9081526009602052604090205f5160206140825f395f51905f5291610e3a91610e349091610c95565b90610d79565b604080516001600160d01b039384168152919092166020820152a25f8080610dfa565b6001600160a01b03165f9081526009602052604090205f5160206140825f395f51905f5290610e9590610e8f86610c95565b90610d1e565b604080516001600160d01b039384168152919092166020820152a25f80610df2565b50831515610de0565b5f198101919082116108ba57565b908154680100000000000000008110156101805760018101808455811015610f21575f9283526020928390208251929093015160301b65ffffffffffff191665ffffffffffff9290921691909117910155565b634e487b7160e01b5f52603260045260245ffd5b80549293928015610fe157610f4c610f5791610ec0565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411610fd257879303610f9e5750610f9a92509065ffffffffffff82549181199060301b169116179055565b9190565b915050610f9a91610fbe610fb06101a8565b65ffffffffffff9093168352565b6001600160d01b0386166020830152610ece565b632520601d60e01b5f5260045ffd5b509061100691610ff2610fb06101a8565b6001600160d01b0385166020830152610ece565b5f9190565b9190918060011461104d5760021461103157634e487b7160e01b5f52605160045260245ffd5b6001600160d01b03908116918116919091039081116108ba5790565b506001600160d01b03918216908216019081116108ba579056fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a71461025457806306fdde031461024f578063095ea7b31461024a57806318160ddd1461024557806318bf50771461024057806323b872dd1461023b5780632b8c49e314610236578063313ce567146102315780633644e5151461022c578063392f37e9146102275780633a46b1a81461022257806342966c681461021d5780634bf5d7e914610218578063587cde1e146102135780635c19a95c1461020e5780636fcfff451461020957806370a082311461020457806379cc6790146101ff5780637ecebe00146101fa57806380007e83146101f557806384b0196e146101f05780638e539e8c146101eb578063918b5be1146101e657806391ddadf4146101e157806395d89b41146101dc5780639ab24eb0146101d7578063a9059cbb146101d2578063aba83150146101cd578063c3cda520146101c8578063d0496d6a146101c3578063d505accf146101be578063dd62ed3e146101b9578063eb3d68e7146101b4578063f1127ed8146101af578063f851a440146101aa5763fc735e99146101a5575f80fd5b6119de565b6119ab565b6118d5565b611761565b6116ee565b611553565b6114ae565b611340565b61127b565b611255565b6111ed565b611148565b61111d565b610f70565b610d16565b610bdf565b610bbd565b610b78565b610b48565b610b06565b610a7e565b610a5c565b610a01565b610958565b610939565b610871565b6107cc565b6107aa565b61078f565b610709565b6106d1565b61051d565b610500565b6104cf565b610391565b34610336576020600319360112610336576004357fffffffff000000000000000000000000000000000000000000000000000000008116809103610336577f3333199400000000000000000000000000000000000000000000000000000000811490811561030c575b81156102e2575b81156102d9575b506040519015158152602090f35b9050155f6102cb565b7f01ffc9a700000000000000000000000000000000000000000000000000000000811491506102c4565b7f36372b0700000000000000000000000000000000000000000000000000000000811491506102bd565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602061038e92818152019061033a565b90565b34610336575f600319360112610336576040515f6003546103b181611abd565b808452906001811690811561044757506001146103e9575b6103e5836103d981850382610e88565b6040519182918261037d565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b80821061042d575090915081016020016103d96103c9565b919260018160209254838588010152019101909291610415565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506103d990506103c9565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361033657565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361033657565b34610336576040600319360112610336576104f56104eb610489565b6024359033612418565b602060405160018152f35b34610336575f600319360112610336576020600254604051908152f35b3461033657604060031936011261033657610536610489565b6024359073420000000000000000000000000000000000002833036106a95773ffffffffffffffffffffffffffffffffffffffff811690811561067d5761058761058284600254612251565b600255565b6105ae8173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b838154019055815f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef604051806105ea88829190602083019252565b0390a360025479ffffffffffffffffffffffffffffffffffffffffffffffffffff9081811161064f5750508261061f91612ccc565b60405191825233917fde22baff038e3a3e08407cbdf617deed74e869a7ba517df611e33131c6e6ea0490602090a3005b7f1cb15d26000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610336576060600319360112610336576104f56106ed610489565b6106f56104ac565b60443591610704833383611c66565b611dcb565b3461033657604060031936011261033657610722610489565b60243573420000000000000000000000000000000000002833036106a95761074a8183611f3e565b6040519081527fb90795a66650155983e242cac3e1ac1a4dc26f8ed2987f3ce416a34e00111fd4602073ffffffffffffffffffffffffffffffffffffffff33941692a3005b34610336575f60031936011261033657602060405160128152f35b34610336575f6003193601126103365760206107c46120c4565b604051908152f35b34610336575f600319360112610336576040515f600c546107ec81611abd565b80845290600181169081156104475750600114610813576103e5836103d981850382610e88565b600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7939250905b808210610857575090915081016020016103d96103c9565b91926001816020925483858801015201910190929161083f565b346103365760406003193601126103365761088a610489565b60243565ffffffffffff61089d436121ed565b168082101561090a576103e579ffffffffffffffffffffffffffffffffffffffffffffffffffff6108f98473ffffffffffffffffffffffffffffffffffffffff87165f5260096020526108f360405f20916121ed565b9061225e565b604051911681529081906020820190565b907fecd3f81e000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b346103365760206003193601126103365761095660043533611f3e565b005b34610336575f60031936011261033657610971436121ed565b65ffffffffffff80610982436121ed565b169116036109d9576103e560405161099b604082610e88565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015260405191829160208352602083019061033a565b7f6ff07140000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103365760206003193601126103365773ffffffffffffffffffffffffffffffffffffffff610a2f610489565b165f526008602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461033657602060031936011261033657610956610a78610489565b336122ef565b346103365760206003193601126103365773ffffffffffffffffffffffffffffffffffffffff610aac610489565b165f52600960205260405f205463ffffffff8111610ad65760405163ffffffff9091168152602090f35b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b346103365760206003193601126103365760206107c4610b24610489565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b3461033657604060031936011261033657610956610b64610489565b60243590610b73823383611c66565b611f3e565b346103365760206003193601126103365773ffffffffffffffffffffffffffffffffffffffff610ba6610489565b165f526007602052602060405f2054604051908152f35b34610336575f60031936011261033657602060ff600f54166040519015158152f35b34610336575f60031936011261033657610cbd610c1b7f000000000000000000000000000000000000000000000000000000000000000061284c565b610c447f00000000000000000000000000000000000000000000000000000000000000006128c5565b6020604051610c538282610e88565b5f815281610ccb818301947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013687376040519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e0858a015260e089019061033a565b90878203604089015261033a565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110610cff57505050500390f35b835185528695509381019392810192600101610cf0565b346103365760206003193601126103365760043565ffffffffffff610d3a436121ed565b169081811015610e0c57610d4d906121ed565b600a54905f829160058411610db3575b610d699350600a612661565b80610d97575060205f5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff60405191168152f35b610da2602091612235565b600a5f52815f20015460301c610d73565b9192610dbe816124ec565b8103908111610e0757610d6993600a5f5265ffffffffffff8260205f2001541665ffffffffffff8516105f14610df5575091610d5d565b929150610e0190612243565b90610d5d565b611a90565b7fecd3f81e000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610e8357604052565b610e3a565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e8357604052565b60405190610ed8604083610e88565b565b60206003198201126103365760043567ffffffffffffffff811161033657816023820112156103365780600401359067ffffffffffffffff8211610e835760405192610f4e601f84017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200185610e88565b8284526024838301011161033657815f92602460209301838601378301015290565b3461033657610f7e36610eda565b73ffffffffffffffffffffffffffffffffffffffff600b541633036110f557805167ffffffffffffffff8111610e8357610fc281610fbd600c54611abd565b611bae565b6020601f8211600114611032579161101382611022937ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4955f91611027575b505f198260011b9260031b1c19161790565b600c556040519182918261037d565b0390a1005b90508301515f611001565b600c5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8181106110dd5750927ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f494926001928261102296106110c5575b5050811b01600c556103d9565b8401515f1960f88460031b161c191690555f806110b8565b9192602060018192868901518155019401920161107e565b7f7bfa4b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610336575f600319360112610336576020611138436121ed565b65ffffffffffff60405191168152f35b34610336575f600319360112610336576040515f60045461116881611abd565b8084529060018116908115610447575060011461118f576103e5836103d981850382610e88565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b8082106111d3575090915081016020016103d96103c9565b9192600181602092548385880101520191019092916111bb565b346103365760206003193601126103365773ffffffffffffffffffffffffffffffffffffffff61121b610489565b165f526009602052602079ffffffffffffffffffffffffffffffffffffffffffffffffffff61124c60405f2061239f565b16604051908152f35b34610336576040600319360112610336576104f5611271610489565b6024359033611dcb565b34610336575f600319360112610336576040515f600e5461129b81611abd565b808452906001811690811561044757506001146112c2576103e5836103d981850382610e88565b600e5f9081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd939250905b808210611306575090915081016020016103d96103c9565b9192600181602092548385880101520191019092916112ee565b6064359060ff8216820361033657565b6084359060ff8216820361033657565b346103365760c060031936011261033657611359610489565b60243590604435611368611320565b6084359060a4359280421161148357916113fb93916113ed6113f29460405160208101917fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf835273ffffffffffffffffffffffffffffffffffffffff8a1660408301528a60608301526080820152608081526113e560a082610e88565b5190206123c8565b6128fc565b909291926129cd565b61142c8173ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b80930361143d5761095692506122ef565b73ffffffffffffffffffffffffffffffffffffffff91507f752d88c0000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b7f4683af0e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610336575f600319360112610336576040515f600d546114ce81611abd565b808452906001811690811561044757506001146114f5576103e5836103d981850382610e88565b600d5f9081527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5939250905b808210611539575090915081016020016103d96103c9565b919260018160209254838588010152019101909291611521565b346103365760e06003193601126103365761156c610489565b6115746104ac565b6044359060643592611584611330565b60a43560c435908642116116c2576116549261164f6115ca8673ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b9860405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff89169b8c604084015273ffffffffffffffffffffffffffffffffffffffff8b1660608401528b608084015260a083015260c082015260c081526113e560e082610e88565b612409565b9373ffffffffffffffffffffffffffffffffffffffff85160361167b576109569350612418565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff8085166004521660245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461033657604060031936011261033657602061175861170c610489565b73ffffffffffffffffffffffffffffffffffffffff6117296104ac565b91165f526001835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b346103365761176f36610eda565b73ffffffffffffffffffffffffffffffffffffffff600b541633036110f557805167ffffffffffffffff8111610e83576117b3816117ae600e54611abd565b611bfe565b6020601f8211600114611812579161180382611022937fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216955f9161102757505f198260011b9260031b1c19161790565b600e556040519182918261037d565b600e5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b8181106118bd5750927fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b5552421694926001928261102296106118a5575b5050811b01600e556103d9565b8401515f1960f88460031b161c191690555f80611898565b9192602060018192868901518155019401920161185e565b34610336576040600319360112610336576118ee610489565b6024359063ffffffff82168203610336576103e59173ffffffffffffffffffffffffffffffffffffffff61194892611924611c4e565b5061192d611c4e565b50165f52600960205260405f20611942611c4e565b50612a94565b506040519061195682610e67565b5465ffffffffffff8116825260301c602082015260405191829182919091602079ffffffffffffffffffffffffffffffffffffffffffffffffffff81604084019565ffffffffffff8151168552015116910152565b34610336575f60031936011261033657602073ffffffffffffffffffffffffffffffffffffffff600b5416604051908152f35b34610336575f6003193601126103365773ffffffffffffffffffffffffffffffffffffffff600b541633036110f557600f5460ff8116611a68577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117600f5530337f78a953f3f0d92abc078a34e5d4fedf8708e788e1b29300b3d6170e97f88a13fc5f80a3005b7f118fd7b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90600182811c92168015611b04575b6020831014611ad757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611acc565b5f9291815491611b1d83611abd565b8083529260018116908115611b725750600114611b3957505050565b5f9081526020812093945091925b838310611b58575060209250010190565b600181602092949394548385870101520191019190611b47565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b601f8111611bba575050565b600c5f5260205f20906020601f840160051c83019310611bf4575b601f0160051c01905b818110611be9575050565b5f8155600101611bde565b9091508190611bd5565b601f8111611c0a575050565b600e5f5260205f20906020601f840160051c83019310611c44575b601f0160051c01905b818110611c39575050565b5f8155600101611c2e565b9091508190611c25565b60405190611c5b82610e67565b5f6020838281520152565b73ffffffffffffffffffffffffffffffffffffffff909291921690815f526001602052611cb48360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b545f198103611cc4575b50505050565b818110611d83578215611d575773ffffffffffffffffffffffffffffffffffffffff841615611d2b57611d21925f526001602052039160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b555f808080611cbe565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b92919073ffffffffffffffffffffffffffffffffffffffff8416938415611f125773ffffffffffffffffffffffffffffffffffffffff8216801561067d57611e308273ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5495848710611ec65784610ed8969703611e678473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b55611e8f8473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3612d5f565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff83166004526024879052604485905260645ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8116908115611f1257611f838173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b548381106120795790611fbb84610ed8959493039173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5581600254036002555f817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405180602081018782520390a38015612061575b61200d61200883612ad6565b612c6b565b50505f908152600860205260408120549080527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75473ffffffffffffffffffffffffffffffffffffffff90811691166126c5565b61207261206d83612ad6565b612c0a565b5050611ffc565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff909116600452602452604482905260645ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806121c4575b1561212c577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526121be60c082610e88565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612103565b65ffffffffffff81116122055765ffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52603060045260245260445ffd5b905f198201918211610e0757565b9060018201809211610e0757565b91908201809211610e0757565b908154905f82916005841161229c575b612279935084612661565b806122845750505f90565b61228d90612235565b905f5260205f20015460301c90565b91926122a7816124ec565b8103908111610e075761227993855f5265ffffffffffff8260205f2001541665ffffffffffff8516105f146122dd57509161226e565b9291506122e990612243565b9061226e565b73ffffffffffffffffffffffffffffffffffffffff8181165f81815260086020526040812080548685167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117909255610ed8969416946123999390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b916126c5565b8054806123ac5750505f90565b805f19810111610e07575f19915f5260205f2001015460301c90565b6042906123d36120c4565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9161038e93916113f2936128fc565b73ffffffffffffffffffffffffffffffffffffffff16908115611d575773ffffffffffffffffffffffffffffffffffffffff8116928315611d2b57806124a87f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593855f52600160205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b55604051908152602090a3565b81156124bf570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600181111561038e5780600170010000000000000000000000000000000083101561261f575b6125c56125bb6125b16125a761259d6125936125826125cc9760048a680100000000000000006125d19c1015612612575b640100000000811015612605575b620100008110156125f8575b6101008110156125eb575b60108110156125de575b10156125d6575b60030260011c90565b61258c818b6124b5565b0160011c90565b61258c818a6124b5565b61258c81896124b5565b61258c81886124b5565b61258c81876124b5565b61258c81866124b5565b80936124b5565b821190565b900390565b60011b612579565b60041c9160021b91612572565b60081c9160041b91612568565b60101c9160081b9161255d565b60201c9160101b91612551565b60401c9160201b91612543565b50506125d16125cc6125c56125bb6125b16125a761259d6125936125826126468a60801c90565b98506801000000000000000097506125129650505050505050565b91905b8382106126715750505090565b9091928083169080841860011c8201809211610e0757845f5265ffffffffffff8260205f2001541665ffffffffffff8416105f146126b35750925b9190612664565b9392506126bf90612243565b916126ac565b919073ffffffffffffffffffffffffffffffffffffffff81169273ffffffffffffffffffffffffffffffffffffffff8116908482141580612843575b61270d575b5050505050565b816127c0575b505082612722575b8080612706565b6127b561279c7fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249361279661279079ffffffffffffffffffffffffffffffffffffffffffffffffffff9573ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b91612ad6565b90612baa565b6040805192851683529316602082015291829190820190565b0390a25f808061271b565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff61283961279c61282a7fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249473ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b61283388612ad6565b90612b46565b0390a25f80612713565b50831515612701565b60ff81146128ab5760ff811690601f82116128835760405191612870604084610e88565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060405161038e816128be816005611b0e565b0382610e88565b60ff81146128e95760ff811690601f82116128835760405191612870604084610e88565b5060405161038e816128be816006611b0e565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161298b579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612980575f5173ffffffffffffffffffffffffffffffffffffffff81161561297657905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600411156129a057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6129d681612996565b806129df575050565b6129e881612996565b60018103612a18577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b612a2181612996565b60028103612a5557507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b80612a61600392612996565b14612a695750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8054821015612aa9575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff8111612b165779ffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260d060045260245260445ffd5b90612b50436121ed565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612b768561239f565b92169116039079ffffffffffffffffffffffffffffffffffffffffffffffffffff8211610e0757612ba692612e91565b9091565b90612bb4436121ed565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612bda8561239f565b92169116019079ffffffffffffffffffffffffffffffffffffffffffffffffffff8211610e0757612ba692612e91565b612c13436121ed565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612c3a600a61239f565b921691160179ffffffffffffffffffffffffffffffffffffffffffffffffffff8111610e0757612ba691600a612e91565b612c74436121ed565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612c9b600a61239f565b921691160379ffffffffffffffffffffffffffffffffffffffffffffffffffff8111610e0757612ba691600a612e91565b9073ffffffffffffffffffffffffffffffffffffffff610ed892612cf261206d84612ad6565b5050168015612d4c575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f91825260409091205473ffffffffffffffffffffffffffffffffffffffff90811691166126c5565b612d5861200883612ad6565b5050612cfc565b9073ffffffffffffffffffffffffffffffffffffffff80610ed8949316918215612deb575b16908115612dd8575b5f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f205416905f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f205416906126c5565b612de461200884612ad6565b5050612d8d565b612df761206d85612ad6565b5050612d84565b805468010000000000000000811015610e8357612e2091600182018155612a94565b612e655781516020929092015160301b7fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001665ffffffffffff92909216919091179055565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80549293928015612f8757612ea8612eb391612235565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411612f5f57879303612f185750612f1492509065ffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000083549260301b169116179055565b9190565b915050612f1491612f38612f2a610ec9565b65ffffffffffff9093168352565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff86166020830152612dfe565b7f2520601d000000000000000000000000000000000000000000000000000000005f5260045ffd5b5090612fbf91612f98612f2a610ec9565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff85166020830152612dfe565b5f919056fea264697066735822122063652100b55bf9784d0ea2a4c1e8853b70bcd916398fa5a438bd9f71b717a9cf64736f6c634300081c0033c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a7dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724";
var ClankerToken_v3_1_monad_abi = [
  {
    type: "constructor",
    inputs: [
      { name: "name_", type: "string", internalType: "string" },
      { name: "symbol_", type: "string", internalType: "string" },
      { name: "maxSupply_", type: "uint256", internalType: "uint256" },
      { name: "admin_", type: "address", internalType: "address" },
      { name: "image_", type: "string", internalType: "string" },
      { name: "metadata_", type: "string", internalType: "string" },
      { name: "context_", type: "string", internalType: "string" },
      {
        name: "initialSupplyChainId_",
        type: "uint256",
        internalType: "uint256"
      }
    ],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "CLOCK_MODE",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "DOMAIN_SEPARATOR",
    inputs: [],
    outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "admin",
    inputs: [],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "allowance",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "approve",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "balanceOf",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "burn",
    inputs: [{ name: "value", type: "uint256", internalType: "uint256" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "burnFrom",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "checkpoints",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "pos", type: "uint32", internalType: "uint32" }
    ],
    outputs: [
      {
        name: "",
        type: "tuple",
        internalType: "struct Checkpoints.Checkpoint208",
        components: [
          { name: "_key", type: "uint48", internalType: "uint48" },
          { name: "_value", type: "uint208", internalType: "uint208" }
        ]
      }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "clock",
    inputs: [],
    outputs: [{ name: "", type: "uint48", internalType: "uint48" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "context",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "crosschainBurn",
    inputs: [
      { name: "_from", type: "address", internalType: "address" },
      { name: "_amount", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "crosschainMint",
    inputs: [
      { name: "_to", type: "address", internalType: "address" },
      { name: "_amount", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "decimals",
    inputs: [],
    outputs: [{ name: "", type: "uint8", internalType: "uint8" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "delegate",
    inputs: [{ name: "delegatee", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegateBySig",
    inputs: [
      { name: "delegatee", type: "address", internalType: "address" },
      { name: "nonce", type: "uint256", internalType: "uint256" },
      { name: "expiry", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegates",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "eip712Domain",
    inputs: [],
    outputs: [
      { name: "fields", type: "bytes1", internalType: "bytes1" },
      { name: "name", type: "string", internalType: "string" },
      { name: "version", type: "string", internalType: "string" },
      { name: "chainId", type: "uint256", internalType: "uint256" },
      { name: "verifyingContract", type: "address", internalType: "address" },
      { name: "salt", type: "bytes32", internalType: "bytes32" },
      { name: "extensions", type: "uint256[]", internalType: "uint256[]" }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastTotalSupply",
    inputs: [{ name: "timepoint", type: "uint256", internalType: "uint256" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastVotes",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "timepoint", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getVotes",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "imageUrl",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "isVerified",
    inputs: [],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "metadata",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "name",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "nonces",
    inputs: [{ name: "owner", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "numCheckpoints",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint32", internalType: "uint32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "permit",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" },
      { name: "deadline", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "supportsInterface",
    inputs: [{ name: "_interfaceId", type: "bytes4", internalType: "bytes4" }],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "pure"
  },
  {
    type: "function",
    name: "symbol",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "totalSupply",
    inputs: [],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "transfer",
    inputs: [
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "transferFrom",
    inputs: [
      { name: "from", type: "address", internalType: "address" },
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateImage",
    inputs: [{ name: "image_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateMetadata",
    inputs: [{ name: "metadata_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "verify",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "event",
    name: "Approval",
    inputs: [
      {
        name: "owner",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "spender",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "value",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "CrosschainBurn",
    inputs: [
      { name: "from", type: "address", indexed: true, internalType: "address" },
      {
        name: "amount",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      },
      {
        name: "sender",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "CrosschainMint",
    inputs: [
      { name: "to", type: "address", indexed: true, internalType: "address" },
      {
        name: "amount",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      },
      {
        name: "sender",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateChanged",
    inputs: [
      {
        name: "delegator",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "fromDelegate",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "toDelegate",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateVotesChanged",
    inputs: [
      {
        name: "delegate",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "previousVotes",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      },
      {
        name: "newVotes",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      }
    ],
    anonymous: false
  },
  { type: "event", name: "EIP712DomainChanged", inputs: [], anonymous: false },
  {
    type: "event",
    name: "Transfer",
    inputs: [
      { name: "from", type: "address", indexed: true, internalType: "address" },
      { name: "to", type: "address", indexed: true, internalType: "address" },
      {
        name: "value",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateImage",
    inputs: [{ name: "image", type: "string", indexed: false, internalType: "string" }],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateMetadata",
    inputs: [
      {
        name: "metadata",
        type: "string",
        indexed: false,
        internalType: "string"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "Verified",
    inputs: [
      {
        name: "admin",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "token",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  { type: "error", name: "AlreadyVerified", inputs: [] },
  { type: "error", name: "CheckpointUnorderedInsertion", inputs: [] },
  { type: "error", name: "ECDSAInvalidSignature", inputs: [] },
  {
    type: "error",
    name: "ECDSAInvalidSignatureLength",
    inputs: [{ name: "length", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ECDSAInvalidSignatureS",
    inputs: [{ name: "s", type: "bytes32", internalType: "bytes32" }]
  },
  {
    type: "error",
    name: "ERC20ExceededSafeSupply",
    inputs: [
      { name: "increasedSupply", type: "uint256", internalType: "uint256" },
      { name: "cap", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientAllowance",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "allowance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientBalance",
    inputs: [
      { name: "sender", type: "address", internalType: "address" },
      { name: "balance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InvalidApprover",
    inputs: [{ name: "approver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidReceiver",
    inputs: [{ name: "receiver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSender",
    inputs: [{ name: "sender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSpender",
    inputs: [{ name: "spender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC2612ExpiredSignature",
    inputs: [{ name: "deadline", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ERC2612InvalidSigner",
    inputs: [
      { name: "signer", type: "address", internalType: "address" },
      { name: "owner", type: "address", internalType: "address" }
    ]
  },
  {
    type: "error",
    name: "ERC5805FutureLookup",
    inputs: [
      { name: "timepoint", type: "uint256", internalType: "uint256" },
      { name: "clock", type: "uint48", internalType: "uint48" }
    ]
  },
  { type: "error", name: "ERC6372InconsistentClock", inputs: [] },
  {
    type: "error",
    name: "InvalidAccountNonce",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "currentNonce", type: "uint256", internalType: "uint256" }
    ]
  },
  { type: "error", name: "InvalidShortString", inputs: [] },
  { type: "error", name: "NotAdmin", inputs: [] },
  {
    type: "error",
    name: "SafeCastOverflowedUintDowncast",
    inputs: [
      { name: "bits", type: "uint8", internalType: "uint8" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "StringTooLong",
    inputs: [{ name: "str", type: "string", internalType: "string" }]
  },
  { type: "error", name: "Unauthorized", inputs: [] },
  {
    type: "error",
    name: "VotesExpiredSignature",
    inputs: [{ name: "expiry", type: "uint256", internalType: "uint256" }]
  }
];
var ClankerToken_v3_1_monad_bytecode = "0x61016060405234610141576140a2803803809161001b82610159565b610160396101008161016001911261014157610160516001600160401b038111610141578161004d91610160016101b9565b610180516001600160401b038111610141578261006d91610160016101b9565b6101a05161007c6101c061020e565b6101e0516001600160401b038111610141578561009c91610160016101b9565b610200519091906001600160401b03811161014157866100bf91610160016101b9565b610220519093906001600160401b038111610141576100f0976100e591610160016101b9565b946102405196610669565b604051612ffa908161106882396080518161210a015260a051816121c7015260c051816120db015260e051816121590152610100518161217f01526101205181610bf701526101405181610c200152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b610160601f91909101601f19168101906001600160401b0382119082101761018057604052565b610145565b601f909101601f19168101906001600160401b0382119082101761018057604052565b604051906101b7604083610185565b565b81601f82011215610141578051906001600160401b03821161018057604051926101ed601f8401601f191660200185610185565b8284526020838301011161014157815f9260208093018386015e8301015290565b51906001600160a01b038216820361014157565b90600182811c92168015610250575b602083101461023c57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610231565b601f8111610266575050565b60035f5260205f20906020601f840160051c830193106102a0575b601f0160051c01905b818110610295575050565b5f815560010161028a565b9091508190610281565b601f82116102b757505050565b5f5260205f20906020601f840160051c830193106102ef575b601f0160051c01905b8181106102e4575050565b5f81556001016102d9565b90915081906102d0565b80519091906001600160401b038111610180576103228161031b600454610222565b60046102aa565b602092601f821160011461036257610352929382915f92610357575b50508160011b915f199060031b1c19161790565b600455565b015190505f8061033e565b60045f52601f198216937f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f5b8681106103c657508360019596106103ae575b505050811b01600455565b01515f1960f88460031b161c191690555f80806103a3565b91926020600181928685015181550194019201610390565b80519091906001600160401b0381116101805761040781610400600e54610222565b600e6102aa565b602092601f821160011461043b57610436929382915f926103575750508160011b915f199060031b1c19161790565b600e55565b600e5f52601f198216937fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b86811061049f5750836001959610610487575b505050811b01600e55565b01515f1960f88460031b161c191690555f808061047c565b91926020600181928685015181550194019201610469565b80519091906001600160401b038111610180576104e0816104d9600c54610222565b600c6102aa565b602092601f82116001146105145761050f929382915f926103575750508160011b915f199060031b1c19161790565b600c55565b600c5f52601f198216937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8681106105785750836001959610610560575b505050811b01600c55565b01515f1960f88460031b161c191690555f8080610555565b91926020600181928685015181550194019201610542565b80519091906001600160401b038111610180576105b9816105b2600d54610222565b600d6102aa565b602092601f82116001146105ed576105e8929382915f926103575750508160011b915f199060031b1c19161790565b600d55565b600d5f52601f198216937fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5915f5b8681106106515750836001959610610639575b505050811b01600d55565b01515f1960f88460031b161c191690555f808061062e565b9192602060018192868501518155019401920161061b565b969594939291966040519061067f604083610185565b60018252603160f81b6020830190815281519093906001600160401b038111610180576106b6816106b1600354610222565b61025a565b6020601f821160011461078f5793610762936107026107719b9a98946106fa856107679a9661076c9d9a5f91610784575b508160011b915f199060031b1c19161790565b6003556102f9565b61070b816108d2565b61012052610718826109c7565b610140526020815191012060e052519020610100524660a052610739610ab9565b6080523060c052600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6103de565b6104b7565b610590565b461461077a5750565b6101b79033610826565b90508501515f6106e7565b60035f52601f198216907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b81811061080e57506107719b9a989460018561076c9c999561076299956107679c9861070296106107f6575b5050811b016003556102f9565b8601515f1960f88460031b161c191690555f806107e9565b9192602060018192868a0151815501940192016107bd565b91906001600160a01b03831680156108bf576002548281018091116108ba576002555f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160d01b038085116108a357506101b7929350610b96565b630e58ae9360e11b5f52600485905260245260445ffd5b610b82565b63ec442f0560e01b5f525f60045260245ffd5b908151602081105f146108ed5750906108ea90610b17565b90565b6001600160401b038111610180576109118161090a600554610222565b60056102aa565b602092601f821160011461094857610940929382915f926103575750508160011b915f199060031b1c19161790565b60055560ff90565b60055f52601f198216937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b8681106109af5750836001959610610997575b505050811b0160055560ff90565b01515f1960f88460031b161c191690555f8080610989565b91926020600181928685015181550194019201610976565b908151602081105f146109df5750906108ea90610b17565b6001600160401b03811161018057610a03816109fc600654610222565b60066102aa565b602092601f8211600114610a3a57610a32929382915f926103575750508160011b915f199060031b1c19161790565b60065560ff90565b60065f52601f198216937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b868110610aa15750836001959610610a89575b505050811b0160065560ff90565b01515f1960f88460031b161c191690555f8080610a7b565b91926020600181928685015181550194019201610a68565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152610b1160c082610185565b51902090565b601f815111610b42576020815191015160208210610b33571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b634e487b7160e01b5f52601160045260245ffd5b90610ba081610c95565b9165ffffffffffff4311610c7d57600a5480610c475750610bda610bca6101b7945f5b600161100b565b65ffffffffffff4316600a610f35565b50506001600160a01b03168015610c2f575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f9182526040909120546001600160a01b039081169116610dc4565b610c40610c3b83610c95565b610cc6565b5050610bec565b92835f198101116108ba57600a5f525f5160206140625f395f51905f52909301546101b793610bda91610bca919060301c610bc3565b6306dfcc6560e41b5f5260306004524360245260445ffd5b6001600160d01b038111610caf576001600160d01b031690565b6306dfcc6560e41b5f5260d060045260245260445ffd5b65ffffffffffff4311610c7d57600a5480610cf05750610bca610cec915f5b600261100b565b9091565b805f198101116108ba57600a5f525f5160206140625f395f51905f520154610cec91610bca9160301c610ce5565b65ffffffffffff4311610c7d57805480610d525750610d42610cec925f600261100b565b9065ffffffffffff431690610f35565b805f198101116108ba575f82815260209020015f190154610cec92610d429160301c610ce5565b65ffffffffffff4311610c7d57805480610d9d5750610d42610cec925f600161100b565b805f198101116108ba575f82815260209020015f190154610cec92610d429160301c610bc3565b6001600160a01b03808316939291908116908185141580610eb7575b610dec575b5050505050565b81610e5d575b505082610e01575b8080610de5565b6001600160a01b03165f9081526009602052604090205f5160206140825f395f51905f5291610e3a91610e349091610c95565b90610d79565b604080516001600160d01b039384168152919092166020820152a25f8080610dfa565b6001600160a01b03165f9081526009602052604090205f5160206140825f395f51905f5290610e9590610e8f86610c95565b90610d1e565b604080516001600160d01b039384168152919092166020820152a25f80610df2565b50831515610de0565b5f198101919082116108ba57565b908154680100000000000000008110156101805760018101808455811015610f21575f9283526020928390208251929093015160301b65ffffffffffff191665ffffffffffff9290921691909117910155565b634e487b7160e01b5f52603260045260245ffd5b80549293928015610fe157610f4c610f5791610ec0565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411610fd257879303610f9e5750610f9a92509065ffffffffffff82549181199060301b169116179055565b9190565b915050610f9a91610fbe610fb06101a8565b65ffffffffffff9093168352565b6001600160d01b0386166020830152610ece565b632520601d60e01b5f5260045ffd5b509061100691610ff2610fb06101a8565b6001600160d01b0385166020830152610ece565b5f9190565b9190918060011461104d5760021461103157634e487b7160e01b5f52605160045260245ffd5b6001600160d01b03908116918116919091039081116108ba5790565b506001600160d01b03918216908216019081116108ba579056fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a71461025457806306fdde031461024f578063095ea7b31461024a57806318160ddd1461024557806318bf50771461024057806323b872dd1461023b5780632b8c49e314610236578063313ce567146102315780633644e5151461022c578063392f37e9146102275780633a46b1a81461022257806342966c681461021d5780634bf5d7e914610218578063587cde1e146102135780635c19a95c1461020e5780636fcfff451461020957806370a082311461020457806379cc6790146101ff5780637ecebe00146101fa57806380007e83146101f557806384b0196e146101f05780638e539e8c146101eb578063918b5be1146101e657806391ddadf4146101e157806395d89b41146101dc5780639ab24eb0146101d7578063a9059cbb146101d2578063aba83150146101cd578063c3cda520146101c8578063d0496d6a146101c3578063d505accf146101be578063dd62ed3e146101b9578063eb3d68e7146101b4578063f1127ed8146101af578063f851a440146101aa5763fc735e99146101a5575f80fd5b6119de565b6119ab565b6118d5565b611761565b6116ee565b611553565b6114ae565b611340565b61127b565b611255565b6111ed565b611148565b61111d565b610f70565b610d16565b610bdf565b610bbd565b610b78565b610b48565b610b06565b610a7e565b610a5c565b610a01565b610958565b610939565b610871565b6107cc565b6107aa565b61078f565b610709565b6106d1565b61051d565b610500565b6104cf565b610391565b34610336576020600319360112610336576004357fffffffff000000000000000000000000000000000000000000000000000000008116809103610336577f3333199400000000000000000000000000000000000000000000000000000000811490811561030c575b81156102e2575b81156102d9575b506040519015158152602090f35b9050155f6102cb565b7f01ffc9a700000000000000000000000000000000000000000000000000000000811491506102c4565b7f36372b0700000000000000000000000000000000000000000000000000000000811491506102bd565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602061038e92818152019061033a565b90565b34610336575f600319360112610336576040515f6003546103b181611abd565b808452906001811690811561044757506001146103e9575b6103e5836103d981850382610e88565b6040519182918261037d565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b80821061042d575090915081016020016103d96103c9565b919260018160209254838588010152019101909291610415565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506103d990506103c9565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361033657565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361033657565b34610336576040600319360112610336576104f56104eb610489565b6024359033612418565b602060405160018152f35b34610336575f600319360112610336576020600254604051908152f35b3461033657604060031936011261033657610536610489565b6024359073420000000000000000000000000000000000002833036106a95773ffffffffffffffffffffffffffffffffffffffff811690811561067d5761058761058284600254612251565b600255565b6105ae8173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b838154019055815f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef604051806105ea88829190602083019252565b0390a360025479ffffffffffffffffffffffffffffffffffffffffffffffffffff9081811161064f5750508261061f91612ccc565b60405191825233917fde22baff038e3a3e08407cbdf617deed74e869a7ba517df611e33131c6e6ea0490602090a3005b7f1cb15d26000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610336576060600319360112610336576104f56106ed610489565b6106f56104ac565b60443591610704833383611c66565b611dcb565b3461033657604060031936011261033657610722610489565b60243573420000000000000000000000000000000000002833036106a95761074a8183611f3e565b6040519081527fb90795a66650155983e242cac3e1ac1a4dc26f8ed2987f3ce416a34e00111fd4602073ffffffffffffffffffffffffffffffffffffffff33941692a3005b34610336575f60031936011261033657602060405160128152f35b34610336575f6003193601126103365760206107c46120c4565b604051908152f35b34610336575f600319360112610336576040515f600c546107ec81611abd565b80845290600181169081156104475750600114610813576103e5836103d981850382610e88565b600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7939250905b808210610857575090915081016020016103d96103c9565b91926001816020925483858801015201910190929161083f565b346103365760406003193601126103365761088a610489565b60243565ffffffffffff61089d436121ed565b168082101561090a576103e579ffffffffffffffffffffffffffffffffffffffffffffffffffff6108f98473ffffffffffffffffffffffffffffffffffffffff87165f5260096020526108f360405f20916121ed565b9061225e565b604051911681529081906020820190565b907fecd3f81e000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b346103365760206003193601126103365761095660043533611f3e565b005b34610336575f60031936011261033657610971436121ed565b65ffffffffffff80610982436121ed565b169116036109d9576103e560405161099b604082610e88565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015260405191829160208352602083019061033a565b7f6ff07140000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103365760206003193601126103365773ffffffffffffffffffffffffffffffffffffffff610a2f610489565b165f526008602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461033657602060031936011261033657610956610a78610489565b336122ef565b346103365760206003193601126103365773ffffffffffffffffffffffffffffffffffffffff610aac610489565b165f52600960205260405f205463ffffffff8111610ad65760405163ffffffff9091168152602090f35b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b346103365760206003193601126103365760206107c4610b24610489565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b3461033657604060031936011261033657610956610b64610489565b60243590610b73823383611c66565b611f3e565b346103365760206003193601126103365773ffffffffffffffffffffffffffffffffffffffff610ba6610489565b165f526007602052602060405f2054604051908152f35b34610336575f60031936011261033657602060ff600f54166040519015158152f35b34610336575f60031936011261033657610cbd610c1b7f000000000000000000000000000000000000000000000000000000000000000061284c565b610c447f00000000000000000000000000000000000000000000000000000000000000006128c5565b6020604051610c538282610e88565b5f815281610ccb818301947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013687376040519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e0858a015260e089019061033a565b90878203604089015261033a565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110610cff57505050500390f35b835185528695509381019392810192600101610cf0565b346103365760206003193601126103365760043565ffffffffffff610d3a436121ed565b169081811015610e0c57610d4d906121ed565b600a54905f829160058411610db3575b610d699350600a612661565b80610d97575060205f5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff60405191168152f35b610da2602091612235565b600a5f52815f20015460301c610d73565b9192610dbe816124ec565b8103908111610e0757610d6993600a5f5265ffffffffffff8260205f2001541665ffffffffffff8516105f14610df5575091610d5d565b929150610e0190612243565b90610d5d565b611a90565b7fecd3f81e000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610e8357604052565b610e3a565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e8357604052565b60405190610ed8604083610e88565b565b60206003198201126103365760043567ffffffffffffffff811161033657816023820112156103365780600401359067ffffffffffffffff8211610e835760405192610f4e601f84017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200185610e88565b8284526024838301011161033657815f92602460209301838601378301015290565b3461033657610f7e36610eda565b73ffffffffffffffffffffffffffffffffffffffff600b541633036110f557805167ffffffffffffffff8111610e8357610fc281610fbd600c54611abd565b611bae565b6020601f8211600114611032579161101382611022937ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4955f91611027575b505f198260011b9260031b1c19161790565b600c556040519182918261037d565b0390a1005b90508301515f611001565b600c5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8181106110dd5750927ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f494926001928261102296106110c5575b5050811b01600c556103d9565b8401515f1960f88460031b161c191690555f806110b8565b9192602060018192868901518155019401920161107e565b7f7bfa4b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610336575f600319360112610336576020611138436121ed565b65ffffffffffff60405191168152f35b34610336575f600319360112610336576040515f60045461116881611abd565b8084529060018116908115610447575060011461118f576103e5836103d981850382610e88565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b8082106111d3575090915081016020016103d96103c9565b9192600181602092548385880101520191019092916111bb565b346103365760206003193601126103365773ffffffffffffffffffffffffffffffffffffffff61121b610489565b165f526009602052602079ffffffffffffffffffffffffffffffffffffffffffffffffffff61124c60405f2061239f565b16604051908152f35b34610336576040600319360112610336576104f5611271610489565b6024359033611dcb565b34610336575f600319360112610336576040515f600e5461129b81611abd565b808452906001811690811561044757506001146112c2576103e5836103d981850382610e88565b600e5f9081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd939250905b808210611306575090915081016020016103d96103c9565b9192600181602092548385880101520191019092916112ee565b6064359060ff8216820361033657565b6084359060ff8216820361033657565b346103365760c060031936011261033657611359610489565b60243590604435611368611320565b6084359060a4359280421161148357916113fb93916113ed6113f29460405160208101917fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf835273ffffffffffffffffffffffffffffffffffffffff8a1660408301528a60608301526080820152608081526113e560a082610e88565b5190206123c8565b6128fc565b909291926129cd565b61142c8173ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b80930361143d5761095692506122ef565b73ffffffffffffffffffffffffffffffffffffffff91507f752d88c0000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b7f4683af0e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610336575f600319360112610336576040515f600d546114ce81611abd565b808452906001811690811561044757506001146114f5576103e5836103d981850382610e88565b600d5f9081527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5939250905b808210611539575090915081016020016103d96103c9565b919260018160209254838588010152019101909291611521565b346103365760e06003193601126103365761156c610489565b6115746104ac565b6044359060643592611584611330565b60a43560c435908642116116c2576116549261164f6115ca8673ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b9860405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff89169b8c604084015273ffffffffffffffffffffffffffffffffffffffff8b1660608401528b608084015260a083015260c082015260c081526113e560e082610e88565b612409565b9373ffffffffffffffffffffffffffffffffffffffff85160361167b576109569350612418565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff8085166004521660245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461033657604060031936011261033657602061175861170c610489565b73ffffffffffffffffffffffffffffffffffffffff6117296104ac565b91165f526001835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b346103365761176f36610eda565b73ffffffffffffffffffffffffffffffffffffffff600b541633036110f557805167ffffffffffffffff8111610e83576117b3816117ae600e54611abd565b611bfe565b6020601f8211600114611812579161180382611022937fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216955f9161102757505f198260011b9260031b1c19161790565b600e556040519182918261037d565b600e5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b8181106118bd5750927fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b5552421694926001928261102296106118a5575b5050811b01600e556103d9565b8401515f1960f88460031b161c191690555f80611898565b9192602060018192868901518155019401920161185e565b34610336576040600319360112610336576118ee610489565b6024359063ffffffff82168203610336576103e59173ffffffffffffffffffffffffffffffffffffffff61194892611924611c4e565b5061192d611c4e565b50165f52600960205260405f20611942611c4e565b50612a94565b506040519061195682610e67565b5465ffffffffffff8116825260301c602082015260405191829182919091602079ffffffffffffffffffffffffffffffffffffffffffffffffffff81604084019565ffffffffffff8151168552015116910152565b34610336575f60031936011261033657602073ffffffffffffffffffffffffffffffffffffffff600b5416604051908152f35b34610336575f6003193601126103365773ffffffffffffffffffffffffffffffffffffffff600b541633036110f557600f5460ff8116611a68577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117600f5530337f78a953f3f0d92abc078a34e5d4fedf8708e788e1b29300b3d6170e97f88a13fc5f80a3005b7f118fd7b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90600182811c92168015611b04575b6020831014611ad757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611acc565b5f9291815491611b1d83611abd565b8083529260018116908115611b725750600114611b3957505050565b5f9081526020812093945091925b838310611b58575060209250010190565b600181602092949394548385870101520191019190611b47565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b601f8111611bba575050565b600c5f5260205f20906020601f840160051c83019310611bf4575b601f0160051c01905b818110611be9575050565b5f8155600101611bde565b9091508190611bd5565b601f8111611c0a575050565b600e5f5260205f20906020601f840160051c83019310611c44575b601f0160051c01905b818110611c39575050565b5f8155600101611c2e565b9091508190611c25565b60405190611c5b82610e67565b5f6020838281520152565b73ffffffffffffffffffffffffffffffffffffffff909291921690815f526001602052611cb48360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b545f198103611cc4575b50505050565b818110611d83578215611d575773ffffffffffffffffffffffffffffffffffffffff841615611d2b57611d21925f526001602052039160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b555f808080611cbe565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b92919073ffffffffffffffffffffffffffffffffffffffff8416938415611f125773ffffffffffffffffffffffffffffffffffffffff8216801561067d57611e308273ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5495848710611ec65784610ed8969703611e678473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b55611e8f8473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3612d5f565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff83166004526024879052604485905260645ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8116908115611f1257611f838173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b548381106120795790611fbb84610ed8959493039173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5581600254036002555f817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405180602081018782520390a38015612061575b61200d61200883612ad6565b612c6b565b50505f908152600860205260408120549080527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75473ffffffffffffffffffffffffffffffffffffffff90811691166126c5565b61207261206d83612ad6565b612c0a565b5050611ffc565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff909116600452602452604482905260645ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806121c4575b1561212c577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526121be60c082610e88565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612103565b65ffffffffffff81116122055765ffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52603060045260245260445ffd5b905f198201918211610e0757565b9060018201809211610e0757565b91908201809211610e0757565b908154905f82916005841161229c575b612279935084612661565b806122845750505f90565b61228d90612235565b905f5260205f20015460301c90565b91926122a7816124ec565b8103908111610e075761227993855f5265ffffffffffff8260205f2001541665ffffffffffff8516105f146122dd57509161226e565b9291506122e990612243565b9061226e565b73ffffffffffffffffffffffffffffffffffffffff8181165f81815260086020526040812080548685167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117909255610ed8969416946123999390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b916126c5565b8054806123ac5750505f90565b805f19810111610e07575f19915f5260205f2001015460301c90565b6042906123d36120c4565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9161038e93916113f2936128fc565b73ffffffffffffffffffffffffffffffffffffffff16908115611d575773ffffffffffffffffffffffffffffffffffffffff8116928315611d2b57806124a87f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593855f52600160205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b55604051908152602090a3565b81156124bf570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600181111561038e5780600170010000000000000000000000000000000083101561261f575b6125c56125bb6125b16125a761259d6125936125826125cc9760048a680100000000000000006125d19c1015612612575b640100000000811015612605575b620100008110156125f8575b6101008110156125eb575b60108110156125de575b10156125d6575b60030260011c90565b61258c818b6124b5565b0160011c90565b61258c818a6124b5565b61258c81896124b5565b61258c81886124b5565b61258c81876124b5565b61258c81866124b5565b80936124b5565b821190565b900390565b60011b612579565b60041c9160021b91612572565b60081c9160041b91612568565b60101c9160081b9161255d565b60201c9160101b91612551565b60401c9160201b91612543565b50506125d16125cc6125c56125bb6125b16125a761259d6125936125826126468a60801c90565b98506801000000000000000097506125129650505050505050565b91905b8382106126715750505090565b9091928083169080841860011c8201809211610e0757845f5265ffffffffffff8260205f2001541665ffffffffffff8416105f146126b35750925b9190612664565b9392506126bf90612243565b916126ac565b919073ffffffffffffffffffffffffffffffffffffffff81169273ffffffffffffffffffffffffffffffffffffffff8116908482141580612843575b61270d575b5050505050565b816127c0575b505082612722575b8080612706565b6127b561279c7fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249361279661279079ffffffffffffffffffffffffffffffffffffffffffffffffffff9573ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b91612ad6565b90612baa565b6040805192851683529316602082015291829190820190565b0390a25f808061271b565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff61283961279c61282a7fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249473ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b61283388612ad6565b90612b46565b0390a25f80612713565b50831515612701565b60ff81146128ab5760ff811690601f82116128835760405191612870604084610e88565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060405161038e816128be816005611b0e565b0382610e88565b60ff81146128e95760ff811690601f82116128835760405191612870604084610e88565b5060405161038e816128be816006611b0e565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161298b579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612980575f5173ffffffffffffffffffffffffffffffffffffffff81161561297657905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b600411156129a057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6129d681612996565b806129df575050565b6129e881612996565b60018103612a18577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b612a2181612996565b60028103612a5557507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b80612a61600392612996565b14612a695750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8054821015612aa9575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff8111612b165779ffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260d060045260245260445ffd5b90612b50436121ed565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612b768561239f565b92169116039079ffffffffffffffffffffffffffffffffffffffffffffffffffff8211610e0757612ba692612e91565b9091565b90612bb4436121ed565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612bda8561239f565b92169116019079ffffffffffffffffffffffffffffffffffffffffffffffffffff8211610e0757612ba692612e91565b612c13436121ed565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612c3a600a61239f565b921691160179ffffffffffffffffffffffffffffffffffffffffffffffffffff8111610e0757612ba691600a612e91565b612c74436121ed565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612c9b600a61239f565b921691160379ffffffffffffffffffffffffffffffffffffffffffffffffffff8111610e0757612ba691600a612e91565b9073ffffffffffffffffffffffffffffffffffffffff610ed892612cf261206d84612ad6565b5050168015612d4c575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f91825260409091205473ffffffffffffffffffffffffffffffffffffffff90811691166126c5565b612d5861200883612ad6565b5050612cfc565b9073ffffffffffffffffffffffffffffffffffffffff80610ed8949316918215612deb575b16908115612dd8575b5f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f205416905f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f205416906126c5565b612de461200884612ad6565b5050612d8d565b612df761206d85612ad6565b5050612d84565b805468010000000000000000811015610e8357612e2091600182018155612a94565b612e655781516020929092015160301b7fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001665ffffffffffff92909216919091179055565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80549293928015612f8757612ea8612eb391612235565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411612f5f57879303612f185750612f1492509065ffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000083549260301b169116179055565b9190565b915050612f1491612f38612f2a610ec9565b65ffffffffffff9093168352565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff86166020830152612dfe565b7f2520601d000000000000000000000000000000000000000000000000000000005f5260045ffd5b5090612fbf91612f98612f2a610ec9565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff85166020830152612dfe565b5f919056fea26469706673582212204e1de4ea938b928df16b4d797528b3228dc67d526470a44525dd87cdb1d41bf164736f6c634300081c0033c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a7dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724";
var ClankerToken_v3_1_abstract_abi = [
  {
    type: "constructor",
    inputs: [
      { name: "name_", type: "string", internalType: "string" },
      { name: "symbol_", type: "string", internalType: "string" },
      { name: "maxSupply_", type: "uint256", internalType: "uint256" },
      { name: "admin_", type: "address", internalType: "address" },
      { name: "image_", type: "string", internalType: "string" },
      { name: "metadata_", type: "string", internalType: "string" },
      { name: "context_", type: "string", internalType: "string" },
      {
        name: "initialSupplyChainId_",
        type: "uint256",
        internalType: "uint256"
      }
    ],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "CLOCK_MODE",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "DOMAIN_SEPARATOR",
    inputs: [],
    outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "admin",
    inputs: [],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "allowance",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "approve",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "balanceOf",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "burn",
    inputs: [{ name: "value", type: "uint256", internalType: "uint256" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "burnFrom",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "checkpoints",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "pos", type: "uint32", internalType: "uint32" }
    ],
    outputs: [
      {
        name: "",
        type: "tuple",
        internalType: "struct Checkpoints.Checkpoint208",
        components: [
          { name: "_key", type: "uint48", internalType: "uint48" },
          { name: "_value", type: "uint208", internalType: "uint208" }
        ]
      }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "clock",
    inputs: [],
    outputs: [{ name: "", type: "uint48", internalType: "uint48" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "context",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "decimals",
    inputs: [],
    outputs: [{ name: "", type: "uint8", internalType: "uint8" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "delegate",
    inputs: [{ name: "delegatee", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegateBySig",
    inputs: [
      { name: "delegatee", type: "address", internalType: "address" },
      { name: "nonce", type: "uint256", internalType: "uint256" },
      { name: "expiry", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegates",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "eip712Domain",
    inputs: [],
    outputs: [
      { name: "fields", type: "bytes1", internalType: "bytes1" },
      { name: "name", type: "string", internalType: "string" },
      { name: "version", type: "string", internalType: "string" },
      { name: "chainId", type: "uint256", internalType: "uint256" },
      {
        name: "verifyingContract",
        type: "address",
        internalType: "address"
      },
      { name: "salt", type: "bytes32", internalType: "bytes32" },
      {
        name: "extensions",
        type: "uint256[]",
        internalType: "uint256[]"
      }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastTotalSupply",
    inputs: [{ name: "timepoint", type: "uint256", internalType: "uint256" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastVotes",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "timepoint", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getVotes",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "imageUrl",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "isVerified",
    inputs: [],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "metadata",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "name",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "nonces",
    inputs: [{ name: "owner", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "numCheckpoints",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint32", internalType: "uint32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "permit",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" },
      { name: "deadline", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "supportsInterface",
    inputs: [{ name: "_interfaceId", type: "bytes4", internalType: "bytes4" }],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "pure"
  },
  {
    type: "function",
    name: "symbol",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "totalSupply",
    inputs: [],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "transfer",
    inputs: [
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "transferFrom",
    inputs: [
      { name: "from", type: "address", internalType: "address" },
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateImage",
    inputs: [{ name: "image_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateMetadata",
    inputs: [{ name: "metadata_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "verify",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "event",
    name: "Approval",
    inputs: [
      {
        name: "owner",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "spender",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "value",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateChanged",
    inputs: [
      {
        name: "delegator",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "fromDelegate",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "toDelegate",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateVotesChanged",
    inputs: [
      {
        name: "delegate",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "previousVotes",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      },
      {
        name: "newVotes",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "EIP712DomainChanged",
    inputs: [],
    anonymous: false
  },
  {
    type: "event",
    name: "Transfer",
    inputs: [
      {
        name: "from",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "to",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "value",
        type: "uint256",
        indexed: false,
        internalType: "uint256"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateImage",
    inputs: [
      {
        name: "image",
        type: "string",
        indexed: false,
        internalType: "string"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateMetadata",
    inputs: [
      {
        name: "metadata",
        type: "string",
        indexed: false,
        internalType: "string"
      }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "Verified",
    inputs: [
      {
        name: "admin",
        type: "address",
        indexed: true,
        internalType: "address"
      },
      {
        name: "token",
        type: "address",
        indexed: true,
        internalType: "address"
      }
    ],
    anonymous: false
  },
  { type: "error", name: "AlreadyVerified", inputs: [] },
  { type: "error", name: "CheckpointUnorderedInsertion", inputs: [] },
  { type: "error", name: "ECDSAInvalidSignature", inputs: [] },
  {
    type: "error",
    name: "ECDSAInvalidSignatureLength",
    inputs: [{ name: "length", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ECDSAInvalidSignatureS",
    inputs: [{ name: "s", type: "bytes32", internalType: "bytes32" }]
  },
  {
    type: "error",
    name: "ERC20ExceededSafeSupply",
    inputs: [
      {
        name: "increasedSupply",
        type: "uint256",
        internalType: "uint256"
      },
      { name: "cap", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientAllowance",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "allowance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientBalance",
    inputs: [
      { name: "sender", type: "address", internalType: "address" },
      { name: "balance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InvalidApprover",
    inputs: [{ name: "approver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidReceiver",
    inputs: [{ name: "receiver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSender",
    inputs: [{ name: "sender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSpender",
    inputs: [{ name: "spender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC2612ExpiredSignature",
    inputs: [{ name: "deadline", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ERC2612InvalidSigner",
    inputs: [
      { name: "signer", type: "address", internalType: "address" },
      { name: "owner", type: "address", internalType: "address" }
    ]
  },
  {
    type: "error",
    name: "ERC5805FutureLookup",
    inputs: [
      { name: "timepoint", type: "uint256", internalType: "uint256" },
      { name: "clock", type: "uint48", internalType: "uint48" }
    ]
  },
  { type: "error", name: "ERC6372InconsistentClock", inputs: [] },
  {
    type: "error",
    name: "InvalidAccountNonce",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "currentNonce", type: "uint256", internalType: "uint256" }
    ]
  },
  { type: "error", name: "InvalidShortString", inputs: [] },
  { type: "error", name: "NotAdmin", inputs: [] },
  {
    type: "error",
    name: "SafeCastOverflowedUintDowncast",
    inputs: [
      { name: "bits", type: "uint8", internalType: "uint8" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "StringTooLong",
    inputs: [{ name: "str", type: "string", internalType: "string" }]
  },
  {
    type: "error",
    name: "VotesExpiredSignature",
    inputs: [{ name: "expiry", type: "uint256", internalType: "uint256" }]
  }
];
var ClankerToken_v3_1_abstract_bytecode = "0x6101606040523461014157613da3803803809161001b82610159565b610160396101008161016001911261014157610160516001600160401b038111610141578161004d91610160016101b9565b610180516001600160401b038111610141578261006d91610160016101b9565b6101a05161007c6101c061020e565b6101e0516001600160401b038111610141578561009c91610160016101b9565b610200519091906001600160401b03811161014157866100bf91610160016101b9565b610220519093906001600160401b038111610141576100f0976100e591610160016101b9565b946102405196610669565b604051612cfb9081611068823960805181611d25015260a05181611de2015260c05181611cf6015260e05181611d7401526101005181611d9a0152610120518161096c015261014051816109950152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b610160601f91909101601f19168101906001600160401b0382119082101761018057604052565b610145565b601f909101601f19168101906001600160401b0382119082101761018057604052565b604051906101b7604083610185565b565b81601f82011215610141578051906001600160401b03821161018057604051926101ed601f8401601f191660200185610185565b8284526020838301011161014157815f9260208093018386015e8301015290565b51906001600160a01b038216820361014157565b90600182811c92168015610250575b602083101461023c57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610231565b601f8111610266575050565b60035f5260205f20906020601f840160051c830193106102a0575b601f0160051c01905b818110610295575050565b5f815560010161028a565b9091508190610281565b601f82116102b757505050565b5f5260205f20906020601f840160051c830193106102ef575b601f0160051c01905b8181106102e4575050565b5f81556001016102d9565b90915081906102d0565b80519091906001600160401b038111610180576103228161031b600454610222565b60046102aa565b602092601f821160011461036257610352929382915f92610357575b50508160011b915f199060031b1c19161790565b600455565b015190505f8061033e565b60045f52601f198216937f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f5b8681106103c657508360019596106103ae575b505050811b01600455565b01515f1960f88460031b161c191690555f80806103a3565b91926020600181928685015181550194019201610390565b80519091906001600160401b0381116101805761040781610400600e54610222565b600e6102aa565b602092601f821160011461043b57610436929382915f926103575750508160011b915f199060031b1c19161790565b600e55565b600e5f52601f198216937fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b86811061049f5750836001959610610487575b505050811b01600e55565b01515f1960f88460031b161c191690555f808061047c565b91926020600181928685015181550194019201610469565b80519091906001600160401b038111610180576104e0816104d9600c54610222565b600c6102aa565b602092601f82116001146105145761050f929382915f926103575750508160011b915f199060031b1c19161790565b600c55565b600c5f52601f198216937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8681106105785750836001959610610560575b505050811b01600c55565b01515f1960f88460031b161c191690555f8080610555565b91926020600181928685015181550194019201610542565b80519091906001600160401b038111610180576105b9816105b2600d54610222565b600d6102aa565b602092601f82116001146105ed576105e8929382915f926103575750508160011b915f199060031b1c19161790565b600d55565b600d5f52601f198216937fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5915f5b8681106106515750836001959610610639575b505050811b01600d55565b01515f1960f88460031b161c191690555f808061062e565b9192602060018192868501518155019401920161061b565b969594939291966040519061067f604083610185565b60018252603160f81b6020830190815281519093906001600160401b038111610180576106b6816106b1600354610222565b61025a565b6020601f821160011461078f5793610762936107026107719b9a98946106fa856107679a9661076c9d9a5f91610784575b508160011b915f199060031b1c19161790565b6003556102f9565b61070b816108d2565b61012052610718826109c7565b610140526020815191012060e052519020610100524660a052610739610ab9565b6080523060c052600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6103de565b6104b7565b610590565b461461077a5750565b6101b79033610826565b90508501515f6106e7565b60035f52601f198216907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b81811061080e57506107719b9a989460018561076c9c999561076299956107679c9861070296106107f6575b5050811b016003556102f9565b8601515f1960f88460031b161c191690555f806107e9565b9192602060018192868a0151815501940192016107bd565b91906001600160a01b03831680156108bf576002548281018091116108ba576002555f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160d01b038085116108a357506101b7929350610b96565b630e58ae9360e11b5f52600485905260245260445ffd5b610b82565b63ec442f0560e01b5f525f60045260245ffd5b908151602081105f146108ed5750906108ea90610b17565b90565b6001600160401b038111610180576109118161090a600554610222565b60056102aa565b602092601f821160011461094857610940929382915f926103575750508160011b915f199060031b1c19161790565b60055560ff90565b60055f52601f198216937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b8681106109af5750836001959610610997575b505050811b0160055560ff90565b01515f1960f88460031b161c191690555f8080610989565b91926020600181928685015181550194019201610976565b908151602081105f146109df5750906108ea90610b17565b6001600160401b03811161018057610a03816109fc600654610222565b60066102aa565b602092601f8211600114610a3a57610a32929382915f926103575750508160011b915f199060031b1c19161790565b60065560ff90565b60065f52601f198216937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b868110610aa15750836001959610610a89575b505050811b0160065560ff90565b01515f1960f88460031b161c191690555f8080610a7b565b91926020600181928685015181550194019201610a68565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152610b1160c082610185565b51902090565b601f815111610b42576020815191015160208210610b33571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b634e487b7160e01b5f52601160045260245ffd5b90610ba081610c95565b9165ffffffffffff4311610c7d57600a5480610c475750610bda610bca6101b7945f5b600161100b565b65ffffffffffff4316600a610f35565b50506001600160a01b03168015610c2f575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f9182526040909120546001600160a01b039081169116610dc4565b610c40610c3b83610c95565b610cc6565b5050610bec565b92835f198101116108ba57600a5f525f516020613d635f395f51905f52909301546101b793610bda91610bca919060301c610bc3565b6306dfcc6560e41b5f5260306004524360245260445ffd5b6001600160d01b038111610caf576001600160d01b031690565b6306dfcc6560e41b5f5260d060045260245260445ffd5b65ffffffffffff4311610c7d57600a5480610cf05750610bca610cec915f5b600261100b565b9091565b805f198101116108ba57600a5f525f516020613d635f395f51905f520154610cec91610bca9160301c610ce5565b65ffffffffffff4311610c7d57805480610d525750610d42610cec925f600261100b565b9065ffffffffffff431690610f35565b805f198101116108ba575f82815260209020015f190154610cec92610d429160301c610ce5565b65ffffffffffff4311610c7d57805480610d9d5750610d42610cec925f600161100b565b805f198101116108ba575f82815260209020015f190154610cec92610d429160301c610bc3565b6001600160a01b03808316939291908116908185141580610eb7575b610dec575b5050505050565b81610e5d575b505082610e01575b8080610de5565b6001600160a01b03165f9081526009602052604090205f516020613d835f395f51905f5291610e3a91610e349091610c95565b90610d79565b604080516001600160d01b039384168152919092166020820152a25f8080610dfa565b6001600160a01b03165f9081526009602052604090205f516020613d835f395f51905f5290610e9590610e8f86610c95565b90610d1e565b604080516001600160d01b039384168152919092166020820152a25f80610df2565b50831515610de0565b5f198101919082116108ba57565b908154680100000000000000008110156101805760018101808455811015610f21575f9283526020928390208251929093015160301b65ffffffffffff191665ffffffffffff9290921691909117910155565b634e487b7160e01b5f52603260045260245ffd5b80549293928015610fe157610f4c610f5791610ec0565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411610fd257879303610f9e5750610f9a92509065ffffffffffff82549181199060301b169116179055565b9190565b915050610f9a91610fbe610fb06101a8565b65ffffffffffff9093168352565b6001600160d01b0386166020830152610ece565b632520601d60e01b5f5260045ffd5b509061100691610ff2610fb06101a8565b6001600160d01b0385166020830152610ece565b5f9190565b9190918060011461104d5760021461103157634e487b7160e01b5f52605160045260245ffd5b6001600160d01b03908116918116919091039081116108ba5790565b506001600160d01b03918216908216019081116108ba579056fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a71461023457806306fdde031461022f578063095ea7b31461022a57806318160ddd1461022557806323b872dd14610220578063313ce5671461021b5780633644e51514610216578063392f37e9146102115780633a46b1a81461020c57806342966c68146102075780634bf5d7e914610202578063587cde1e146101fd5780635c19a95c146101f85780636fcfff45146101f357806370a08231146101ee57806379cc6790146101e95780637ecebe00146101e457806380007e83146101df57806384b0196e146101da5780638e539e8c146101d5578063918b5be1146101d057806391ddadf4146101cb57806395d89b41146101c65780639ab24eb0146101c1578063a9059cbb146101bc578063aba83150146101b7578063c3cda520146101b2578063d0496d6a146101ad578063d505accf146101a8578063dd62ed3e146101a3578063eb3d68e71461019e578063f1127ed814610199578063f851a440146101945763fc735e991461018f575f80fd5b611753565b611720565b61164a565b6114d6565b611463565b6112c8565b611223565b6110b5565b610ff0565b610fca565b610f62565b610ebd565b610e92565b610ce5565b610a8b565b610954565b610932565b6108ed565b6108bd565b61087b565b6107f3565b6107d1565b610776565b6106cd565b6106ae565b6105e6565b610541565b61051f565b610504565b6104cc565b6104af565b61047e565b610340565b346102e55760206003193601126102e5576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036102e557807f36372b0700000000000000000000000000000000000000000000000000000000602092149081156102bb575b81156102b2575b506040519015158152f35b9050155f6102a7565b7f01ffc9a700000000000000000000000000000000000000000000000000000000811491506102a0565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602061033d9281815201906102e9565b90565b346102e5575f6003193601126102e5576040515f60035461036081611832565b80845290600181169081156103f65750600114610398575b6103948361038881850382610bfd565b6040519182918261032c565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b8082106103dc57509091508101602001610388610378565b9192600181602092548385880101520191019092916103c4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506103889050610378565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102e557565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102e557565b346102e55760406003193601126102e5576104a461049a610438565b60243590336121ac565b602060405160018152f35b346102e5575f6003193601126102e5576020600254604051908152f35b346102e55760606003193601126102e5576104a46104e8610438565b6104f061045b565b604435916104ff8333836119db565b611b40565b346102e5575f6003193601126102e557602060405160128152f35b346102e5575f6003193601126102e5576020610539611cdf565b604051908152f35b346102e5575f6003193601126102e5576040515f600c5461056181611832565b80845290600181169081156103f65750600114610588576103948361038881850382610bfd565b600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7939250905b8082106105cc57509091508101602001610388610378565b9192600181602092548385880101520191019092916105b4565b346102e55760406003193601126102e5576105ff610438565b60243565ffffffffffff61061243611e08565b168082101561067f5761039479ffffffffffffffffffffffffffffffffffffffffffffffffffff61066e8473ffffffffffffffffffffffffffffffffffffffff87165f52600960205261066860405f2091611e08565b90611e6c565b604051911681529081906020820190565b907fecd3f81e000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b346102e55760206003193601126102e5576106cb60043533611efd565b005b346102e5575f6003193601126102e5576106e643611e08565b65ffffffffffff806106f743611e08565b1691160361074e57610394604051610710604082610bfd565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c7400000060208201526040519182916020835260208301906102e9565b7f6ff07140000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e55760206003193601126102e55773ffffffffffffffffffffffffffffffffffffffff6107a4610438565b165f526008602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346102e55760206003193601126102e5576106cb6107ed610438565b33612083565b346102e55760206003193601126102e55773ffffffffffffffffffffffffffffffffffffffff610821610438565b165f52600960205260405f205463ffffffff811161084b5760405163ffffffff9091168152602090f35b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b346102e55760206003193601126102e5576020610539610899610438565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b346102e55760406003193601126102e5576106cb6108d9610438565b602435906108e88233836119db565b611efd565b346102e55760206003193601126102e55773ffffffffffffffffffffffffffffffffffffffff61091b610438565b165f526007602052602060405f2054604051908152f35b346102e5575f6003193601126102e557602060ff600f54166040519015158152f35b346102e5575f6003193601126102e557610a326109907f00000000000000000000000000000000000000000000000000000000000000006125e0565b6109b97f0000000000000000000000000000000000000000000000000000000000000000612659565b60206040516109c88282610bfd565b5f815281610a40818301947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013687376040519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e0858a015260e08901906102e9565b9087820360408901526102e9565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110610a7457505050500390f35b835185528695509381019392810192600101610a65565b346102e55760206003193601126102e55760043565ffffffffffff610aaf43611e08565b169081811015610b8157610ac290611e08565b600a54905f829160058411610b28575b610ade9350600a6123f5565b80610b0c575060205f5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff60405191168152f35b610b17602091611e50565b600a5f52815f20015460301c610ae8565b9192610b3381612280565b8103908111610b7c57610ade93600a5f5265ffffffffffff8260205f2001541665ffffffffffff8516105f14610b6a575091610ad2565b929150610b7690611e5e565b90610ad2565b611805565b7fecd3f81e000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610bf857604052565b610baf565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610bf857604052565b60405190610c4d604083610bfd565b565b60206003198201126102e55760043567ffffffffffffffff81116102e557816023820112156102e55780600401359067ffffffffffffffff8211610bf85760405192610cc3601f84017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200185610bfd565b828452602483830101116102e557815f92602460209301838601378301015290565b346102e557610cf336610c4f565b73ffffffffffffffffffffffffffffffffffffffff600b54163303610e6a57805167ffffffffffffffff8111610bf857610d3781610d32600c54611832565b611923565b6020601f8211600114610da75791610d8882610d97937ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4955f91610d9c575b505f198260011b9260031b1c19161790565b600c556040519182918261032c565b0390a1005b90508301515f610d76565b600c5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b818110610e525750927ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4949260019282610d979610610e3a575b5050811b01600c55610388565b8401515f1960f88460031b161c191690555f80610e2d565b91926020600181928689015181550194019201610df3565b7f7bfa4b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e5575f6003193601126102e5576020610ead43611e08565b65ffffffffffff60405191168152f35b346102e5575f6003193601126102e5576040515f600454610edd81611832565b80845290600181169081156103f65750600114610f04576103948361038881850382610bfd565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610f4857509091508101602001610388610378565b919260018160209254838588010152019101909291610f30565b346102e55760206003193601126102e55773ffffffffffffffffffffffffffffffffffffffff610f90610438565b165f526009602052602079ffffffffffffffffffffffffffffffffffffffffffffffffffff610fc160405f20612133565b16604051908152f35b346102e55760406003193601126102e5576104a4610fe6610438565b6024359033611b40565b346102e5575f6003193601126102e5576040515f600e5461101081611832565b80845290600181169081156103f65750600114611037576103948361038881850382610bfd565b600e5f9081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd939250905b80821061107b57509091508101602001610388610378565b919260018160209254838588010152019101909291611063565b6064359060ff821682036102e557565b6084359060ff821682036102e557565b346102e55760c06003193601126102e5576110ce610438565b602435906044356110dd611095565b6084359060a435928042116111f8579161117093916111626111679460405160208101917fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf835273ffffffffffffffffffffffffffffffffffffffff8a1660408301528a606083015260808201526080815261115a60a082610bfd565b51902061215c565b612690565b90929192612761565b6111a18173ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b8093036111b2576106cb9250612083565b73ffffffffffffffffffffffffffffffffffffffff91507f752d88c0000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b7f4683af0e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346102e5575f6003193601126102e5576040515f600d5461124381611832565b80845290600181169081156103f6575060011461126a576103948361038881850382610bfd565b600d5f9081527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5939250905b8082106112ae57509091508101602001610388610378565b919260018160209254838588010152019101909291611296565b346102e55760e06003193601126102e5576112e1610438565b6112e961045b565b60443590606435926112f96110a5565b60a43560c43590864211611437576113c9926113c461133f8673ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b9860405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff89169b8c604084015273ffffffffffffffffffffffffffffffffffffffff8b1660608401528b608084015260a083015260c082015260c0815261115a60e082610bfd565b61219d565b9373ffffffffffffffffffffffffffffffffffffffff8516036113f0576106cb93506121ac565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff8085166004521660245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346102e55760406003193601126102e55760206114cd611481610438565b73ffffffffffffffffffffffffffffffffffffffff61149e61045b565b91165f526001835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b346102e5576114e436610c4f565b73ffffffffffffffffffffffffffffffffffffffff600b54163303610e6a57805167ffffffffffffffff8111610bf85761152881611523600e54611832565b611973565b6020601f8211600114611587579161157882610d97937fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216955f91610d9c57505f198260011b9260031b1c19161790565b600e556040519182918261032c565b600e5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b8181106116325750927fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216949260019282610d97961061161a575b5050811b01600e55610388565b8401515f1960f88460031b161c191690555f8061160d565b919260206001819286890151815501940192016115d3565b346102e55760406003193601126102e557611663610438565b6024359063ffffffff821682036102e5576103949173ffffffffffffffffffffffffffffffffffffffff6116bd926116996119c3565b506116a26119c3565b50165f52600960205260405f206116b76119c3565b50612828565b50604051906116cb82610bdc565b5465ffffffffffff8116825260301c602082015260405191829182919091602079ffffffffffffffffffffffffffffffffffffffffffffffffffff81604084019565ffffffffffff8151168552015116910152565b346102e5575f6003193601126102e557602073ffffffffffffffffffffffffffffffffffffffff600b5416604051908152f35b346102e5575f6003193601126102e55773ffffffffffffffffffffffffffffffffffffffff600b54163303610e6a57600f5460ff81166117dd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117600f5530337f78a953f3f0d92abc078a34e5d4fedf8708e788e1b29300b3d6170e97f88a13fc5f80a3005b7f118fd7b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90600182811c92168015611879575b602083101461184c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611841565b5f929181549161189283611832565b80835292600181169081156118e757506001146118ae57505050565b5f9081526020812093945091925b8383106118cd575060209250010190565b6001816020929493945483858701015201910191906118bc565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b601f811161192f575050565b600c5f5260205f20906020601f840160051c83019310611969575b601f0160051c01905b81811061195e575050565b5f8155600101611953565b909150819061194a565b601f811161197f575050565b600e5f5260205f20906020601f840160051c830193106119b9575b601f0160051c01905b8181106119ae575050565b5f81556001016119a3565b909150819061199a565b604051906119d082610bdc565b5f6020838281520152565b73ffffffffffffffffffffffffffffffffffffffff909291921690815f526001602052611a298360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b545f198103611a39575b50505050565b818110611af8578215611acc5773ffffffffffffffffffffffffffffffffffffffff841615611aa057611a96925f526001602052039160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b555f808080611a33565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b92919073ffffffffffffffffffffffffffffffffffffffff8416938415611cb35773ffffffffffffffffffffffffffffffffffffffff82168015611c8757611ba58273ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5495848710611c3b5784610c4d969703611bdc8473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b55611c048473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3612a60565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff83166004526024879052604485905260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480611ddf575b15611d47577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152611dd960c082610bfd565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614611d1e565b65ffffffffffff8111611e205765ffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52603060045260245260445ffd5b905f198201918211610b7c57565b9060018201809211610b7c57565b908154905f829160058411611eaa575b611e879350846123f5565b80611e925750505f90565b611e9b90611e50565b905f5260205f20015460301c90565b9192611eb581612280565b8103908111610b7c57611e8793855f5265ffffffffffff8260205f2001541665ffffffffffff8516105f14611eeb575091611e7c565b929150611ef790611e5e565b90611e7c565b73ffffffffffffffffffffffffffffffffffffffff8116908115611cb357611f428173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b548381106120385790611f7a84610c4d959493039173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5581600254036002555f817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405180602081018782520390a38015612020575b611fcc611fc78361286a565b6129ff565b50505f908152600860205260408120549080527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75473ffffffffffffffffffffffffffffffffffffffff9081169116612459565b61203161202c8361286a565b61299e565b5050611fbb565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff909116600452602452604482905260645ffd5b73ffffffffffffffffffffffffffffffffffffffff8181165f81815260086020526040812080548685167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117909255610c4d9694169461212d9390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b91612459565b8054806121405750505f90565b805f19810111610b7c575f19915f5260205f2001015460301c90565b604290612167611cdf565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9161033d939161116793612690565b73ffffffffffffffffffffffffffffffffffffffff16908115611acc5773ffffffffffffffffffffffffffffffffffffffff8116928315611aa0578061223c7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593855f52600160205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b55604051908152602090a3565b8115612253570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600181111561033d578060017001000000000000000000000000000000008310156123b3575b61235961234f61234561233b6123316123276123166123609760048a680100000000000000006123659c10156123a6575b640100000000811015612399575b6201000081101561238c575b61010081101561237f575b6010811015612372575b101561236a575b60030260011c90565b612320818b612249565b0160011c90565b612320818a612249565b6123208189612249565b6123208188612249565b6123208187612249565b6123208186612249565b8093612249565b821190565b900390565b60011b61230d565b60041c9160021b91612306565b60081c9160041b916122fc565b60101c9160081b916122f1565b60201c9160101b916122e5565b60401c9160201b916122d7565b505061236561236061235961234f61234561233b6123316123276123166123da8a60801c90565b98506801000000000000000097506122a69650505050505050565b91905b8382106124055750505090565b9091928083169080841860011c8201809211610b7c57845f5265ffffffffffff8260205f2001541665ffffffffffff8416105f146124475750925b91906123f8565b93925061245390611e5e565b91612440565b919073ffffffffffffffffffffffffffffffffffffffff81169273ffffffffffffffffffffffffffffffffffffffff81169084821415806125d7575b6124a1575b5050505050565b81612554575b5050826124b6575b808061249a565b6125496125307fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249361252a61252479ffffffffffffffffffffffffffffffffffffffffffffffffffff9573ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b9161286a565b9061293e565b6040805192851683529316602082015291829190820190565b0390a25f80806124af565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff6125cd6125306125be7fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249473ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b6125c78861286a565b906128da565b0390a25f806124a7565b50831515612495565b60ff811461263f5760ff811690601f82116126175760405191612604604084610bfd565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060405161033d81612652816005611883565b0382610bfd565b60ff811461267d5760ff811690601f82116126175760405191612604604084610bfd565b5060405161033d81612652816006611883565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161271f579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612714575f5173ffffffffffffffffffffffffffffffffffffffff81161561270a57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004111561273457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b61276a8161272a565b80612773575050565b61277c8161272a565b600181036127ac577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6127b58161272a565b600281036127e957507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b806127f560039261272a565b146127fd5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b805482101561283d575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff81116128aa5779ffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260d060045260245260445ffd5b906128e443611e08565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff8061290a85612133565b92169116039079ffffffffffffffffffffffffffffffffffffffffffffffffffff8211610b7c5761293a92612b92565b9091565b9061294843611e08565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff8061296e85612133565b92169116019079ffffffffffffffffffffffffffffffffffffffffffffffffffff8211610b7c5761293a92612b92565b6129a743611e08565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff806129ce600a612133565b921691160179ffffffffffffffffffffffffffffffffffffffffffffffffffff8111610b7c5761293a91600a612b92565b612a0843611e08565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612a2f600a612133565b921691160379ffffffffffffffffffffffffffffffffffffffffffffffffffff8111610b7c5761293a91600a612b92565b9073ffffffffffffffffffffffffffffffffffffffff80610c4d949316918215612aec575b16908115612ad9575b5f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f205416905f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f20541690612459565b612ae5611fc78461286a565b5050612a8e565b612af861202c8561286a565b5050612a85565b805468010000000000000000811015610bf857612b2191600182018155612828565b612b665781516020929092015160301b7fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001665ffffffffffff92909216919091179055565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80549293928015612c8857612ba9612bb491611e50565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411612c6057879303612c195750612c1592509065ffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000083549260301b169116179055565b9190565b915050612c1591612c39612c2b610c3e565b65ffffffffffff9093168352565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff86166020830152612aff565b7f2520601d000000000000000000000000000000000000000000000000000000005f5260045ffd5b5090612cc091612c99612c2b610c3e565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff85166020830152612aff565b5f919056fea2646970667358221220c39b0d1d64a7f8a1fb34f91aa06960cd7bf2c35daf906b5a1f622bc4f8190bf764736f6c634300081c0033c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a7dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724";

// src/abi/v4/Clanker.ts
var Clanker_v4_abi = [
  {
    inputs: [{ internalType: "address", name: "owner_", type: "address" }],
    stateMutability: "nonpayable",
    type: "constructor"
  },
  { inputs: [], name: "Deprecated", type: "error" },
  { inputs: [], name: "ExtensionMsgValueMismatch", type: "error" },
  { inputs: [], name: "ExtensionNotEnabled", type: "error" },
  { inputs: [], name: "HookNotEnabled", type: "error" },
  { inputs: [], name: "InvalidExtension", type: "error" },
  { inputs: [], name: "InvalidHook", type: "error" },
  { inputs: [], name: "InvalidLocker", type: "error" },
  { inputs: [], name: "InvalidMevModule", type: "error" },
  { inputs: [], name: "LockerNotEnabled", type: "error" },
  { inputs: [], name: "MaxExtensionBpsExceeded", type: "error" },
  { inputs: [], name: "MaxExtensionsExceeded", type: "error" },
  { inputs: [], name: "MevModuleNotEnabled", type: "error" },
  { inputs: [], name: "NotFound", type: "error" },
  { inputs: [], name: "OnlyNonOriginatingChains", type: "error" },
  { inputs: [], name: "OnlyOriginatingChain", type: "error" },
  {
    inputs: [{ internalType: "address", name: "owner", type: "address" }],
    name: "OwnableInvalidOwner",
    type: "error"
  },
  {
    inputs: [{ internalType: "address", name: "account", type: "address" }],
    name: "OwnableUnauthorizedAccount",
    type: "error"
  },
  { inputs: [], name: "ReentrancyGuardReentrantCall", type: "error" },
  { inputs: [], name: "Unauthorized", type: "error" },
  {
    anonymous: false,
    inputs: [
      { indexed: true, internalType: "address", name: "token", type: "address" },
      { indexed: true, internalType: "address", name: "recipient", type: "address" },
      { indexed: false, internalType: "uint256", name: "amount", type: "uint256" }
    ],
    name: "ClaimTeamFees",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      { indexed: false, internalType: "address", name: "extension", type: "address" },
      { indexed: false, internalType: "uint256", name: "extensionSupply", type: "uint256" },
      { indexed: false, internalType: "uint256", name: "msgValue", type: "uint256" }
    ],
    name: "ExtensionTriggered",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      { indexed: true, internalType: "address", name: "previousOwner", type: "address" },
      { indexed: true, internalType: "address", name: "newOwner", type: "address" }
    ],
    name: "OwnershipTransferred",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      { indexed: true, internalType: "address", name: "admin", type: "address" },
      { indexed: false, internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "SetAdmin",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [{ indexed: false, internalType: "bool", name: "deprecated", type: "bool" }],
    name: "SetDeprecated",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      { indexed: false, internalType: "address", name: "extension", type: "address" },
      { indexed: false, internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "SetExtension",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      { indexed: false, internalType: "address", name: "hook", type: "address" },
      { indexed: false, internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "SetHook",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      { indexed: false, internalType: "address", name: "locker", type: "address" },
      { indexed: false, internalType: "address", name: "pool", type: "address" },
      { indexed: false, internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "SetLocker",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      { indexed: false, internalType: "address", name: "mevModule", type: "address" },
      { indexed: false, internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "SetMevModule",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      { indexed: false, internalType: "address", name: "oldTeamFeeRecipient", type: "address" },
      { indexed: false, internalType: "address", name: "newTeamFeeRecipient", type: "address" }
    ],
    name: "SetTeamFeeRecipient",
    type: "event"
  },
  {
    anonymous: false,
    inputs: [
      { indexed: false, internalType: "address", name: "msgSender", type: "address" },
      { indexed: true, internalType: "address", name: "tokenAddress", type: "address" },
      { indexed: true, internalType: "address", name: "tokenAdmin", type: "address" },
      { indexed: false, internalType: "string", name: "tokenImage", type: "string" },
      { indexed: false, internalType: "string", name: "tokenName", type: "string" },
      { indexed: false, internalType: "string", name: "tokenSymbol", type: "string" },
      { indexed: false, internalType: "string", name: "tokenMetadata", type: "string" },
      { indexed: false, internalType: "string", name: "tokenContext", type: "string" },
      { indexed: false, internalType: "int24", name: "startingTick", type: "int24" },
      { indexed: false, internalType: "address", name: "poolHook", type: "address" },
      { indexed: false, internalType: "PoolId", name: "poolId", type: "bytes32" },
      { indexed: false, internalType: "address", name: "pairedToken", type: "address" },
      { indexed: false, internalType: "address", name: "locker", type: "address" },
      { indexed: false, internalType: "address", name: "mevModule", type: "address" },
      { indexed: false, internalType: "uint256", name: "extensionsSupply", type: "uint256" },
      { indexed: false, internalType: "address[]", name: "extensions", type: "address[]" }
    ],
    name: "TokenCreated",
    type: "event"
  },
  {
    inputs: [],
    name: "BPS",
    outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "MAX_EXTENSIONS",
    outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "MAX_EXTENSION_BPS",
    outputs: [{ internalType: "uint16", name: "", type: "uint16" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "TOKEN_SUPPLY",
    outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "", type: "address" }],
    name: "admins",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "token", type: "address" }],
    name: "claimTeamFees",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      {
        components: [
          {
            components: [
              { internalType: "address", name: "tokenAdmin", type: "address" },
              { internalType: "string", name: "name", type: "string" },
              { internalType: "string", name: "symbol", type: "string" },
              { internalType: "bytes32", name: "salt", type: "bytes32" },
              { internalType: "string", name: "image", type: "string" },
              { internalType: "string", name: "metadata", type: "string" },
              { internalType: "string", name: "context", type: "string" },
              { internalType: "uint256", name: "originatingChainId", type: "uint256" }
            ],
            internalType: "struct IClanker.TokenConfig",
            name: "tokenConfig",
            type: "tuple"
          },
          {
            components: [
              { internalType: "address", name: "hook", type: "address" },
              { internalType: "address", name: "pairedToken", type: "address" },
              { internalType: "int24", name: "tickIfToken0IsClanker", type: "int24" },
              { internalType: "int24", name: "tickSpacing", type: "int24" },
              { internalType: "bytes", name: "poolData", type: "bytes" }
            ],
            internalType: "struct IClanker.PoolConfig",
            name: "poolConfig",
            type: "tuple"
          },
          {
            components: [
              { internalType: "address", name: "locker", type: "address" },
              { internalType: "address[]", name: "rewardAdmins", type: "address[]" },
              { internalType: "address[]", name: "rewardRecipients", type: "address[]" },
              { internalType: "uint16[]", name: "rewardBps", type: "uint16[]" },
              { internalType: "int24[]", name: "tickLower", type: "int24[]" },
              { internalType: "int24[]", name: "tickUpper", type: "int24[]" },
              { internalType: "uint16[]", name: "positionBps", type: "uint16[]" },
              { internalType: "bytes", name: "lockerData", type: "bytes" }
            ],
            internalType: "struct IClanker.LockerConfig",
            name: "lockerConfig",
            type: "tuple"
          },
          {
            components: [
              { internalType: "address", name: "mevModule", type: "address" },
              { internalType: "bytes", name: "mevModuleData", type: "bytes" }
            ],
            internalType: "struct IClanker.MevModuleConfig",
            name: "mevModuleConfig",
            type: "tuple"
          },
          {
            components: [
              { internalType: "address", name: "extension", type: "address" },
              { internalType: "uint256", name: "msgValue", type: "uint256" },
              { internalType: "uint16", name: "extensionBps", type: "uint16" },
              { internalType: "bytes", name: "extensionData", type: "bytes" }
            ],
            internalType: "struct IClanker.ExtensionConfig[]",
            name: "extensionConfigs",
            type: "tuple[]"
          }
        ],
        internalType: "struct IClanker.DeploymentConfig",
        name: "deploymentConfig",
        type: "tuple"
      }
    ],
    name: "deployToken",
    outputs: [{ internalType: "address", name: "tokenAddress", type: "address" }],
    stateMutability: "payable",
    type: "function"
  },
  {
    inputs: [
      {
        components: [
          { internalType: "address", name: "tokenAdmin", type: "address" },
          { internalType: "string", name: "name", type: "string" },
          { internalType: "string", name: "symbol", type: "string" },
          { internalType: "bytes32", name: "salt", type: "bytes32" },
          { internalType: "string", name: "image", type: "string" },
          { internalType: "string", name: "metadata", type: "string" },
          { internalType: "string", name: "context", type: "string" },
          { internalType: "uint256", name: "originatingChainId", type: "uint256" }
        ],
        internalType: "struct IClanker.TokenConfig",
        name: "tokenConfig",
        type: "tuple"
      }
    ],
    name: "deployTokenZeroSupply",
    outputs: [{ internalType: "address", name: "tokenAddress", type: "address" }],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "token", type: "address" }],
    name: "deploymentInfoForToken",
    outputs: [
      { internalType: "address", name: "token", type: "address" },
      { internalType: "address", name: "hook", type: "address" },
      { internalType: "address", name: "locker", type: "address" }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "deprecated",
    outputs: [{ internalType: "bool", name: "", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "locker", type: "address" },
      { internalType: "address", name: "pool", type: "address" }
    ],
    name: "enabledLockers",
    outputs: [{ internalType: "bool", name: "enabled", type: "bool" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "teamFeeRecipient_", type: "address" }],
    name: "initialize",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "owner",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [],
    name: "renounceOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "admin", type: "address" },
      { internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "setAdmin",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "bool", name: "deprecated_", type: "bool" }],
    name: "setDeprecated",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "extension", type: "address" },
      { internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "setExtension",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "hook", type: "address" },
      { internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "setHook",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "locker", type: "address" },
      { internalType: "address", name: "pool", type: "address" },
      { internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "setLocker",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [
      { internalType: "address", name: "mevModule", type: "address" },
      { internalType: "bool", name: "enabled", type: "bool" }
    ],
    name: "setMevModule",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "teamFeeRecipient_", type: "address" }],
    name: "setTeamFeeRecipient",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  },
  {
    inputs: [],
    name: "teamFeeRecipient",
    outputs: [{ internalType: "address", name: "", type: "address" }],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "token", type: "address" }],
    name: "tokenDeploymentInfo",
    outputs: [
      {
        components: [
          { internalType: "address", name: "token", type: "address" },
          { internalType: "address", name: "hook", type: "address" },
          { internalType: "address", name: "locker", type: "address" },
          { internalType: "address[]", name: "extensions", type: "address[]" }
        ],
        internalType: "struct IClanker.DeploymentInfo",
        name: "",
        type: "tuple"
      }
    ],
    stateMutability: "view",
    type: "function"
  },
  {
    inputs: [{ internalType: "address", name: "newOwner", type: "address" }],
    name: "transferOwnership",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function"
  }
];

// src/abi/v4/ClankerToken.ts
var ClankerToken_v4_abi = [
  {
    type: "constructor",
    inputs: [
      { name: "name_", type: "string", internalType: "string" },
      { name: "symbol_", type: "string", internalType: "string" },
      { name: "maxSupply_", type: "uint256", internalType: "uint256" },
      { name: "admin_", type: "address", internalType: "address" },
      { name: "image_", type: "string", internalType: "string" },
      { name: "metadata_", type: "string", internalType: "string" },
      { name: "context_", type: "string", internalType: "string" },
      { name: "initialSupplyChainId_", type: "uint256", internalType: "uint256" }
    ],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "CLOCK_MODE",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "DOMAIN_SEPARATOR",
    inputs: [],
    outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "admin",
    inputs: [],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "allData",
    inputs: [],
    outputs: [
      { name: "originalAdmin", type: "address", internalType: "address" },
      { name: "admin", type: "address", internalType: "address" },
      { name: "image", type: "string", internalType: "string" },
      { name: "metadata", type: "string", internalType: "string" },
      { name: "context", type: "string", internalType: "string" }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "allowance",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "approve",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "balanceOf",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "burn",
    inputs: [{ name: "value", type: "uint256", internalType: "uint256" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "burnFrom",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "checkpoints",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "pos", type: "uint32", internalType: "uint32" }
    ],
    outputs: [
      {
        name: "",
        type: "tuple",
        internalType: "struct Checkpoints.Checkpoint208",
        components: [
          { name: "_key", type: "uint48", internalType: "uint48" },
          { name: "_value", type: "uint208", internalType: "uint208" }
        ]
      }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "clock",
    inputs: [],
    outputs: [{ name: "", type: "uint48", internalType: "uint48" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "context",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "crosschainBurn",
    inputs: [
      { name: "_from", type: "address", internalType: "address" },
      { name: "_amount", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "crosschainMint",
    inputs: [
      { name: "_to", type: "address", internalType: "address" },
      { name: "_amount", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "decimals",
    inputs: [],
    outputs: [{ name: "", type: "uint8", internalType: "uint8" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "delegate",
    inputs: [{ name: "delegatee", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegateBySig",
    inputs: [
      { name: "delegatee", type: "address", internalType: "address" },
      { name: "nonce", type: "uint256", internalType: "uint256" },
      { name: "expiry", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegates",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "eip712Domain",
    inputs: [],
    outputs: [
      { name: "fields", type: "bytes1", internalType: "bytes1" },
      { name: "name", type: "string", internalType: "string" },
      { name: "version", type: "string", internalType: "string" },
      { name: "chainId", type: "uint256", internalType: "uint256" },
      { name: "verifyingContract", type: "address", internalType: "address" },
      { name: "salt", type: "bytes32", internalType: "bytes32" },
      { name: "extensions", type: "uint256[]", internalType: "uint256[]" }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastTotalSupply",
    inputs: [{ name: "timepoint", type: "uint256", internalType: "uint256" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastVotes",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "timepoint", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getVotes",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "imageUrl",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "isVerified",
    inputs: [],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "metadata",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "name",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "nonces",
    inputs: [{ name: "owner", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "numCheckpoints",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint32", internalType: "uint32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "originalAdmin",
    inputs: [],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "permit",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" },
      { name: "deadline", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "supportsInterface",
    inputs: [{ name: "_interfaceId", type: "bytes4", internalType: "bytes4" }],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "pure"
  },
  {
    type: "function",
    name: "symbol",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "totalSupply",
    inputs: [],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "transfer",
    inputs: [
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "transferFrom",
    inputs: [
      { name: "from", type: "address", internalType: "address" },
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateAdmin",
    inputs: [{ name: "admin_", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateImage",
    inputs: [{ name: "image_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateMetadata",
    inputs: [{ name: "metadata_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  { type: "function", name: "verify", inputs: [], outputs: [], stateMutability: "nonpayable" },
  {
    type: "event",
    name: "Approval",
    inputs: [
      { name: "owner", type: "address", indexed: true, internalType: "address" },
      { name: "spender", type: "address", indexed: true, internalType: "address" },
      { name: "value", type: "uint256", indexed: false, internalType: "uint256" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "CrosschainBurn",
    inputs: [
      { name: "from", type: "address", indexed: true, internalType: "address" },
      { name: "amount", type: "uint256", indexed: false, internalType: "uint256" },
      { name: "sender", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "CrosschainMint",
    inputs: [
      { name: "to", type: "address", indexed: true, internalType: "address" },
      { name: "amount", type: "uint256", indexed: false, internalType: "uint256" },
      { name: "sender", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateChanged",
    inputs: [
      { name: "delegator", type: "address", indexed: true, internalType: "address" },
      { name: "fromDelegate", type: "address", indexed: true, internalType: "address" },
      { name: "toDelegate", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateVotesChanged",
    inputs: [
      { name: "delegate", type: "address", indexed: true, internalType: "address" },
      { name: "previousVotes", type: "uint256", indexed: false, internalType: "uint256" },
      { name: "newVotes", type: "uint256", indexed: false, internalType: "uint256" }
    ],
    anonymous: false
  },
  { type: "event", name: "EIP712DomainChanged", inputs: [], anonymous: false },
  {
    type: "event",
    name: "Transfer",
    inputs: [
      { name: "from", type: "address", indexed: true, internalType: "address" },
      { name: "to", type: "address", indexed: true, internalType: "address" },
      { name: "value", type: "uint256", indexed: false, internalType: "uint256" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateAdmin",
    inputs: [
      { name: "oldAdmin", type: "address", indexed: true, internalType: "address" },
      { name: "newAdmin", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateImage",
    inputs: [{ name: "image", type: "string", indexed: false, internalType: "string" }],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateMetadata",
    inputs: [{ name: "metadata", type: "string", indexed: false, internalType: "string" }],
    anonymous: false
  },
  {
    type: "event",
    name: "Verified",
    inputs: [
      { name: "admin", type: "address", indexed: true, internalType: "address" },
      { name: "token", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  { type: "error", name: "AlreadyVerified", inputs: [] },
  { type: "error", name: "CheckpointUnorderedInsertion", inputs: [] },
  { type: "error", name: "ECDSAInvalidSignature", inputs: [] },
  {
    type: "error",
    name: "ECDSAInvalidSignatureLength",
    inputs: [{ name: "length", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ECDSAInvalidSignatureS",
    inputs: [{ name: "s", type: "bytes32", internalType: "bytes32" }]
  },
  {
    type: "error",
    name: "ERC20ExceededSafeSupply",
    inputs: [
      { name: "increasedSupply", type: "uint256", internalType: "uint256" },
      { name: "cap", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientAllowance",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "allowance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientBalance",
    inputs: [
      { name: "sender", type: "address", internalType: "address" },
      { name: "balance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InvalidApprover",
    inputs: [{ name: "approver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidReceiver",
    inputs: [{ name: "receiver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSender",
    inputs: [{ name: "sender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSpender",
    inputs: [{ name: "spender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC2612ExpiredSignature",
    inputs: [{ name: "deadline", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ERC2612InvalidSigner",
    inputs: [
      { name: "signer", type: "address", internalType: "address" },
      { name: "owner", type: "address", internalType: "address" }
    ]
  },
  {
    type: "error",
    name: "ERC5805FutureLookup",
    inputs: [
      { name: "timepoint", type: "uint256", internalType: "uint256" },
      { name: "clock", type: "uint48", internalType: "uint48" }
    ]
  },
  { type: "error", name: "ERC6372InconsistentClock", inputs: [] },
  {
    type: "error",
    name: "InvalidAccountNonce",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "currentNonce", type: "uint256", internalType: "uint256" }
    ]
  },
  { type: "error", name: "InvalidShortString", inputs: [] },
  { type: "error", name: "NotAdmin", inputs: [] },
  { type: "error", name: "NotOriginalAdmin", inputs: [] },
  {
    type: "error",
    name: "SafeCastOverflowedUintDowncast",
    inputs: [
      { name: "bits", type: "uint8", internalType: "uint8" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "StringTooLong",
    inputs: [{ name: "str", type: "string", internalType: "string" }]
  },
  { type: "error", name: "Unauthorized", inputs: [] },
  {
    type: "error",
    name: "VotesExpiredSignature",
    inputs: [{ name: "expiry", type: "uint256", internalType: "uint256" }]
  }
];
var ClankerToken_v4_bytecode = "0x6101806040523461008d57610024610015610147565b9695909594919493929361067a565b6040516131f7908161107e823960805181612383015260a05181612440015260c05181612354015260e051816123d2015261010051816123f801526101205181610c4c01526101405181610c7501526101605181818161072d0152818161131d0152611a750152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176100c857604052565b610091565b604051906100dc6040836100a5565b565b81601f8201121561008d578051906001600160401b0382116100c85760405192610112601f8401601f1916602001856100a5565b8284526020838301011161008d57815f9260208093018386015e8301015290565b51906001600160a01b038216820361008d57565b6142b5803803806040519261015c82856100a5565b83398101916101008284031261008d5781516001600160401b03811161008d57836101889184016100de565b60208301519091906001600160401b03811161008d57846101aa9185016100de565b936040840151936101bd60608201610133565b60808201519094906001600160401b03811161008d57836101df9184016100de565b60a08301519094906001600160401b03811161008d57846102019185016100de565b60c08401519094906001600160401b03811161008d5760e0916102259186016100de565b930151919796959493929190565b90600182811c92168015610261575b602083101461024d57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610242565b601f8111610277575050565b60035f5260205f20906020601f840160051c830193106102b1575b601f0160051c01905b8181106102a6575050565b5f815560010161029b565b9091508190610292565b601f82116102c857505050565b5f5260205f20906020601f840160051c83019310610300575b601f0160051c01905b8181106102f5575050565b5f81556001016102ea565b90915081906102e1565b80519091906001600160401b0381116100c8576103338161032c600454610233565b60046102bb565b602092601f821160011461037357610363929382915f92610368575b50508160011b915f199060031b1c19161790565b600455565b015190505f8061034f565b60045f52601f198216937f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f5b8681106103d757508360019596106103bf575b505050811b01600455565b01515f1960f88460031b161c191690555f80806103b4565b919260206001819286850151815501940192016103a1565b80519091906001600160401b0381116100c85761041881610411600e54610233565b600e6102bb565b602092601f821160011461044c57610447929382915f926103685750508160011b915f199060031b1c19161790565b600e55565b600e5f52601f198216937fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b8681106104b05750836001959610610498575b505050811b01600e55565b01515f1960f88460031b161c191690555f808061048d565b9192602060018192868501518155019401920161047a565b80519091906001600160401b0381116100c8576104f1816104ea600c54610233565b600c6102bb565b602092601f821160011461052557610520929382915f926103685750508160011b915f199060031b1c19161790565b600c55565b600c5f52601f198216937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8681106105895750836001959610610571575b505050811b01600c55565b01515f1960f88460031b161c191690555f8080610566565b91926020600181928685015181550194019201610553565b80519091906001600160401b0381116100c8576105ca816105c3600d54610233565b600d6102bb565b602092601f82116001146105fe576105f9929382915f926103685750508160011b915f199060031b1c19161790565b600d55565b600d5f52601f198216937fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5915f5b868110610662575083600195961061064a575b505050811b01600d55565b01515f1960f88460031b161c191690555f808061063f565b9192602060018192868501518155019401920161062c565b96959493929196604051906106906040836100a5565b60018252603160f81b6020830190815281519093906001600160401b0381116100c8576106c7816106c2600354610233565b61026b565b6020601f82116001146107a55793610778936107136107879b9a989461070b8561077d9a966107829d9a5f9161079a575b508160011b915f199060031b1c19161790565b60035561030a565b61071c816108e8565b61012052610729826109dd565b610140526020815191012060e052519020610100524660a05261074a610acf565b6080523060c052610160819052600b80546001600160a01b0319166001600160a01b03909216919091179055565b6103ef565b6104c8565b6105a1565b46146107905750565b6100dc903361083c565b90508501515f6106f8565b60035f52601f198216907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b81811061082457506107879b9a98946001856107829c9995610778999561077d9c98610713961061080c575b5050811b0160035561030a565b8601515f1960f88460031b161c191690555f806107ff565b9192602060018192868a0151815501940192016107d3565b91906001600160a01b03831680156108d5576002548281018091116108d0576002555f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160d01b038085116108b957506100dc929350610bac565b630e58ae9360e11b5f52600485905260245260445ffd5b610b98565b63ec442f0560e01b5f525f60045260245ffd5b908151602081105f1461090357509061090090610b2d565b90565b6001600160401b0381116100c85761092781610920600554610233565b60056102bb565b602092601f821160011461095e57610956929382915f926103685750508160011b915f199060031b1c19161790565b60055560ff90565b60055f52601f198216937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b8681106109c557508360019596106109ad575b505050811b0160055560ff90565b01515f1960f88460031b161c191690555f808061099f565b9192602060018192868501518155019401920161098c565b908151602081105f146109f557509061090090610b2d565b6001600160401b0381116100c857610a1981610a12600654610233565b60066102bb565b602092601f8211600114610a5057610a48929382915f926103685750508160011b915f199060031b1c19161790565b60065560ff90565b60065f52601f198216937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b868110610ab75750836001959610610a9f575b505050811b0160065560ff90565b01515f1960f88460031b161c191690555f8080610a91565b91926020600181928685015181550194019201610a7e565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152610b2760c0826100a5565b51902090565b601f815111610b58576020815191015160208210610b49571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b634e487b7160e01b5f52601160045260245ffd5b90610bb681610cab565b9165ffffffffffff4311610c9357600a5480610c5d5750610bf0610be06100dc945f5b6001611021565b65ffffffffffff4316600a610f4b565b50506001600160a01b03168015610c45575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f9182526040909120546001600160a01b039081169116610dda565b610c56610c5183610cab565b610cdc565b5050610c02565b92835f198101116108d057600a5f525f5160206142755f395f51905f52909301546100dc93610bf091610be0919060301c610bd9565b6306dfcc6560e41b5f5260306004524360245260445ffd5b6001600160d01b038111610cc5576001600160d01b031690565b6306dfcc6560e41b5f5260d060045260245260445ffd5b65ffffffffffff4311610c9357600a5480610d065750610be0610d02915f5b6002611021565b9091565b805f198101116108d057600a5f525f5160206142755f395f51905f520154610d0291610be09160301c610cfb565b65ffffffffffff4311610c9357805480610d685750610d58610d02925f6002611021565b9065ffffffffffff431690610f4b565b805f198101116108d0575f82815260209020015f190154610d0292610d589160301c610cfb565b65ffffffffffff4311610c9357805480610db35750610d58610d02925f6001611021565b805f198101116108d0575f82815260209020015f190154610d0292610d589160301c610bd9565b6001600160a01b03808316939291908116908185141580610ecd575b610e02575b5050505050565b81610e73575b505082610e17575b8080610dfb565b6001600160a01b03165f9081526009602052604090205f5160206142955f395f51905f5291610e5091610e4a9091610cab565b90610d8f565b604080516001600160d01b039384168152919092166020820152a25f8080610e10565b6001600160a01b03165f9081526009602052604090205f5160206142955f395f51905f5290610eab90610ea586610cab565b90610d34565b604080516001600160d01b039384168152919092166020820152a25f80610e08565b50831515610df6565b5f198101919082116108d057565b908154680100000000000000008110156100c85760018101808455811015610f37575f9283526020928390208251929093015160301b65ffffffffffff191665ffffffffffff9290921691909117910155565b634e487b7160e01b5f52603260045260245ffd5b80549293928015610ff757610f62610f6d91610ed6565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411610fe857879303610fb45750610fb092509065ffffffffffff82549181199060301b169116179055565b9190565b915050610fb091610fd4610fc66100cd565b65ffffffffffff9093168352565b6001600160d01b0386166020830152610ee4565b632520601d60e01b5f5260045ffd5b509061101c91611008610fc66100cd565b6001600160d01b0385166020830152610ee4565b5f9190565b919091806001146110635760021461104757634e487b7160e01b5f52605160045260245ffd5b6001600160d01b03908116918116919091039081116108d05790565b506001600160d01b03918216908216019081116108d0579056fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a71461028457806306fdde031461027f578063095ea7b31461027a57806318160ddd1461027557806318bf5077146102705780631c7b2ff41461026b57806323b872dd146102665780632b8c49e314610261578063313ce5671461025c5780633644e51514610257578063392f37e9146102525780633a46b1a81461024d57806342966c68146102485780634bf5d7e914610243578063587cde1e1461023e5780635c19a95c146102395780636fcfff451461023457806370a082311461022f57806379cc67901461022a5780637ecebe001461022557806380007e831461022057806384b0196e1461021b5780638e539e8c14610216578063918b5be11461021157806391ddadf41461020c57806395d89b41146102075780639ab24eb014610202578063a9059cbb146101fd578063aba83150146101f8578063b974b0a3146101f3578063c3cda520146101ee578063d0496d6a146101e9578063d505accf146101e4578063dd62ed3e146101df578063e2f273bd146101da578063eb3d68e7146101d5578063f1127ed8146101d0578063f851a440146101cb5763fc735e99146101c6575f80fd5b611a4e565b611a1b565b611945565b6117d1565b611730565b6116bd565b611522565b6114ff565b611391565b61128e565b61126b565b611245565b6111dd565b611138565b61110d565b610f60565b610d6b565b610c34565b610c12565b610bcd565b610b9d565b610b5b565b610ad3565b610ab1565b610a56565b6109ad565b61098e565b61088a565b61084c565b61082a565b61080f565b610789565b610751565b610701565b61054d565b610530565b6104ff565b6103c1565b34610366576020600319360112610366576004357fffffffff000000000000000000000000000000000000000000000000000000008116809103610366577f3333199400000000000000000000000000000000000000000000000000000000811490811561033c575b8115610312575b8115610309575b506040519015158152602090f35b9050155f6102fb565b7f01ffc9a700000000000000000000000000000000000000000000000000000000811491506102f4565b7f36372b0700000000000000000000000000000000000000000000000000000000811491506102ed565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060206103be92818152019061036a565b90565b34610366575f600319360112610366576040515f6003546103e181611b73565b80845290600181169081156104775750600114610419575b6104158361040981850382610e78565b604051918291826103ad565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b80821061045d575090915081016020016104096103f9565b919260018160209254838588010152019101909291610445565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061040990506103f9565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361036657565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361036657565b346103665760406003193601126103665761052561051b6104b9565b602435903361260a565b602060405160018152f35b34610366575f600319360112610366576020600254604051908152f35b34610366576040600319360112610366576105666104b9565b6024359073420000000000000000000000000000000000002833036106d95773ffffffffffffffffffffffffffffffffffffffff81169081156106ad576105b76105b2846002546124d4565b600255565b6105de8173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b838154019055815f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6040518061061a88829190602083019252565b0390a360025479ffffffffffffffffffffffffffffffffffffffffffffffffffff9081811161067f5750508261064f91612eff565b60405191825233917fde22baff038e3a3e08407cbdf617deed74e869a7ba517df611e33131c6e6ea0490602090a3005b7f1cb15d26000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610366575f60031936011261036657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103665760606003193601126103665761052561076d6104b9565b6107756104dc565b60443591610784833383611edf565b612044565b34610366576040600319360112610366576107a26104b9565b60243573420000000000000000000000000000000000002833036106d9576107ca81836121b7565b6040519081527fb90795a66650155983e242cac3e1ac1a4dc26f8ed2987f3ce416a34e00111fd4602073ffffffffffffffffffffffffffffffffffffffff33941692a3005b34610366575f60031936011261036657602060405160128152f35b34610366575f60031936011261036657602061084461233d565b604051908152f35b34610366575f600319360112610366576104156040516108768161086f81611bc4565b0382610e78565b60405191829160208352602083019061036a565b34610366576040600319360112610366576108a36104b9565b73ffffffffffffffffffffffffffffffffffffffff60243591165f5260096020526108d160405f2091612466565b8154905f829160058411610936575b6108eb93508461289b565b908161091b57505060205f5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff60405191168152f35b6109266020926124b8565b905f52815f20015460301c6108f7565b919261094181612726565b8103908111610989576108eb93855f5265ffffffffffff8260205f2001541665ffffffffffff8516105f146109775750916108e0565b929150610983906124c6565b906108e0565b611b46565b34610366576020600319360112610366576109ab600435336121b7565b005b34610366575f600319360112610366576109c6436126a7565b65ffffffffffff806109d7436126a7565b16911603610a2e576104156040516109f0604082610e78565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015260405191829160208352602083019061036a565b7f6ff07140000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103665760206003193601126103665773ffffffffffffffffffffffffffffffffffffffff610a846104b9565b165f526008602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b34610366576020600319360112610366576109ab610acd6104b9565b336124e1565b346103665760206003193601126103665773ffffffffffffffffffffffffffffffffffffffff610b016104b9565b165f52600960205260405f205463ffffffff8111610b2b5760405163ffffffff9091168152602090f35b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b34610366576020600319360112610366576020610844610b796104b9565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b34610366576040600319360112610366576109ab610bb96104b9565b60243590610bc8823383611edf565b6121b7565b346103665760206003193601126103665773ffffffffffffffffffffffffffffffffffffffff610bfb6104b9565b165f526007602052602060405f2054604051908152f35b34610366575f60031936011261036657602060ff600f54166040519015158152f35b34610366575f60031936011261036657610d12610c707f0000000000000000000000000000000000000000000000000000000000000000612a86565b610c997f0000000000000000000000000000000000000000000000000000000000000000612af8565b6020604051610ca88282610e78565b5f815281610d20818301947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013687376040519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e0858a015260e089019061036a565b90878203604089015261036a565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110610d5457505050500390f35b835185528695509381019392810192600101610d45565b3461036657602060031936011261036657610d87600435612466565b600a54905f829160058411610dd6575b610da39350600a61289b565b80610db457506040515f8152602090f35b610dd1610dc26020926124b8565b600a5f52825f20015460301c90565b6108f7565b9192610de181612726565b810390811161098957610da393600a5f5265ffffffffffff8260205f2001541665ffffffffffff8516105f14610e18575091610d97565b929150610e24906124c6565b90610d97565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610e7357604052565b610e2a565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e7357604052565b60405190610ec8604083610e78565b565b60206003198201126103665760043567ffffffffffffffff811161036657816023820112156103665780600401359067ffffffffffffffff8211610e735760405192610f3e601f84017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200185610e78565b8284526024838301011161036657815f92602460209301838601378301015290565b3461036657610f6e36610eca565b73ffffffffffffffffffffffffffffffffffffffff600b541633036110e557805167ffffffffffffffff8111610e7357610fb281610fad600c54611b73565b611e27565b6020601f8211600114611022579161100382611012937ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4955f91611017575b505f198260011b9260031b1c19161790565b600c55604051918291826103ad565b0390a1005b90508301515f610ff1565b600c5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8181106110cd5750927ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f494926001928261101296106110b5575b5050811b01600c55610409565b8401515f1960f88460031b161c191690555f806110a8565b9192602060018192868901518155019401920161106e565b7f7bfa4b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610366575f600319360112610366576020611128436126a7565b65ffffffffffff60405191168152f35b34610366575f600319360112610366576040515f60045461115881611b73565b8084529060018116908115610477575060011461117f576104158361040981850382610e78565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b8082106111c3575090915081016020016104096103f9565b9192600181602092548385880101520191019092916111ab565b346103665760206003193601126103665773ffffffffffffffffffffffffffffffffffffffff61120b6104b9565b165f526009602052602079ffffffffffffffffffffffffffffffffffffffffffffffffffff61123c60405f20612591565b16604051908152f35b34610366576040600319360112610366576105256112616104b9565b6024359033612044565b34610366575f600319360112610366576104156040516108768161086f81611c81565b34610366575f6003193601126103665773ffffffffffffffffffffffffffffffffffffffff600b5416604051906112cf826112c881611c81565b0383610e78565b6104156040516112e28161086f81611bc4565b611363604051916112fd836112f681611d04565b0384610e78565b61135560405196879673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168852602088015260a0604088015260a087019061036a565b90858203606087015261036a565b90838203608085015261036a565b6064359060ff8216820361036657565b6084359060ff8216820361036657565b346103665760c0600319360112610366576113aa6104b9565b602435906044356113b9611371565b6084359060a435928042116114d4579161144c939161143e6114439460405160208101917fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf835273ffffffffffffffffffffffffffffffffffffffff8a1660408301528a606083015260808201526080815261143660a082610e78565b5190206125ba565b612b2f565b90929192612c00565b61147d8173ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b80930361148e576109ab92506124e1565b73ffffffffffffffffffffffffffffffffffffffff91507f752d88c0000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b7f4683af0e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610366575f600319360112610366576104156040516108768161086f81611d04565b346103665760e06003193601126103665761153b6104b9565b6115436104dc565b6044359060643592611553611381565b60a43560c43590864211611691576116239261161e6115998673ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b9860405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff89169b8c604084015273ffffffffffffffffffffffffffffffffffffffff8b1660608401528b608084015260a083015260c082015260c0815261143660e082610e78565b6125fb565b9373ffffffffffffffffffffffffffffffffffffffff85160361164a576109ab935061260a565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff8085166004521660245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346103665760406003193601126103665760206117276116db6104b9565b73ffffffffffffffffffffffffffffffffffffffff6116f86104dc565b91165f526001835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b34610366576020600319360112610366576117496104b9565b600b5473ffffffffffffffffffffffffffffffffffffffff8116908133036110e55773ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff000000000000000000000000000000000000000093169283911617600b557fcd6ba6b7da89e039d53b5d981527a893755342bb9d8e5c2f61f6638f1fb5192b5f80a3005b34610366576117df36610eca565b73ffffffffffffffffffffffffffffffffffffffff600b541633036110e557805167ffffffffffffffff8111610e73576118238161181e600e54611b73565b611e77565b6020601f8211600114611882579161187382611012937fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216955f9161101757505f198260011b9260031b1c19161790565b600e55604051918291826103ad565b600e5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b81811061192d5750927fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b555242169492600192826110129610611915575b5050811b01600e55610409565b8401515f1960f88460031b161c191690555f80611908565b919260206001819286890151815501940192016118ce565b346103665760406003193601126103665761195e6104b9565b6024359063ffffffff82168203610366576104159173ffffffffffffffffffffffffffffffffffffffff6119b892611994611ec7565b5061199d611ec7565b50165f52600960205260405f206119b2611ec7565b50612cc7565b50604051906119c682610e57565b5465ffffffffffff8116825260301c602082015260405191829182919091602079ffffffffffffffffffffffffffffffffffffffffffffffffffff81604084019565ffffffffffff8151168552015116910152565b34610366575f60031936011261036657602073ffffffffffffffffffffffffffffffffffffffff600b5416604051908152f35b34610366575f6003193601126103665773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611b1e57600f5460ff8116611af6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117600f5530337f78a953f3f0d92abc078a34e5d4fedf8708e788e1b29300b3d6170e97f88a13fc5f80a3005b7f118fd7b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fce7123f5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90600182811c92168015611bba575b6020831014611b8d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611b82565b600c545f9291611bd382611b73565b8082529160018116908115611c475750600114611bee575050565b600c5f9081529293509091907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c75b838310611c2d575060209250010190565b600181602092949394548385870101520191019190611c1c565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b600e545f9291611c9082611b73565b8082529160018116908115611c475750600114611cab575050565b600e5f9081529293509091907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd5b838310611cea575060209250010190565b600181602092949394548385870101520191019190611cd9565b600d545f9291611d1382611b73565b8082529160018116908115611c475750600114611d2e575050565b600d5f9081529293509091907fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb55b838310611d6d575060209250010190565b600181602092949394548385870101520191019190611d5c565b5f9291815491611d9683611b73565b8083529260018116908115611deb5750600114611db257505050565b5f9081526020812093945091925b838310611dd1575060209250010190565b600181602092949394548385870101520191019190611dc0565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b601f8111611e33575050565b600c5f5260205f20906020601f840160051c83019310611e6d575b601f0160051c01905b818110611e62575050565b5f8155600101611e57565b9091508190611e4e565b601f8111611e83575050565b600e5f5260205f20906020601f840160051c83019310611ebd575b601f0160051c01905b818110611eb2575050565b5f8155600101611ea7565b9091508190611e9e565b60405190611ed482610e57565b5f6020838281520152565b73ffffffffffffffffffffffffffffffffffffffff909291921690815f526001602052611f2d8360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b545f198110611f3d575b50505050565b818110611ffc578215611fd05773ffffffffffffffffffffffffffffffffffffffff841615611fa457611f9a925f526001602052039160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b555f808080611f37565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b92919073ffffffffffffffffffffffffffffffffffffffff841693841561218b5773ffffffffffffffffffffffffffffffffffffffff821680156106ad576120a98273ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b549584871061213f5784610ec89697036120e08473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b556121088473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3612f92565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff83166004526024879052604485905260645ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff811690811561218b576121fc8173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b548381106122f2579061223484610ec8959493039173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5581600254036002555f817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405180602081018782520390a380156122da575b61228661228183612d09565b612e9e565b50505f908152600860205260408120549080527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75473ffffffffffffffffffffffffffffffffffffffff90811691166128ff565b6122eb6122e683612d09565b612e3d565b5050612275565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff909116600452602452604482905260645ffd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630148061243d575b156123a5577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261243760c082610e78565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461237c565b65ffffffffffff612476436126a7565b168082101561248957506103be906126a7565b907fecd3f81e000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b905f19820191821161098957565b906001820180921161098957565b9190820180921161098957565b73ffffffffffffffffffffffffffffffffffffffff8181165f81815260086020526040812080548685167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117909255610ec89694169461258b9390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b916128ff565b80548061259e5750505f90565b805f19810111610989575f19915f5260205f2001015460301c90565b6042906125c561233d565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b916103be939161144393612b2f565b73ffffffffffffffffffffffffffffffffffffffff16908115611fd05773ffffffffffffffffffffffffffffffffffffffff8116928315611fa4578061269a7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593855f52600160205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b55604051908152602090a3565b65ffffffffffff81116126bf5765ffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52603060045260245260445ffd5b81156126f9570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b60018111156103be57806001700100000000000000000000000000000000831015612859575b6127ff6127f56127eb6127e16127d76127cd6127bc6128069760048a6801000000000000000061280b9c101561284c575b64010000000081101561283f575b62010000811015612832575b610100811015612825575b6010811015612818575b1015612810575b60030260011c90565b6127c6818b6126ef565b0160011c90565b6127c6818a6126ef565b6127c681896126ef565b6127c681886126ef565b6127c681876126ef565b6127c681866126ef565b80936126ef565b821190565b900390565b60011b6127b3565b60041c9160021b916127ac565b60081c9160041b916127a2565b60101c9160081b91612797565b60201c9160101b9161278b565b60401c9160201b9161277d565b505061280b6128066127ff6127f56127eb6127e16127d76127cd6127bc6128808a60801c90565b985068010000000000000000975061274c9650505050505050565b91905b8382106128ab5750505090565b9091928083169080841860011c820180921161098957845f5265ffffffffffff8260205f2001541665ffffffffffff8416105f146128ed5750925b919061289e565b9392506128f9906124c6565b916128e6565b919073ffffffffffffffffffffffffffffffffffffffff81169273ffffffffffffffffffffffffffffffffffffffff8116908482141580612a7d575b612947575b5050505050565b816129fa575b50508261295c575b8080612940565b6129ef6129d67fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724936129d06129ca79ffffffffffffffffffffffffffffffffffffffffffffffffffff9573ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b91612d09565b90612ddd565b6040805192851683529316602082015291829190820190565b0390a25f8080612955565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff612a736129d6612a647fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249473ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b612a6d88612d09565b90612d79565b0390a25f8061294d565b5083151561293b565b60ff8114612ae55760ff811690601f8211612abd5760405191612aaa604084610e78565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040516103be8161086f816005611d87565b60ff8114612b1c5760ff811690601f8211612abd5760405191612aaa604084610e78565b506040516103be8161086f816006611d87565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612bbe579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612bb3575f5173ffffffffffffffffffffffffffffffffffffffff811615612ba957905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b60041115612bd357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b612c0981612bc9565b80612c12575050565b612c1b81612bc9565b60018103612c4b577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b612c5481612bc9565b60028103612c8857507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b80612c94600392612bc9565b14612c9c5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8054821015612cdc575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff8111612d495779ffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260d060045260245260445ffd5b90612d83436126a7565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612da985612591565b92169116039079ffffffffffffffffffffffffffffffffffffffffffffffffffff821161098957612dd9926130c4565b9091565b90612de7436126a7565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612e0d85612591565b92169116019079ffffffffffffffffffffffffffffffffffffffffffffffffffff821161098957612dd9926130c4565b612e46436126a7565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612e6d600a612591565b921691160179ffffffffffffffffffffffffffffffffffffffffffffffffffff811161098957612dd991600a6130c4565b612ea7436126a7565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612ece600a612591565b921691160379ffffffffffffffffffffffffffffffffffffffffffffffffffff811161098957612dd991600a6130c4565b9073ffffffffffffffffffffffffffffffffffffffff610ec892612f256122e684612d09565b5050168015612f7f575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f91825260409091205473ffffffffffffffffffffffffffffffffffffffff90811691166128ff565b612f8b61228183612d09565b5050612f2f565b9073ffffffffffffffffffffffffffffffffffffffff80610ec894931691821561301e575b1690811561300b575b5f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f205416905f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f205416906128ff565b61301761228184612d09565b5050612fc0565b61302a6122e685612d09565b5050612fb7565b805468010000000000000000811015610e735761305391600182018155612cc7565b6130985781516020929092015160301b7fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001665ffffffffffff92909216919091179055565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b805492939280156131ba576130db6130e6916124b8565b825f5260205f200190565b8054603081901c9365ffffffffffff918216929181168084116131925787930361314b575061314792509065ffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000083549260301b169116179055565b9190565b9150506131479161316b61315d610eb9565b65ffffffffffff9093168352565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff86166020830152613031565b7f2520601d000000000000000000000000000000000000000000000000000000005f5260045ffd5b50906131f2916131cb61315d610eb9565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff85166020830152613031565b5f919056c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a7dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724";

// src/abi/v4.1.mainnet/ClankerToken.ts
var ClankerToken_v4_mainnet_abi = [
  {
    type: "constructor",
    inputs: [
      { name: "name_", type: "string", internalType: "string" },
      { name: "symbol_", type: "string", internalType: "string" },
      { name: "maxSupply_", type: "uint256", internalType: "uint256" },
      { name: "admin_", type: "address", internalType: "address" },
      { name: "image_", type: "string", internalType: "string" },
      { name: "metadata_", type: "string", internalType: "string" },
      { name: "context_", type: "string", internalType: "string" },
      { name: "initialSupplyChainId_", type: "uint256", internalType: "uint256" }
    ],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "CLOCK_MODE",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "DOMAIN_SEPARATOR",
    inputs: [],
    outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "admin",
    inputs: [],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "allData",
    inputs: [],
    outputs: [
      { name: "originalAdmin", type: "address", internalType: "address" },
      { name: "admin", type: "address", internalType: "address" },
      { name: "image", type: "string", internalType: "string" },
      { name: "metadata", type: "string", internalType: "string" },
      { name: "context", type: "string", internalType: "string" }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "allowance",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "approve",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "balanceOf",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "burn",
    inputs: [{ name: "value", type: "uint256", internalType: "uint256" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "burnFrom",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "checkpoints",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "pos", type: "uint32", internalType: "uint32" }
    ],
    outputs: [
      {
        name: "",
        type: "tuple",
        internalType: "struct Checkpoints.Checkpoint208",
        components: [
          { name: "_key", type: "uint48", internalType: "uint48" },
          { name: "_value", type: "uint208", internalType: "uint208" }
        ]
      }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "clock",
    inputs: [],
    outputs: [{ name: "", type: "uint48", internalType: "uint48" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "context",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "decimals",
    inputs: [],
    outputs: [{ name: "", type: "uint8", internalType: "uint8" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "delegate",
    inputs: [{ name: "delegatee", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegateBySig",
    inputs: [
      { name: "delegatee", type: "address", internalType: "address" },
      { name: "nonce", type: "uint256", internalType: "uint256" },
      { name: "expiry", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "delegates",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "eip712Domain",
    inputs: [],
    outputs: [
      { name: "fields", type: "bytes1", internalType: "bytes1" },
      { name: "name", type: "string", internalType: "string" },
      { name: "version", type: "string", internalType: "string" },
      { name: "chainId", type: "uint256", internalType: "uint256" },
      { name: "verifyingContract", type: "address", internalType: "address" },
      { name: "salt", type: "bytes32", internalType: "bytes32" },
      { name: "extensions", type: "uint256[]", internalType: "uint256[]" }
    ],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastTotalSupply",
    inputs: [{ name: "timepoint", type: "uint256", internalType: "uint256" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getPastVotes",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "timepoint", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "getVotes",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "imageUrl",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "isVerified",
    inputs: [],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "metadata",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "name",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "nonces",
    inputs: [{ name: "owner", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "numCheckpoints",
    inputs: [{ name: "account", type: "address", internalType: "address" }],
    outputs: [{ name: "", type: "uint32", internalType: "uint32" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "originalAdmin",
    inputs: [],
    outputs: [{ name: "", type: "address", internalType: "address" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "permit",
    inputs: [
      { name: "owner", type: "address", internalType: "address" },
      { name: "spender", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" },
      { name: "deadline", type: "uint256", internalType: "uint256" },
      { name: "v", type: "uint8", internalType: "uint8" },
      { name: "r", type: "bytes32", internalType: "bytes32" },
      { name: "s", type: "bytes32", internalType: "bytes32" }
    ],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "supportsInterface",
    inputs: [{ name: "_interfaceId", type: "bytes4", internalType: "bytes4" }],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "pure"
  },
  {
    type: "function",
    name: "symbol",
    inputs: [],
    outputs: [{ name: "", type: "string", internalType: "string" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "totalSupply",
    inputs: [],
    outputs: [{ name: "", type: "uint256", internalType: "uint256" }],
    stateMutability: "view"
  },
  {
    type: "function",
    name: "transfer",
    inputs: [
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "transferFrom",
    inputs: [
      { name: "from", type: "address", internalType: "address" },
      { name: "to", type: "address", internalType: "address" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ],
    outputs: [{ name: "", type: "bool", internalType: "bool" }],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateAdmin",
    inputs: [{ name: "admin_", type: "address", internalType: "address" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateImage",
    inputs: [{ name: "image_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  {
    type: "function",
    name: "updateMetadata",
    inputs: [{ name: "metadata_", type: "string", internalType: "string" }],
    outputs: [],
    stateMutability: "nonpayable"
  },
  { type: "function", name: "verify", inputs: [], outputs: [], stateMutability: "nonpayable" },
  {
    type: "event",
    name: "Approval",
    inputs: [
      { name: "owner", type: "address", indexed: true, internalType: "address" },
      { name: "spender", type: "address", indexed: true, internalType: "address" },
      { name: "value", type: "uint256", indexed: false, internalType: "uint256" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateChanged",
    inputs: [
      { name: "delegator", type: "address", indexed: true, internalType: "address" },
      { name: "fromDelegate", type: "address", indexed: true, internalType: "address" },
      { name: "toDelegate", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "DelegateVotesChanged",
    inputs: [
      { name: "delegate", type: "address", indexed: true, internalType: "address" },
      { name: "previousVotes", type: "uint256", indexed: false, internalType: "uint256" },
      { name: "newVotes", type: "uint256", indexed: false, internalType: "uint256" }
    ],
    anonymous: false
  },
  { type: "event", name: "EIP712DomainChanged", inputs: [], anonymous: false },
  {
    type: "event",
    name: "Transfer",
    inputs: [
      { name: "from", type: "address", indexed: true, internalType: "address" },
      { name: "to", type: "address", indexed: true, internalType: "address" },
      { name: "value", type: "uint256", indexed: false, internalType: "uint256" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateAdmin",
    inputs: [
      { name: "oldAdmin", type: "address", indexed: true, internalType: "address" },
      { name: "newAdmin", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateImage",
    inputs: [{ name: "image", type: "string", indexed: false, internalType: "string" }],
    anonymous: false
  },
  {
    type: "event",
    name: "UpdateMetadata",
    inputs: [{ name: "metadata", type: "string", indexed: false, internalType: "string" }],
    anonymous: false
  },
  {
    type: "event",
    name: "Verified",
    inputs: [
      { name: "admin", type: "address", indexed: true, internalType: "address" },
      { name: "token", type: "address", indexed: true, internalType: "address" }
    ],
    anonymous: false
  },
  { type: "error", name: "AlreadyVerified", inputs: [] },
  { type: "error", name: "CheckpointUnorderedInsertion", inputs: [] },
  { type: "error", name: "ECDSAInvalidSignature", inputs: [] },
  {
    type: "error",
    name: "ECDSAInvalidSignatureLength",
    inputs: [{ name: "length", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ECDSAInvalidSignatureS",
    inputs: [{ name: "s", type: "bytes32", internalType: "bytes32" }]
  },
  {
    type: "error",
    name: "ERC20ExceededSafeSupply",
    inputs: [
      { name: "increasedSupply", type: "uint256", internalType: "uint256" },
      { name: "cap", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientAllowance",
    inputs: [
      { name: "spender", type: "address", internalType: "address" },
      { name: "allowance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InsufficientBalance",
    inputs: [
      { name: "sender", type: "address", internalType: "address" },
      { name: "balance", type: "uint256", internalType: "uint256" },
      { name: "needed", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "ERC20InvalidApprover",
    inputs: [{ name: "approver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidReceiver",
    inputs: [{ name: "receiver", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSender",
    inputs: [{ name: "sender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC20InvalidSpender",
    inputs: [{ name: "spender", type: "address", internalType: "address" }]
  },
  {
    type: "error",
    name: "ERC2612ExpiredSignature",
    inputs: [{ name: "deadline", type: "uint256", internalType: "uint256" }]
  },
  {
    type: "error",
    name: "ERC2612InvalidSigner",
    inputs: [
      { name: "signer", type: "address", internalType: "address" },
      { name: "owner", type: "address", internalType: "address" }
    ]
  },
  {
    type: "error",
    name: "ERC5805FutureLookup",
    inputs: [
      { name: "timepoint", type: "uint256", internalType: "uint256" },
      { name: "clock", type: "uint48", internalType: "uint48" }
    ]
  },
  { type: "error", name: "ERC6372InconsistentClock", inputs: [] },
  {
    type: "error",
    name: "InvalidAccountNonce",
    inputs: [
      { name: "account", type: "address", internalType: "address" },
      { name: "currentNonce", type: "uint256", internalType: "uint256" }
    ]
  },
  { type: "error", name: "InvalidShortString", inputs: [] },
  { type: "error", name: "NotAdmin", inputs: [] },
  { type: "error", name: "NotOriginalAdmin", inputs: [] },
  {
    type: "error",
    name: "SafeCastOverflowedUintDowncast",
    inputs: [
      { name: "bits", type: "uint8", internalType: "uint8" },
      { name: "value", type: "uint256", internalType: "uint256" }
    ]
  },
  {
    type: "error",
    name: "StringTooLong",
    inputs: [{ name: "str", type: "string", internalType: "string" }]
  },
  {
    type: "error",
    name: "VotesExpiredSignature",
    inputs: [{ name: "expiry", type: "uint256", internalType: "uint256" }]
  }
];
var ClankerToken_v4_mainnet_bytecode = "0x6101806040523461008d57610024610015610147565b9695909594919493929361067a565b604051612ef8908161107e823960805181611f9e015260a0518161205b015260c05181611f6f015260e05181611fed01526101005181612013015261012051816109c1015261014051816109ea0152610160518181816105280152818161109201526117ea0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176100c857604052565b610091565b604051906100dc6040836100a5565b565b81601f8201121561008d578051906001600160401b0382116100c85760405192610112601f8401601f1916602001856100a5565b8284526020838301011161008d57815f9260208093018386015e8301015290565b51906001600160a01b038216820361008d57565b613fb6803803806040519261015c82856100a5565b83398101916101008284031261008d5781516001600160401b03811161008d57836101889184016100de565b60208301519091906001600160401b03811161008d57846101aa9185016100de565b936040840151936101bd60608201610133565b60808201519094906001600160401b03811161008d57836101df9184016100de565b60a08301519094906001600160401b03811161008d57846102019185016100de565b60c08401519094906001600160401b03811161008d5760e0916102259186016100de565b930151919796959493929190565b90600182811c92168015610261575b602083101461024d57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610242565b601f8111610277575050565b60035f5260205f20906020601f840160051c830193106102b1575b601f0160051c01905b8181106102a6575050565b5f815560010161029b565b9091508190610292565b601f82116102c857505050565b5f5260205f20906020601f840160051c83019310610300575b601f0160051c01905b8181106102f5575050565b5f81556001016102ea565b90915081906102e1565b80519091906001600160401b0381116100c8576103338161032c600454610233565b60046102bb565b602092601f821160011461037357610363929382915f92610368575b50508160011b915f199060031b1c19161790565b600455565b015190505f8061034f565b60045f52601f198216937f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f5b8681106103d757508360019596106103bf575b505050811b01600455565b01515f1960f88460031b161c191690555f80806103b4565b919260206001819286850151815501940192016103a1565b80519091906001600160401b0381116100c85761041881610411600e54610233565b600e6102bb565b602092601f821160011461044c57610447929382915f926103685750508160011b915f199060031b1c19161790565b600e55565b600e5f52601f198216937fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b8681106104b05750836001959610610498575b505050811b01600e55565b01515f1960f88460031b161c191690555f808061048d565b9192602060018192868501518155019401920161047a565b80519091906001600160401b0381116100c8576104f1816104ea600c54610233565b600c6102bb565b602092601f821160011461052557610520929382915f926103685750508160011b915f199060031b1c19161790565b600c55565b600c5f52601f198216937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8681106105895750836001959610610571575b505050811b01600c55565b01515f1960f88460031b161c191690555f8080610566565b91926020600181928685015181550194019201610553565b80519091906001600160401b0381116100c8576105ca816105c3600d54610233565b600d6102bb565b602092601f82116001146105fe576105f9929382915f926103685750508160011b915f199060031b1c19161790565b600d55565b600d5f52601f198216937fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5915f5b868110610662575083600195961061064a575b505050811b01600d55565b01515f1960f88460031b161c191690555f808061063f565b9192602060018192868501518155019401920161062c565b96959493929196604051906106906040836100a5565b60018252603160f81b6020830190815281519093906001600160401b0381116100c8576106c7816106c2600354610233565b61026b565b6020601f82116001146107a55793610778936107136107879b9a989461070b8561077d9a966107829d9a5f9161079a575b508160011b915f199060031b1c19161790565b60035561030a565b61071c816108e8565b61012052610729826109dd565b610140526020815191012060e052519020610100524660a05261074a610acf565b6080523060c052610160819052600b80546001600160a01b0319166001600160a01b03909216919091179055565b6103ef565b6104c8565b6105a1565b46146107905750565b6100dc903361083c565b90508501515f6106f8565b60035f52601f198216907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b81811061082457506107879b9a98946001856107829c9995610778999561077d9c98610713961061080c575b5050811b0160035561030a565b8601515f1960f88460031b161c191690555f806107ff565b9192602060018192868a0151815501940192016107d3565b91906001600160a01b03831680156108d5576002548281018091116108d0576002555f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160d01b038085116108b957506100dc929350610bac565b630e58ae9360e11b5f52600485905260245260445ffd5b610b98565b63ec442f0560e01b5f525f60045260245ffd5b908151602081105f1461090357509061090090610b2d565b90565b6001600160401b0381116100c85761092781610920600554610233565b60056102bb565b602092601f821160011461095e57610956929382915f926103685750508160011b915f199060031b1c19161790565b60055560ff90565b60055f52601f198216937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b8681106109c557508360019596106109ad575b505050811b0160055560ff90565b01515f1960f88460031b161c191690555f808061099f565b9192602060018192868501518155019401920161098c565b908151602081105f146109f557509061090090610b2d565b6001600160401b0381116100c857610a1981610a12600654610233565b60066102bb565b602092601f8211600114610a5057610a48929382915f926103685750508160011b915f199060031b1c19161790565b60065560ff90565b60065f52601f198216937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b868110610ab75750836001959610610a9f575b505050811b0160065560ff90565b01515f1960f88460031b161c191690555f8080610a91565b91926020600181928685015181550194019201610a7e565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152610b2760c0826100a5565b51902090565b601f815111610b58576020815191015160208210610b49571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b634e487b7160e01b5f52601160045260245ffd5b90610bb681610cab565b9165ffffffffffff4311610c9357600a5480610c5d5750610bf0610be06100dc945f5b6001611021565b65ffffffffffff4316600a610f4b565b50506001600160a01b03168015610c45575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f9182526040909120546001600160a01b039081169116610dda565b610c56610c5183610cab565b610cdc565b5050610c02565b92835f198101116108d057600a5f525f516020613f765f395f51905f52909301546100dc93610bf091610be0919060301c610bd9565b6306dfcc6560e41b5f5260306004524360245260445ffd5b6001600160d01b038111610cc5576001600160d01b031690565b6306dfcc6560e41b5f5260d060045260245260445ffd5b65ffffffffffff4311610c9357600a5480610d065750610be0610d02915f5b6002611021565b9091565b805f198101116108d057600a5f525f516020613f765f395f51905f520154610d0291610be09160301c610cfb565b65ffffffffffff4311610c9357805480610d685750610d58610d02925f6002611021565b9065ffffffffffff431690610f4b565b805f198101116108d0575f82815260209020015f190154610d0292610d589160301c610cfb565b65ffffffffffff4311610c9357805480610db35750610d58610d02925f6001611021565b805f198101116108d0575f82815260209020015f190154610d0292610d589160301c610bd9565b6001600160a01b03808316939291908116908185141580610ecd575b610e02575b5050505050565b81610e73575b505082610e17575b8080610dfb565b6001600160a01b03165f9081526009602052604090205f516020613f965f395f51905f5291610e5091610e4a9091610cab565b90610d8f565b604080516001600160d01b039384168152919092166020820152a25f8080610e10565b6001600160a01b03165f9081526009602052604090205f516020613f965f395f51905f5290610eab90610ea586610cab565b90610d34565b604080516001600160d01b039384168152919092166020820152a25f80610e08565b50831515610df6565b5f198101919082116108d057565b908154680100000000000000008110156100c85760018101808455811015610f37575f9283526020928390208251929093015160301b65ffffffffffff191665ffffffffffff9290921691909117910155565b634e487b7160e01b5f52603260045260245ffd5b80549293928015610ff757610f62610f6d91610ed6565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411610fe857879303610fb45750610fb092509065ffffffffffff82549181199060301b169116179055565b9190565b915050610fb091610fd4610fc66100cd565b65ffffffffffff9093168352565b6001600160d01b0386166020830152610ee4565b632520601d60e01b5f5260045ffd5b509061101c91611008610fc66100cd565b6001600160d01b0385166020830152610ee4565b5f9190565b919091806001146110635760021461104757634e487b7160e01b5f52605160045260245ffd5b6001600160d01b03908116918116919091039081116108d05790565b506001600160d01b03918216908216019081116108d0579056fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a71461026457806306fdde031461025f578063095ea7b31461025a57806318160ddd146102555780631c7b2ff41461025057806323b872dd1461024b578063313ce567146102465780633644e51514610241578063392f37e91461023c5780633a46b1a81461023757806342966c68146102325780634bf5d7e91461022d578063587cde1e146102285780635c19a95c146102235780636fcfff451461021e57806370a082311461021957806379cc6790146102145780637ecebe001461020f57806380007e831461020a57806384b0196e146102055780638e539e8c14610200578063918b5be1146101fb57806391ddadf4146101f657806395d89b41146101f15780639ab24eb0146101ec578063a9059cbb146101e7578063aba83150146101e2578063b974b0a3146101dd578063c3cda520146101d8578063d0496d6a146101d3578063d505accf146101ce578063dd62ed3e146101c9578063e2f273bd146101c4578063eb3d68e7146101bf578063f1127ed8146101ba578063f851a440146101b55763fc735e99146101b0575f80fd5b6117c3565b611790565b6116ba565b611546565b6114a5565b611432565b611297565b611274565b611106565b611003565b610fe0565b610fba565b610f52565b610ead565b610e82565b610cd5565b610ae0565b6109a9565b610987565b610942565b610912565b6108d0565b610848565b610826565b6107cb565b610722565b610703565b6105ff565b6105c1565b61059f565b610584565b61054c565b6104fc565b6104df565b6104ae565b610370565b34610315576020600319360112610315576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361031557807f36372b0700000000000000000000000000000000000000000000000000000000602092149081156102eb575b81156102e2575b506040519015158152f35b9050155f6102d7565b7f01ffc9a700000000000000000000000000000000000000000000000000000000811491506102d0565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602061036d928181520190610319565b90565b34610315575f600319360112610315576040515f600354610390816118e8565b808452906001811690811561042657506001146103c8575b6103c4836103b881850382610bed565b6040519182918261035c565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b80821061040c575090915081016020016103b86103a8565b9192600181602092548385880101520191019092916103f4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506103b890506103a8565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361031557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361031557565b34610315576040600319360112610315576104d46104ca610468565b602435903361239e565b602060405160018152f35b34610315575f600319360112610315576020600254604051908152f35b34610315575f60031936011261031557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315576060600319360112610315576104d4610568610468565b61057061048b565b6044359161057f833383611c54565b611db9565b34610315575f60031936011261031557602060405160128152f35b34610315575f6003193601126103155760206105b9611f58565b604051908152f35b34610315575f600319360112610315576103c46040516105eb816105e481611939565b0382610bed565b604051918291602083526020830190610319565b3461031557604060031936011261031557610618610468565b73ffffffffffffffffffffffffffffffffffffffff60243591165f52600960205261064660405f2091612081565b8154905f8291600584116106ab575b61066093508461262f565b908161069057505060205f5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff60405191168152f35b61069b6020926120d3565b905f52815f20015460301c61066c565b91926106b6816124ba565b81039081116106fe5761066093855f5265ffffffffffff8260205f2001541665ffffffffffff8516105f146106ec575091610655565b9291506106f8906120e1565b90610655565b6118bb565b3461031557602060031936011261031557610720600435336120ef565b005b34610315575f6003193601126103155761073b4361243b565b65ffffffffffff8061074c4361243b565b169116036107a3576103c4604051610765604082610bed565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020820152604051918291602083526020830190610319565b7f6ff07140000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103155760206003193601126103155773ffffffffffffffffffffffffffffffffffffffff6107f9610468565b165f526008602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461031557602060031936011261031557610720610842610468565b33612275565b346103155760206003193601126103155773ffffffffffffffffffffffffffffffffffffffff610876610468565b165f52600960205260405f205463ffffffff81116108a05760405163ffffffff9091168152602090f35b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b346103155760206003193601126103155760206105b96108ee610468565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b346103155760406003193601126103155761072061092e610468565b6024359061093d823383611c54565b6120ef565b346103155760206003193601126103155773ffffffffffffffffffffffffffffffffffffffff610970610468565b165f526007602052602060405f2054604051908152f35b34610315575f60031936011261031557602060ff600f54166040519015158152f35b34610315575f60031936011261031557610a876109e57f000000000000000000000000000000000000000000000000000000000000000061281a565b610a0e7f000000000000000000000000000000000000000000000000000000000000000061288c565b6020604051610a1d8282610bed565b5f815281610a95818301947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013687376040519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e0858a015260e0890190610319565b908782036040890152610319565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110610ac957505050500390f35b835185528695509381019392810192600101610aba565b3461031557602060031936011261031557610afc600435612081565b600a54905f829160058411610b4b575b610b189350600a61262f565b80610b2957506040515f8152602090f35b610b46610b376020926120d3565b600a5f52825f20015460301c90565b61066c565b9192610b56816124ba565b81039081116106fe57610b1893600a5f5265ffffffffffff8260205f2001541665ffffffffffff8516105f14610b8d575091610b0c565b929150610b99906120e1565b90610b0c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610be857604052565b610b9f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610be857604052565b60405190610c3d604083610bed565b565b60206003198201126103155760043567ffffffffffffffff811161031557816023820112156103155780600401359067ffffffffffffffff8211610be85760405192610cb3601f84017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200185610bed565b8284526024838301011161031557815f92602460209301838601378301015290565b3461031557610ce336610c3f565b73ffffffffffffffffffffffffffffffffffffffff600b54163303610e5a57805167ffffffffffffffff8111610be857610d2781610d22600c546118e8565b611b9c565b6020601f8211600114610d975791610d7882610d87937ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4955f91610d8c575b505f198260011b9260031b1c19161790565b600c556040519182918261035c565b0390a1005b90508301515f610d66565b600c5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b818110610e425750927ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4949260019282610d879610610e2a575b5050811b01600c556103b8565b8401515f1960f88460031b161c191690555f80610e1d565b91926020600181928689015181550194019201610de3565b7f7bfa4b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610315575f600319360112610315576020610e9d4361243b565b65ffffffffffff60405191168152f35b34610315575f600319360112610315576040515f600454610ecd816118e8565b80845290600181169081156104265750600114610ef4576103c4836103b881850382610bed565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610f38575090915081016020016103b86103a8565b919260018160209254838588010152019101909291610f20565b346103155760206003193601126103155773ffffffffffffffffffffffffffffffffffffffff610f80610468565b165f526009602052602079ffffffffffffffffffffffffffffffffffffffffffffffffffff610fb160405f20612325565b16604051908152f35b34610315576040600319360112610315576104d4610fd6610468565b6024359033611db9565b34610315575f600319360112610315576103c46040516105eb816105e4816119f6565b34610315575f6003193601126103155773ffffffffffffffffffffffffffffffffffffffff600b5416604051906110448261103d816119f6565b0383610bed565b6103c4604051611057816105e481611939565b6110d8604051916110728361106b81611a79565b0384610bed565b6110ca60405196879673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168852602088015260a0604088015260a0870190610319565b908582036060870152610319565b908382036080850152610319565b6064359060ff8216820361031557565b6084359060ff8216820361031557565b346103155760c06003193601126103155761111f610468565b6024359060443561112e6110e6565b6084359060a4359280421161124957916111c193916111b36111b89460405160208101917fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf835273ffffffffffffffffffffffffffffffffffffffff8a1660408301528a60608301526080820152608081526111ab60a082610bed565b51902061234e565b6128c3565b90929192612994565b6111f28173ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b809303611203576107209250612275565b73ffffffffffffffffffffffffffffffffffffffff91507f752d88c0000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b7f4683af0e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610315575f600319360112610315576103c46040516105eb816105e481611a79565b346103155760e0600319360112610315576112b0610468565b6112b861048b565b60443590606435926112c86110f6565b60a43560c43590864211611406576113989261139361130e8673ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b9860405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff89169b8c604084015273ffffffffffffffffffffffffffffffffffffffff8b1660608401528b608084015260a083015260c082015260c081526111ab60e082610bed565b61238f565b9373ffffffffffffffffffffffffffffffffffffffff8516036113bf57610720935061239e565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff8085166004521660245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461031557604060031936011261031557602061149c611450610468565b73ffffffffffffffffffffffffffffffffffffffff61146d61048b565b91165f526001835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b34610315576020600319360112610315576114be610468565b600b5473ffffffffffffffffffffffffffffffffffffffff811690813303610e5a5773ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff000000000000000000000000000000000000000093169283911617600b557fcd6ba6b7da89e039d53b5d981527a893755342bb9d8e5c2f61f6638f1fb5192b5f80a3005b346103155761155436610c3f565b73ffffffffffffffffffffffffffffffffffffffff600b54163303610e5a57805167ffffffffffffffff8111610be85761159881611593600e546118e8565b611bec565b6020601f82116001146115f757916115e882610d87937fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216955f91610d8c57505f198260011b9260031b1c19161790565b600e556040519182918261035c565b600e5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b8181106116a25750927fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216949260019282610d87961061168a575b5050811b01600e556103b8565b8401515f1960f88460031b161c191690555f8061167d565b91926020600181928689015181550194019201611643565b34610315576040600319360112610315576116d3610468565b6024359063ffffffff82168203610315576103c49173ffffffffffffffffffffffffffffffffffffffff61172d92611709611c3c565b50611712611c3c565b50165f52600960205260405f20611727611c3c565b50612a5b565b506040519061173b82610bcc565b5465ffffffffffff8116825260301c602082015260405191829182919091602079ffffffffffffffffffffffffffffffffffffffffffffffffffff81604084019565ffffffffffff8151168552015116910152565b34610315575f60031936011261031557602073ffffffffffffffffffffffffffffffffffffffff600b5416604051908152f35b34610315575f6003193601126103155773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361189357600f5460ff811661186b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117600f5530337f78a953f3f0d92abc078a34e5d4fedf8708e788e1b29300b3d6170e97f88a13fc5f80a3005b7f118fd7b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fce7123f5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90600182811c9216801561192f575b602083101461190257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916118f7565b600c545f9291611948826118e8565b80825291600181169081156119bc5750600114611963575050565b600c5f9081529293509091907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c75b8383106119a2575060209250010190565b600181602092949394548385870101520191019190611991565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b600e545f9291611a05826118e8565b80825291600181169081156119bc5750600114611a20575050565b600e5f9081529293509091907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd5b838310611a5f575060209250010190565b600181602092949394548385870101520191019190611a4e565b600d545f9291611a88826118e8565b80825291600181169081156119bc5750600114611aa3575050565b600d5f9081529293509091907fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb55b838310611ae2575060209250010190565b600181602092949394548385870101520191019190611ad1565b5f9291815491611b0b836118e8565b8083529260018116908115611b605750600114611b2757505050565b5f9081526020812093945091925b838310611b46575060209250010190565b600181602092949394548385870101520191019190611b35565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b601f8111611ba8575050565b600c5f5260205f20906020601f840160051c83019310611be2575b601f0160051c01905b818110611bd7575050565b5f8155600101611bcc565b9091508190611bc3565b601f8111611bf8575050565b600e5f5260205f20906020601f840160051c83019310611c32575b601f0160051c01905b818110611c27575050565b5f8155600101611c1c565b9091508190611c13565b60405190611c4982610bcc565b5f6020838281520152565b73ffffffffffffffffffffffffffffffffffffffff909291921690815f526001602052611ca28360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b545f198110611cb2575b50505050565b818110611d71578215611d455773ffffffffffffffffffffffffffffffffffffffff841615611d1957611d0f925f526001602052039160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b555f808080611cac565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b92919073ffffffffffffffffffffffffffffffffffffffff8416938415611f2c5773ffffffffffffffffffffffffffffffffffffffff82168015611f0057611e1e8273ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5495848710611eb45784610c3d969703611e558473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b55611e7d8473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3612c93565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff83166004526024879052604485905260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612058575b15611fc0577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261205260c082610bed565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614611f97565b65ffffffffffff6120914361243b565b16808210156120a4575061036d9061243b565b907fecd3f81e000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b905f1982019182116106fe57565b90600182018092116106fe57565b73ffffffffffffffffffffffffffffffffffffffff8116908115611f2c576121348173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5483811061222a579061216c84610c3d959493039173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5581600254036002555f817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405180602081018782520390a38015612212575b6121be6121b983612a9d565b612c32565b50505f908152600860205260408120549080527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75473ffffffffffffffffffffffffffffffffffffffff9081169116612693565b61222361221e83612a9d565b612bd1565b50506121ad565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff909116600452602452604482905260645ffd5b73ffffffffffffffffffffffffffffffffffffffff8181165f81815260086020526040812080548685167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117909255610c3d9694169461231f9390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b91612693565b8054806123325750505f90565b805f198101116106fe575f19915f5260205f2001015460301c90565b604290612359611f58565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9161036d93916111b8936128c3565b73ffffffffffffffffffffffffffffffffffffffff16908115611d455773ffffffffffffffffffffffffffffffffffffffff8116928315611d19578061242e7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593855f52600160205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b55604051908152602090a3565b65ffffffffffff81116124535765ffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52603060045260245260445ffd5b811561248d570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600181111561036d578060017001000000000000000000000000000000008310156125ed575b61259361258961257f61257561256b61256161255061259a9760048a6801000000000000000061259f9c10156125e0575b6401000000008110156125d3575b620100008110156125c6575b6101008110156125b9575b60108110156125ac575b10156125a4575b60030260011c90565b61255a818b612483565b0160011c90565b61255a818a612483565b61255a8189612483565b61255a8188612483565b61255a8187612483565b61255a8186612483565b8093612483565b821190565b900390565b60011b612547565b60041c9160021b91612540565b60081c9160041b91612536565b60101c9160081b9161252b565b60201c9160101b9161251f565b60401c9160201b91612511565b505061259f61259a61259361258961257f61257561256b6125616125506126148a60801c90565b98506801000000000000000097506124e09650505050505050565b91905b83821061263f5750505090565b9091928083169080841860011c82018092116106fe57845f5265ffffffffffff8260205f2001541665ffffffffffff8416105f146126815750925b9190612632565b93925061268d906120e1565b9161267a565b919073ffffffffffffffffffffffffffffffffffffffff81169273ffffffffffffffffffffffffffffffffffffffff8116908482141580612811575b6126db575b5050505050565b8161278e575b5050826126f0575b80806126d4565b61278361276a7fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249361276461275e79ffffffffffffffffffffffffffffffffffffffffffffffffffff9573ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b91612a9d565b90612b71565b6040805192851683529316602082015291829190820190565b0390a25f80806126e9565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff61280761276a6127f87fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249473ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b61280188612a9d565b90612b0d565b0390a25f806126e1565b508315156126cf565b60ff81146128795760ff811690601f8211612851576040519161283e604084610bed565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060405161036d816105e4816005611afc565b60ff81146128b05760ff811690601f8211612851576040519161283e604084610bed565b5060405161036d816105e4816006611afc565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612952579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612947575f5173ffffffffffffffffffffffffffffffffffffffff81161561293d57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004111561296757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b61299d8161295d565b806129a6575050565b6129af8161295d565b600181036129df577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6129e88161295d565b60028103612a1c57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b80612a2860039261295d565b14612a305750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8054821015612a70575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff8111612add5779ffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260d060045260245260445ffd5b90612b174361243b565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612b3d85612325565b92169116039079ffffffffffffffffffffffffffffffffffffffffffffffffffff82116106fe57612b6d92612dc5565b9091565b90612b7b4361243b565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612ba185612325565b92169116019079ffffffffffffffffffffffffffffffffffffffffffffffffffff82116106fe57612b6d92612dc5565b612bda4361243b565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612c01600a612325565b921691160179ffffffffffffffffffffffffffffffffffffffffffffffffffff81116106fe57612b6d91600a612dc5565b612c3b4361243b565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612c62600a612325565b921691160379ffffffffffffffffffffffffffffffffffffffffffffffffffff81116106fe57612b6d91600a612dc5565b9073ffffffffffffffffffffffffffffffffffffffff80610c3d949316918215612d1f575b16908115612d0c575b5f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f205416905f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f20541690612693565b612d186121b984612a9d565b5050612cc1565b612d2b61221e85612a9d565b5050612cb8565b805468010000000000000000811015610be857612d5491600182018155612a5b565b612d995781516020929092015160301b7fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001665ffffffffffff92909216919091179055565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80549293928015612ebb57612ddc612de7916120d3565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411612e9357879303612e4c5750612e4892509065ffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000083549260301b169116179055565b9190565b915050612e4891612e6c612e5e610c2e565b65ffffffffffff9093168352565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff86166020830152612d32565b7f2520601d000000000000000000000000000000000000000000000000000000005f5260045ffd5b5090612ef391612ecc612e5e610c2e565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff85166020830152612d32565b5f919056c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a7dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724";

// src/abi/v4.1.monad/ClankerToken.ts
var ClankerToken_v4_monad_bytecode = "0x6101806040523461008d57610024610015610147565b9695909594919493929361067a565b604051612ef8908161107e823960805181611f9e015260a0518161205b015260c05181611f6f015260e05181611fed01526101005181612013015261012051816109c1015261014051816109ea0152610160518181816105280152818161109201526117ea0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176100c857604052565b610091565b604051906100dc6040836100a5565b565b81601f8201121561008d578051906001600160401b0382116100c85760405192610112601f8401601f1916602001856100a5565b8284526020838301011161008d57815f9260208093018386015e8301015290565b51906001600160a01b038216820361008d57565b613fb6803803806040519261015c82856100a5565b83398101916101008284031261008d5781516001600160401b03811161008d57836101889184016100de565b60208301519091906001600160401b03811161008d57846101aa9185016100de565b936040840151936101bd60608201610133565b60808201519094906001600160401b03811161008d57836101df9184016100de565b60a08301519094906001600160401b03811161008d57846102019185016100de565b60c08401519094906001600160401b03811161008d5760e0916102259186016100de565b930151919796959493929190565b90600182811c92168015610261575b602083101461024d57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610242565b601f8111610277575050565b60035f5260205f20906020601f840160051c830193106102b1575b601f0160051c01905b8181106102a6575050565b5f815560010161029b565b9091508190610292565b601f82116102c857505050565b5f5260205f20906020601f840160051c83019310610300575b601f0160051c01905b8181106102f5575050565b5f81556001016102ea565b90915081906102e1565b80519091906001600160401b0381116100c8576103338161032c600454610233565b60046102bb565b602092601f821160011461037357610363929382915f92610368575b50508160011b915f199060031b1c19161790565b600455565b015190505f8061034f565b60045f52601f198216937f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f5b8681106103d757508360019596106103bf575b505050811b01600455565b01515f1960f88460031b161c191690555f80806103b4565b919260206001819286850151815501940192016103a1565b80519091906001600160401b0381116100c85761041881610411600e54610233565b600e6102bb565b602092601f821160011461044c57610447929382915f926103685750508160011b915f199060031b1c19161790565b600e55565b600e5f52601f198216937fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b8681106104b05750836001959610610498575b505050811b01600e55565b01515f1960f88460031b161c191690555f808061048d565b9192602060018192868501518155019401920161047a565b80519091906001600160401b0381116100c8576104f1816104ea600c54610233565b600c6102bb565b602092601f821160011461052557610520929382915f926103685750508160011b915f199060031b1c19161790565b600c55565b600c5f52601f198216937fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b8681106105895750836001959610610571575b505050811b01600c55565b01515f1960f88460031b161c191690555f8080610566565b91926020600181928685015181550194019201610553565b80519091906001600160401b0381116100c8576105ca816105c3600d54610233565b600d6102bb565b602092601f82116001146105fe576105f9929382915f926103685750508160011b915f199060031b1c19161790565b600d55565b600d5f52601f198216937fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5915f5b868110610662575083600195961061064a575b505050811b01600d55565b01515f1960f88460031b161c191690555f808061063f565b9192602060018192868501518155019401920161062c565b96959493929196604051906106906040836100a5565b60018252603160f81b6020830190815281519093906001600160401b0381116100c8576106c7816106c2600354610233565b61026b565b6020601f82116001146107a55793610778936107136107879b9a989461070b8561077d9a966107829d9a5f9161079a575b508160011b915f199060031b1c19161790565b60035561030a565b61071c816108e8565b61012052610729826109dd565b610140526020815191012060e052519020610100524660a05261074a610acf565b6080523060c052610160819052600b80546001600160a01b0319166001600160a01b03909216919091179055565b6103ef565b6104c8565b6105a1565b46146107905750565b6100dc903361083c565b90508501515f6106f8565b60035f52601f198216907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b81811061082457506107879b9a98946001856107829c9995610778999561077d9c98610713961061080c575b5050811b0160035561030a565b8601515f1960f88460031b161c191690555f806107ff565b9192602060018192868a0151815501940192016107d3565b91906001600160a01b03831680156108d5576002548281018091116108d0576002555f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160d01b038085116108b957506100dc929350610bac565b630e58ae9360e11b5f52600485905260245260445ffd5b610b98565b63ec442f0560e01b5f525f60045260245ffd5b908151602081105f1461090357509061090090610b2d565b90565b6001600160401b0381116100c85761092781610920600554610233565b60056102bb565b602092601f821160011461095e57610956929382915f926103685750508160011b915f199060031b1c19161790565b60055560ff90565b60055f52601f198216937f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b8681106109c557508360019596106109ad575b505050811b0160055560ff90565b01515f1960f88460031b161c191690555f808061099f565b9192602060018192868501518155019401920161098c565b908151602081105f146109f557509061090090610b2d565b6001600160401b0381116100c857610a1981610a12600654610233565b60066102bb565b602092601f8211600114610a5057610a48929382915f926103685750508160011b915f199060031b1c19161790565b60065560ff90565b60065f52601f198216937ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b868110610ab75750836001959610610a9f575b505050811b0160065560ff90565b01515f1960f88460031b161c191690555f8080610a91565b91926020600181928685015181550194019201610a7e565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152610b2760c0826100a5565b51902090565b601f815111610b58576020815191015160208210610b49571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b634e487b7160e01b5f52601160045260245ffd5b90610bb681610cab565b9165ffffffffffff4311610c9357600a5480610c5d5750610bf0610be06100dc945f5b6001611021565b65ffffffffffff4316600a610f4b565b50506001600160a01b03168015610c45575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7545f9182526040909120546001600160a01b039081169116610dda565b610c56610c5183610cab565b610cdc565b5050610c02565b92835f198101116108d057600a5f525f516020613f765f395f51905f52909301546100dc93610bf091610be0919060301c610bd9565b6306dfcc6560e41b5f5260306004524360245260445ffd5b6001600160d01b038111610cc5576001600160d01b031690565b6306dfcc6560e41b5f5260d060045260245260445ffd5b65ffffffffffff4311610c9357600a5480610d065750610be0610d02915f5b6002611021565b9091565b805f198101116108d057600a5f525f516020613f765f395f51905f520154610d0291610be09160301c610cfb565b65ffffffffffff4311610c9357805480610d685750610d58610d02925f6002611021565b9065ffffffffffff431690610f4b565b805f198101116108d0575f82815260209020015f190154610d0292610d589160301c610cfb565b65ffffffffffff4311610c9357805480610db35750610d58610d02925f6001611021565b805f198101116108d0575f82815260209020015f190154610d0292610d589160301c610bd9565b6001600160a01b03808316939291908116908185141580610ecd575b610e02575b5050505050565b81610e73575b505082610e17575b8080610dfb565b6001600160a01b03165f9081526009602052604090205f516020613f965f395f51905f5291610e5091610e4a9091610cab565b90610d8f565b604080516001600160d01b039384168152919092166020820152a25f8080610e10565b6001600160a01b03165f9081526009602052604090205f516020613f965f395f51905f5290610eab90610ea586610cab565b90610d34565b604080516001600160d01b039384168152919092166020820152a25f80610e08565b50831515610df6565b5f198101919082116108d057565b908154680100000000000000008110156100c85760018101808455811015610f37575f9283526020928390208251929093015160301b65ffffffffffff191665ffffffffffff9290921691909117910155565b634e487b7160e01b5f52603260045260245ffd5b80549293928015610ff757610f62610f6d91610ed6565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411610fe857879303610fb45750610fb092509065ffffffffffff82549181199060301b169116179055565b9190565b915050610fb091610fd4610fc66100cd565b65ffffffffffff9093168352565b6001600160d01b0386166020830152610ee4565b632520601d60e01b5f5260045ffd5b509061101c91611008610fc66100cd565b6001600160d01b0385166020830152610ee4565b5f9190565b919091806001146110635760021461104757634e487b7160e01b5f52605160045260245ffd5b6001600160d01b03908116918116919091039081116108d05790565b506001600160d01b03918216908216019081116108d0579056fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a71461026457806306fdde031461025f578063095ea7b31461025a57806318160ddd146102555780631c7b2ff41461025057806323b872dd1461024b578063313ce567146102465780633644e51514610241578063392f37e91461023c5780633a46b1a81461023757806342966c68146102325780634bf5d7e91461022d578063587cde1e146102285780635c19a95c146102235780636fcfff451461021e57806370a082311461021957806379cc6790146102145780637ecebe001461020f57806380007e831461020a57806384b0196e146102055780638e539e8c14610200578063918b5be1146101fb57806391ddadf4146101f657806395d89b41146101f15780639ab24eb0146101ec578063a9059cbb146101e7578063aba83150146101e2578063b974b0a3146101dd578063c3cda520146101d8578063d0496d6a146101d3578063d505accf146101ce578063dd62ed3e146101c9578063e2f273bd146101c4578063eb3d68e7146101bf578063f1127ed8146101ba578063f851a440146101b55763fc735e99146101b0575f80fd5b6117c3565b611790565b6116ba565b611546565b6114a5565b611432565b611297565b611274565b611106565b611003565b610fe0565b610fba565b610f52565b610ead565b610e82565b610cd5565b610ae0565b6109a9565b610987565b610942565b610912565b6108d0565b610848565b610826565b6107cb565b610722565b610703565b6105ff565b6105c1565b61059f565b610584565b61054c565b6104fc565b6104df565b6104ae565b610370565b34610315576020600319360112610315576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361031557807f36372b0700000000000000000000000000000000000000000000000000000000602092149081156102eb575b81156102e2575b506040519015158152f35b9050155f6102d7565b7f01ffc9a700000000000000000000000000000000000000000000000000000000811491506102d0565b5f80fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602061036d928181520190610319565b90565b34610315575f600319360112610315576040515f600354610390816118e8565b808452906001811690811561042657506001146103c8575b6103c4836103b881850382610bed565b6040519182918261035c565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b80821061040c575090915081016020016103b86103a8565b9192600181602092548385880101520191019092916103f4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506103b890506103a8565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361031557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361031557565b34610315576040600319360112610315576104d46104ca610468565b602435903361239e565b602060405160018152f35b34610315575f600319360112610315576020600254604051908152f35b34610315575f60031936011261031557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610315576060600319360112610315576104d4610568610468565b61057061048b565b6044359161057f833383611c54565b611db9565b34610315575f60031936011261031557602060405160128152f35b34610315575f6003193601126103155760206105b9611f58565b604051908152f35b34610315575f600319360112610315576103c46040516105eb816105e481611939565b0382610bed565b604051918291602083526020830190610319565b3461031557604060031936011261031557610618610468565b73ffffffffffffffffffffffffffffffffffffffff60243591165f52600960205261064660405f2091612081565b8154905f8291600584116106ab575b61066093508461262f565b908161069057505060205f5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff60405191168152f35b61069b6020926120d3565b905f52815f20015460301c61066c565b91926106b6816124ba565b81039081116106fe5761066093855f5265ffffffffffff8260205f2001541665ffffffffffff8516105f146106ec575091610655565b9291506106f8906120e1565b90610655565b6118bb565b3461031557602060031936011261031557610720600435336120ef565b005b34610315575f6003193601126103155761073b4361243b565b65ffffffffffff8061074c4361243b565b169116036107a3576103c4604051610765604082610bed565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020820152604051918291602083526020830190610319565b7f6ff07140000000000000000000000000000000000000000000000000000000005f5260045ffd5b346103155760206003193601126103155773ffffffffffffffffffffffffffffffffffffffff6107f9610468565b165f526008602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461031557602060031936011261031557610720610842610468565b33612275565b346103155760206003193601126103155773ffffffffffffffffffffffffffffffffffffffff610876610468565b165f52600960205260405f205463ffffffff81116108a05760405163ffffffff9091168152602090f35b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52602060045260245260445ffd5b346103155760206003193601126103155760206105b96108ee610468565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b346103155760406003193601126103155761072061092e610468565b6024359061093d823383611c54565b6120ef565b346103155760206003193601126103155773ffffffffffffffffffffffffffffffffffffffff610970610468565b165f526007602052602060405f2054604051908152f35b34610315575f60031936011261031557602060ff600f54166040519015158152f35b34610315575f60031936011261031557610a876109e57f000000000000000000000000000000000000000000000000000000000000000061281a565b610a0e7f000000000000000000000000000000000000000000000000000000000000000061288c565b6020604051610a1d8282610bed565b5f815281610a95818301947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013687376040519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e0858a015260e0890190610319565b908782036040890152610319565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b828110610ac957505050500390f35b835185528695509381019392810192600101610aba565b3461031557602060031936011261031557610afc600435612081565b600a54905f829160058411610b4b575b610b189350600a61262f565b80610b2957506040515f8152602090f35b610b46610b376020926120d3565b600a5f52825f20015460301c90565b61066c565b9192610b56816124ba565b81039081116106fe57610b1893600a5f5265ffffffffffff8260205f2001541665ffffffffffff8516105f14610b8d575091610b0c565b929150610b99906120e1565b90610b0c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610be857604052565b610b9f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610be857604052565b60405190610c3d604083610bed565b565b60206003198201126103155760043567ffffffffffffffff811161031557816023820112156103155780600401359067ffffffffffffffff8211610be85760405192610cb3601f84017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200185610bed565b8284526024838301011161031557815f92602460209301838601378301015290565b3461031557610ce336610c3f565b73ffffffffffffffffffffffffffffffffffffffff600b54163303610e5a57805167ffffffffffffffff8111610be857610d2781610d22600c546118e8565b611b9c565b6020601f8211600114610d975791610d7882610d87937ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4955f91610d8c575b505f198260011b9260031b1c19161790565b600c556040519182918261035c565b0390a1005b90508301515f610d66565b600c5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b818110610e425750927ff26c33166d6eefdac067b052550e7713b98ff0ffc4abb3caf719a1de36b651f4949260019282610d879610610e2a575b5050811b01600c556103b8565b8401515f1960f88460031b161c191690555f80610e1d565b91926020600181928689015181550194019201610de3565b7f7bfa4b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610315575f600319360112610315576020610e9d4361243b565b65ffffffffffff60405191168152f35b34610315575f600319360112610315576040515f600454610ecd816118e8565b80845290600181169081156104265750600114610ef4576103c4836103b881850382610bed565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610f38575090915081016020016103b86103a8565b919260018160209254838588010152019101909291610f20565b346103155760206003193601126103155773ffffffffffffffffffffffffffffffffffffffff610f80610468565b165f526009602052602079ffffffffffffffffffffffffffffffffffffffffffffffffffff610fb160405f20612325565b16604051908152f35b34610315576040600319360112610315576104d4610fd6610468565b6024359033611db9565b34610315575f600319360112610315576103c46040516105eb816105e4816119f6565b34610315575f6003193601126103155773ffffffffffffffffffffffffffffffffffffffff600b5416604051906110448261103d816119f6565b0383610bed565b6103c4604051611057816105e481611939565b6110d8604051916110728361106b81611a79565b0384610bed565b6110ca60405196879673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168852602088015260a0604088015260a0870190610319565b908582036060870152610319565b908382036080850152610319565b6064359060ff8216820361031557565b6084359060ff8216820361031557565b346103155760c06003193601126103155761111f610468565b6024359060443561112e6110e6565b6084359060a4359280421161124957916111c193916111b36111b89460405160208101917fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf835273ffffffffffffffffffffffffffffffffffffffff8a1660408301528a60608301526080820152608081526111ab60a082610bed565b51902061234e565b6128c3565b90929192612994565b6111f28173ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b809303611203576107209250612275565b73ffffffffffffffffffffffffffffffffffffffff91507f752d88c0000000000000000000000000000000000000000000000000000000005f521660045260245260445ffd5b7f4683af0e000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b34610315575f600319360112610315576103c46040516105eb816105e481611a79565b346103155760e0600319360112610315576112b0610468565b6112b861048b565b60443590606435926112c86110f6565b60a43560c43590864211611406576113989261139361130e8673ffffffffffffffffffffffffffffffffffffffff165f52600760205260405f2080549060018201905590565b9860405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff89169b8c604084015273ffffffffffffffffffffffffffffffffffffffff8b1660608401528b608084015260a083015260c082015260c081526111ab60e082610bed565b61238f565b9373ffffffffffffffffffffffffffffffffffffffff8516036113bf57610720935061239e565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff8085166004521660245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461031557604060031936011261031557602061149c611450610468565b73ffffffffffffffffffffffffffffffffffffffff61146d61048b565b91165f526001835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b34610315576020600319360112610315576114be610468565b600b5473ffffffffffffffffffffffffffffffffffffffff811690813303610e5a5773ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff000000000000000000000000000000000000000093169283911617600b557fcd6ba6b7da89e039d53b5d981527a893755342bb9d8e5c2f61f6638f1fb5192b5f80a3005b346103155761155436610c3f565b73ffffffffffffffffffffffffffffffffffffffff600b54163303610e5a57805167ffffffffffffffff8111610be85761159881611593600e546118e8565b611bec565b6020601f82116001146115f757916115e882610d87937fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216955f91610d8c57505f198260011b9260031b1c19161790565b600e556040519182918261035c565b600e5f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915f5b8181106116a25750927fa27234ca678ebcb3cd33e8325c5563cd8d9ff626cc44a58b6ea2bf4b55524216949260019282610d87961061168a575b5050811b01600e556103b8565b8401515f1960f88460031b161c191690555f8061167d565b91926020600181928689015181550194019201611643565b34610315576040600319360112610315576116d3610468565b6024359063ffffffff82168203610315576103c49173ffffffffffffffffffffffffffffffffffffffff61172d92611709611c3c565b50611712611c3c565b50165f52600960205260405f20611727611c3c565b50612a5b565b506040519061173b82610bcc565b5465ffffffffffff8116825260301c602082015260405191829182919091602079ffffffffffffffffffffffffffffffffffffffffffffffffffff81604084019565ffffffffffff8151168552015116910152565b34610315575f60031936011261031557602073ffffffffffffffffffffffffffffffffffffffff600b5416604051908152f35b34610315575f6003193601126103155773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361189357600f5460ff811661186b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117600f5530337f78a953f3f0d92abc078a34e5d4fedf8708e788e1b29300b3d6170e97f88a13fc5f80a3005b7f118fd7b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fce7123f5000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90600182811c9216801561192f575b602083101461190257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916118f7565b600c545f9291611948826118e8565b80825291600181169081156119bc5750600114611963575050565b600c5f9081529293509091907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c75b8383106119a2575060209250010190565b600181602092949394548385870101520191019190611991565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b600e545f9291611a05826118e8565b80825291600181169081156119bc5750600114611a20575050565b600e5f9081529293509091907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd5b838310611a5f575060209250010190565b600181602092949394548385870101520191019190611a4e565b600d545f9291611a88826118e8565b80825291600181169081156119bc5750600114611aa3575050565b600d5f9081529293509091907fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb55b838310611ae2575060209250010190565b600181602092949394548385870101520191019190611ad1565b5f9291815491611b0b836118e8565b8083529260018116908115611b605750600114611b2757505050565b5f9081526020812093945091925b838310611b46575060209250010190565b600181602092949394548385870101520191019190611b35565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b601f8111611ba8575050565b600c5f5260205f20906020601f840160051c83019310611be2575b601f0160051c01905b818110611bd7575050565b5f8155600101611bcc565b9091508190611bc3565b601f8111611bf8575050565b600e5f5260205f20906020601f840160051c83019310611c32575b601f0160051c01905b818110611c27575050565b5f8155600101611c1c565b9091508190611c13565b60405190611c4982610bcc565b5f6020838281520152565b73ffffffffffffffffffffffffffffffffffffffff909291921690815f526001602052611ca28360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b545f198110611cb2575b50505050565b818110611d71578215611d455773ffffffffffffffffffffffffffffffffffffffff841615611d1957611d0f925f526001602052039160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b555f808080611cac565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b92919073ffffffffffffffffffffffffffffffffffffffff8416938415611f2c5773ffffffffffffffffffffffffffffffffffffffff82168015611f0057611e1e8273ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5495848710611eb45784610c3d969703611e558473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b55611e7d8473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b8054860190556040518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602090a3612c93565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff83166004526024879052604485905260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612058575b15611fc0577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261205260c082610bed565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614611f97565b65ffffffffffff6120914361243b565b16808210156120a4575061036d9061243b565b907fecd3f81e000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b905f1982019182116106fe57565b90600182018092116106fe57565b73ffffffffffffffffffffffffffffffffffffffff8116908115611f2c576121348173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5483811061222a579061216c84610c3d959493039173ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090565b5581600254036002555f817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405180602081018782520390a38015612212575b6121be6121b983612a9d565b612c32565b50505f908152600860205260408120549080527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75473ffffffffffffffffffffffffffffffffffffffff9081169116612693565b61222361221e83612a9d565b612bd1565b50506121ad565b7fe450d38c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff909116600452602452604482905260645ffd5b73ffffffffffffffffffffffffffffffffffffffff8181165f81815260086020526040812080548685167fffffffffffffffffffffffff000000000000000000000000000000000000000082168117909255610c3d9694169461231f9390928691907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9080a473ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f205490565b91612693565b8054806123325750505f90565b805f198101116106fe575f19915f5260205f2001015460301c90565b604290612359611f58565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9161036d93916111b8936128c3565b73ffffffffffffffffffffffffffffffffffffffff16908115611d455773ffffffffffffffffffffffffffffffffffffffff8116928315611d19578061242e7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92593855f52600160205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b55604051908152602090a3565b65ffffffffffff81116124535765ffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52603060045260245260445ffd5b811561248d570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b600181111561036d578060017001000000000000000000000000000000008310156125ed575b61259361258961257f61257561256b61256161255061259a9760048a6801000000000000000061259f9c10156125e0575b6401000000008110156125d3575b620100008110156125c6575b6101008110156125b9575b60108110156125ac575b10156125a4575b60030260011c90565b61255a818b612483565b0160011c90565b61255a818a612483565b61255a8189612483565b61255a8188612483565b61255a8187612483565b61255a8186612483565b8093612483565b821190565b900390565b60011b612547565b60041c9160021b91612540565b60081c9160041b91612536565b60101c9160081b9161252b565b60201c9160101b9161251f565b60401c9160201b91612511565b505061259f61259a61259361258961257f61257561256b6125616125506126148a60801c90565b98506801000000000000000097506124e09650505050505050565b91905b83821061263f5750505090565b9091928083169080841860011c82018092116106fe57845f5265ffffffffffff8260205f2001541665ffffffffffff8416105f146126815750925b9190612632565b93925061268d906120e1565b9161267a565b919073ffffffffffffffffffffffffffffffffffffffff81169273ffffffffffffffffffffffffffffffffffffffff8116908482141580612811575b6126db575b5050505050565b8161278e575b5050826126f0575b80806126d4565b61278361276a7fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249361276461275e79ffffffffffffffffffffffffffffffffffffffffffffffffffff9573ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b91612a9d565b90612b71565b6040805192851683529316602082015291829190820190565b0390a25f80806126e9565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff61280761276a6127f87fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249473ffffffffffffffffffffffffffffffffffffffff165f52600960205260405f2090565b61280188612a9d565b90612b0d565b0390a25f806126e1565b508315156126cf565b60ff81146128795760ff811690601f8211612851576040519161283e604084610bed565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060405161036d816105e4816005611afc565b60ff81146128b05760ff811690601f8211612851576040519161283e604084610bed565b5060405161036d816105e4816006611afc565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612952579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612947575f5173ffffffffffffffffffffffffffffffffffffffff81161561293d57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004111561296757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b61299d8161295d565b806129a6575050565b6129af8161295d565b600181036129df577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6129e88161295d565b60028103612a1c57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b80612a2860039261295d565b14612a305750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8054821015612a70575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b79ffffffffffffffffffffffffffffffffffffffffffffffffffff8111612add5779ffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260d060045260245260445ffd5b90612b174361243b565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612b3d85612325565b92169116039079ffffffffffffffffffffffffffffffffffffffffffffffffffff82116106fe57612b6d92612dc5565b9091565b90612b7b4361243b565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612ba185612325565b92169116019079ffffffffffffffffffffffffffffffffffffffffffffffffffff82116106fe57612b6d92612dc5565b612bda4361243b565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612c01600a612325565b921691160179ffffffffffffffffffffffffffffffffffffffffffffffffffff81116106fe57612b6d91600a612dc5565b612c3b4361243b565b9079ffffffffffffffffffffffffffffffffffffffffffffffffffff80612c62600a612325565b921691160379ffffffffffffffffffffffffffffffffffffffffffffffffffff81116106fe57612b6d91600a612dc5565b9073ffffffffffffffffffffffffffffffffffffffff80610c3d949316918215612d1f575b16908115612d0c575b5f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f205416905f52600860205273ffffffffffffffffffffffffffffffffffffffff60405f20541690612693565b612d186121b984612a9d565b5050612cc1565b612d2b61221e85612a9d565b5050612cb8565b805468010000000000000000811015610be857612d5491600182018155612a5b565b612d995781516020929092015160301b7fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001665ffffffffffff92909216919091179055565b7f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b80549293928015612ebb57612ddc612de7916120d3565b825f5260205f200190565b8054603081901c9365ffffffffffff91821692918116808411612e9357879303612e4c5750612e4892509065ffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000083549260301b169116179055565b9190565b915050612e4891612e6c612e5e610c2e565b65ffffffffffff9093168352565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff86166020830152612d32565b7f2520601d000000000000000000000000000000000000000000000000000000005f5260045ffd5b5090612ef391612ecc612e5e610c2e565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff85166020830152612d32565b5f919056c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a7dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724";

// src/utils/chains/monad.ts
import { defineChain } from "viem";
var monad = /* @__PURE__ */ defineChain({
  id: 143,
  name: "Monad",
  blockTime: 400,
  nativeCurrency: {
    name: "MON",
    symbol: "MON",
    decimals: 18
  },
  rpcUrls: {
    default: {
      http: ["TODO"]
    }
  },
  blockExplorers: {
    default: {
      name: "Monad explorer",
      url: "TODO"
    }
  },
  contracts: {},
  testnet: false
});

// src/utils/clankers.ts
var CLANKERS = {
  clanker_v0: {
    abi: Clanker_v0_abi2,
    token: {
      abi: [],
      bytecode: "0x"
    },
    chainId: base.id,
    type: "proxy",
    address: "0x250c9FB2b411B48273f69879007803790A6AeA47",
    related: void 0
  },
  clanker_v1: {
    abi: Clanker_v1_abi,
    token: {
      abi: [],
      bytecode: "0x"
    },
    chainId: base.id,
    type: "clanker",
    address: "0x9B84fcE5Dcd9a38d2D01d5D72373F6b6b067c3e1",
    related: void 0
  },
  clanker_v2: {
    abi: Clanker_v2_abi,
    token: {
      abi: [],
      bytecode: "0x"
    },
    chainId: base.id,
    type: "clanker_v2",
    address: "0x732560fa1d1A76350b1A500155BA978031B53833",
    related: {
      locker: "0x618A9840691334eE8d24445a4AdA4284Bf42417D"
    }
  },
  clanker_v3: {
    abi: Clanker_v3_abi,
    token: {
      abi: [],
      bytecode: "0x"
    },
    chainId: base.id,
    type: "clanker_v3",
    address: "0x375C15db32D28cEcdcAB5C03Ab889bf15cbD2c5E",
    related: {
      locker: "0x5eC4f99F342038c67a312a166Ff56e6D70383D86"
    }
  },
  clanker_v3_1: {
    abi: Clanker_v3_1_abi,
    token: {
      abi: ClankerToken_v3_1_abi,
      bytecode: ClankerToken_v3_1_bytecode
    },
    chainId: base.id,
    type: "clanker_v3_1",
    address: "0x2A787b2362021cC3eEa3C24C4748a6cD5B687382",
    related: {
      locker: "0x33e2Eda238edcF470309b8c6D228986A1204c8f9",
      vault: "0x42A95190B4088C88Dd904d930c79deC1158bF09D"
    }
  },
  clanker_v3_1_monadTestnet: {
    abi: Clanker_v3_1_abi,
    token: {
      abi: ClankerToken_v3_1_monad_abi,
      bytecode: ClankerToken_v3_1_monad_bytecode
    },
    chainId: monadTestnet.id,
    type: "clanker_v3_1",
    address: "0xA0C65813DD1Cde7092922a57548Ec1eD25994318",
    related: {
      locker: "0xcd89C55d36097a64f777066A6cc8F2c31B7541F7",
      vault: "0x9505A57Bf782058890f078bE301575cD75045a9b"
    }
  },
  clanker_v3_1_abstract: {
    abi: Clanker_v3_1_abi,
    token: {
      abi: ClankerToken_v3_1_abstract_abi,
      bytecode: ClankerToken_v3_1_abstract_bytecode
    },
    chainId: abstract.id,
    type: "clanker_v3_1",
    address: "0x043ac6264F5A45c7518DC480b348Da41bdabbac2",
    related: {
      locker: "0xF5eBBd10d2faF7970dBdb9E960639ABCd612c48D",
      vault: "0x858eaD172d10b3E2Fc20F9C80726a2735c7B7a4B"
    }
  },
  clanker_v4: {
    abi: Clanker_v4_abi,
    token: {
      abi: ClankerToken_v4_abi,
      bytecode: ClankerToken_v4_bytecode
    },
    chainId: base.id,
    type: "clanker_v4",
    address: "0xE85A59c628F7d27878ACeB4bf3b35733630083a9",
    related: {
      locker: "0x63D2DfEA64b3433F4071A98665bcD7Ca14d93496",
      vault: "0x8E845EAd15737bF71904A30BdDD3aEE76d6ADF6C",
      airdrop: "0xf652B3610D75D81871bf96DB50825d9af28391E0",
      devbuy: "0x1331f0788F9c08C8F38D52c7a1152250A9dE00be",
      mevModule: "0xFdc013ce003980889cFfd66b0c8329545ae1d1E8",
      mevModuleV2: "0xebB25BB797D82CB78E1bc70406b13233c0854413",
      feeLocker: "0xF3622742b1E446D92e45E22923Ef11C2fcD55D68",
      feeStaticHook: "0xDd5EeaFf7BD481AD55Db083062b13a3cdf0A68CC",
      feeStaticHookV2: "0xb429d62f8f3bFFb98CdB9569533eA23bF0Ba28CC",
      feeDynamicHook: "0x34a45c6B61876d739400Bd71228CbcbD4F53E8cC",
      feeDynamicHookV2: "0xd60D6B218116cFd801E28F78d011a203D2b068Cc",
      presale: "0xeeBbC567C3D612f50a67820f39CDD30dcCF7E6b8",
      presaleAllowlist: "0x789c2452353eee400868E7d3e5aDD6Be0Ef4185D"
    }
  },
  clanker_v4_sepolia: {
    abi: Clanker_v4_abi,
    token: {
      abi: ClankerToken_v4_abi,
      bytecode: ClankerToken_v4_bytecode
    },
    chainId: baseSepolia.id,
    type: "clanker_v4",
    address: "0xE85A59c628F7d27878ACeB4bf3b35733630083a9",
    related: {
      locker: "0x824bB048a5EC6e06a09aEd115E9eEA4618DC2c8f",
      vault: "0xcC80d1226F899a78fC2E459a1500A13C373CE0A5",
      airdrop: "0x5c68F1560a5913c176Fc5238038098970B567B19",
      devbuy: "0x691f97752E91feAcD7933F32a1FEdCeDae7bB59c",
      mevModule: "0x261fE99C4D0D41EE8d0e594D11aec740E8354ab0",
      feeLocker: "0x42A95190B4088C88Dd904d930c79deC1158bF09D",
      feeStaticHook: "0xDFcCcfBeef7F3Fc8b16027Ce6feACb48024068cC",
      feeStaticHookV2: "0x11b51DBC2f7F683b81CeDa83DC0078D57bA328cc",
      feeDynamicHook: "0xE63b0A59100698f379F9B577441A561bAF9828cc",
      feeDynamicHookV2: "0xBF4983dC0f2F8FE78C5cf8Fc621f294A993728Cc"
    }
  },
  clanker_v4_arbitrum: {
    abi: Clanker_v4_abi,
    token: {
      abi: ClankerToken_v4_abi,
      bytecode: ClankerToken_v4_bytecode
    },
    chainId: arbitrum.id,
    type: "clanker_v4",
    address: "0xEb9D2A726Edffc887a574dC7f46b3a3638E8E44f",
    related: {
      locker: "0xF3622742b1E446D92e45E22923Ef11C2fcD55D68",
      vault: "0xa1da0600Eb4A9F3D4a892feAa2c2caf80A4A2f14",
      airdrop: "0x8Cb6e0216e98A7ACF622DC2dD6a39F1b4FF37014",
      devbuy: "0x70aDdc06fE89a5cF9E533aea8D025dB06795e492",
      mevModule: "0x4E35277306a83D00E13e8C8A4307C672FA31FC99",
      feeLocker: "0x92C0DCbAba17b0F5f3a7537dA82c0F80520e4dF6",
      feeStaticHook: "0xf7aC669593d2D9D01026Fa5B756DD5B4f7aAa8Cc",
      feeDynamicHook: "0xFd213BE7883db36e1049dC42f5BD6A0ec66B68cC"
    }
  },
  clanker_v4_mainnet: {
    abi: Clanker_v4_abi,
    token: {
      abi: ClankerToken_v4_mainnet_abi,
      bytecode: ClankerToken_v4_mainnet_bytecode
    },
    chainId: mainnet.id,
    type: "clanker_v4",
    address: "0x6C8599779B03B00AAaE63C6378830919Abb75473",
    related: {
      locker: "0x00C4b21889145CF0D99f2e05919103e0c3991974",
      vault: "0xa1da0600Eb4A9F3D4a892feAa2c2caf80A4A2f14",
      airdrop: "0x303470b6b6a35B06A5A05763A7caD776fbf27B71",
      devbuy: "0x70aDdc06fE89a5cF9E533aea8D025dB06795e492",
      mevModule: "0x33e2Eda238edcF470309b8c6D228986A1204c8f9",
      mevModuleV2: "0x33e2Eda238edcF470309b8c6D228986A1204c8f9",
      feeLocker: "0xA9C0a423f0092176fC48d7B50a1fCae8cf5BB441",
      feeStaticHook: "0x6C24D0bCC264EF6A740754A11cA579b9d225e8Cc",
      feeStaticHookV2: "0x6C24D0bCC264EF6A740754A11cA579b9d225e8Cc",
      feeDynamicHook: "0x0000000000000000000000000000000000000000",
      feeDynamicHookV2: "0x0000000000000000000000000000000000000000",
      presale: "0xf7db81910444ab0f07bA264d7636d219A8c7769D",
      presaleAllowlist: "0xF6C7Ff92F71e2eDd19c421E4962949Df4cD6b6F3"
    }
  },
  clanker_v4_unichain: {
    abi: Clanker_v4_abi,
    token: {
      abi: ClankerToken_v4_abi,
      bytecode: ClankerToken_v4_bytecode
    },
    chainId: unichain.id,
    type: "clanker_v4",
    address: "0xE85A59c628F7d27878ACeB4bf3b35733630083a9",
    related: {
      locker: "0x691f97752E91feAcD7933F32a1FEdCeDae7bB59c",
      vault: "0xA9C0a423f0092176fC48d7B50a1fCae8cf5BB441",
      airdrop: "0xE143f9872A33c955F23cF442BB4B1EFB3A7402A2",
      devbuy: "0x267259e36914839Eb584e962558563760AE28862",
      mevModule: "0x42A95190B4088C88Dd904d930c79deC1158bF09D",
      feeLocker: "0x1d5A0F0BD3eA07F78FC14577f053de7A3FEc35B2",
      feeStaticHook: "0xBc6e5aBDa425309c2534Bc2bC92562F5419ce8Cc",
      feeDynamicHook: "0x9b37A43422D7bBD4C8B231be11E50AD1acE828CC"
    }
  },
  clanker_v4_monad: {
    abi: Clanker_v4_abi,
    token: {
      abi: ClankerToken_v4_abi,
      bytecode: ClankerToken_v4_monad_bytecode
    },
    chainId: monad.id,
    type: "clanker_v4",
    address: "0xF9a0C289Eab6B571c6247094a853810987E5B26D",
    related: {
      locker: "0xDe51a86D3b6EC9ac4756115D3744335Aa2c30144",
      vault: "0xe7D402A5BEd94E5c49Ac0639E80f784D06E2D397",
      airdrop: "0x654E7221fa51d4359ded21D524E3AfF18e93A507",
      devbuy: "0x8790d79283eB941c719b616CfD0Ef116D13C7683",
      mevModule: "0x0000000000000000000000000000000000000000",
      mevModuleV2: "0x3231D1ddfdC4Ad585cF1939FfEcd9c88b338Dbf2",
      feeLocker: "0x46B77BaCFd712D79131F1AD7611794869483C353",
      feeStaticHook: "0x0000000000000000000000000000000000000000",
      feeStaticHookV2: "0x94F802a9EFE4dd542FdBd77a25D9e69A6dC828Cc",
      feeDynamicHook: "0x0000000000000000000000000000000000000000"
    }
  }
};
var Chains = [...new Set(Object.values(CLANKERS).map(({ chainId }) => chainId))];
var ClankerDeployments = Object.values(CLANKERS).reduce(
  (agg, cur) => {
    if (!agg[cur.chainId]) agg[cur.chainId] = {};
    agg[cur.chainId][cur.type] = cur;
    return agg;
  },
  {}
);
var clankerConfigFor = (chainId, type) => {
  return Object.values(CLANKERS).find((cfg) => cfg.chainId === chainId && cfg.type === type);
};

// src/utils/errors.ts
import { BaseError, ContractFunctionRevertedError, InsufficientFundsError } from "viem";
var ClankerError = class _ClankerError extends Error {
  constructor(error, data) {
    super(data.label);
    this.error = error;
    this.data = data;
  }
  static unknown(e, name) {
    return new _ClankerError(e, {
      type: "unknown",
      label: "Something went wrong",
      rawName: name || "unknown"
    });
  }
};
var SignatureToError = {
  "0x7e5ba1ad": {
    type: "state",
    label: "Hook not enabled.",
    rawName: "HookNotEnabled"
  },
  "0x8b063d73": {
    type: "state",
    label: "Too little received (likely dev buy).",
    rawName: "V4TooLittleReceived"
  }
};
var ErrorMapping = {
  NoFeesToClaim: {
    type: "state",
    label: "No fees to claim",
    rawName: "NoFeesToClaim"
  },
  InvalidVaultConfiguration: {
    type: "caller",
    label: "Invalid vault configuration",
    rawName: "InvalidVault"
  },
  BaseFeeTooLow: {
    type: "caller",
    label: "Base fee is set too low",
    rawName: "BaseFeeTooLow"
  }
};
var understandError = (e) => {
  if (!(e instanceof Error)) return ClankerError.unknown(new Error(`${e}`));
  if (!(e instanceof BaseError)) return ClankerError.unknown(e);
  const revertError = e.walk((e2) => e2 instanceof ContractFunctionRevertedError);
  if (revertError instanceof ContractFunctionRevertedError) {
    const errorName = revertError.data?.errorName ?? "";
    const mapping = ErrorMapping[errorName];
    if (mapping) return new ClankerError(e, mapping);
    const signatureToError = SignatureToError[revertError.signature || "0x"];
    if (signatureToError) return new ClankerError(e, signatureToError);
    return ClankerError.unknown(e, errorName);
  }
  const fundsError = e.walk((e2) => e2 instanceof InsufficientFundsError);
  if (fundsError instanceof InsufficientFundsError) {
    return new ClankerError(fundsError, {
      type: "caller",
      label: "Insufficient funds.",
      rawName: "InsufficientFundsError"
    });
  }
  return ClankerError.unknown(e);
};

// src/legacyFeeClaims/claimCreatorFees.ts
import { simulateContract, writeContract } from "viem/actions";
var BASE_CHAIN_ID = 8453;
var LEGACY_FACTORIES = {
  0: "0x250c9FB2b411B48273f69879007803790A6AeA47",
  1: "0x9B84fcE5Dcd9a38d2D01d5D72373F6b6b067c3e1",
  2: "0x732560fa1d1A76350b1A500155BA978031B53833",
  3: "0x375C15db32D28cEcdcAB5C03Ab889bf15cbD2c5E",
  3.1: "0x2A787b2362021cC3eEa3C24C4748a6cD5B687382"
};
var ClaimRewardsAbi = [
  {
    type: "function",
    name: "claimRewards",
    stateMutability: "nonpayable",
    inputs: [{ name: "token", type: "address" }],
    outputs: []
  }
];
var LockerCollectFeesAbi = [
  {
    type: "function",
    name: "collectFees",
    stateMutability: "nonpayable",
    inputs: [
      { name: "_recipient", type: "address" },
      { name: "_tokenId", type: "uint256" }
    ],
    outputs: []
  }
];
var MetaLockerCollectFeesAbi = [
  {
    type: "function",
    name: "collectFees",
    stateMutability: "nonpayable",
    inputs: [{ name: "_tokenId", type: "uint256" }],
    outputs: []
  }
];
var LegacyCreatorFees = class {
  wallet;
  publicClient;
  constructor(config) {
    this.wallet = config?.wallet;
    this.publicClient = config?.publicClient;
  }
  assertBase() {
    const chainId = this.publicClient?.chain?.id ?? this.wallet?.chain?.id;
    if (chainId && chainId !== BASE_CHAIN_ID) {
      throw new Error(
        `Legacy fee claiming is only supported on Base (chainId 8453). Got ${chainId}`
      );
    }
  }
  /**
   * Get a transaction config for claiming legacy creator fees.
   *
   * @param input Token address, version, and locker params (for v0/v1)
   * @returns Transaction config
   */
  getClaimLegacyCreatorFeesTransaction(input) {
    this.assertBase();
    return getClaimLegacyCreatorFeesTransaction(input);
  }
  /**
   * Get a transaction config for claiming via meta-locker (some v0 tokens).
   *
   * @param locker The locker contract address
   * @param positionId The Uniswap V3 position NFT ID
   * @returns Transaction config
   */
  getMetaLockerClaimTransaction(locker, positionId) {
    this.assertBase();
    return {
      address: locker,
      abi: MetaLockerCollectFeesAbi,
      functionName: "collectFees",
      args: [positionId]
    };
  }
  /**
   * Simulate claiming legacy creator fees.
   *
   * @param input Token address, version, and locker params (for v0/v1)
   * @param account Optional account to simulate from
   * @returns Simulation result or error
   */
  async claimLegacyCreatorFeesSimulate(input, account) {
    const acc = account ?? this.wallet?.account;
    if (!acc) throw new Error("Account or wallet client required for simulation");
    if (!this.publicClient) throw new Error("Public client required");
    const tx = this.getClaimLegacyCreatorFeesTransaction(input);
    try {
      return await simulateContract(this.publicClient, {
        ...tx,
        account: acc
        // biome-ignore lint/suspicious/noExplicitAny: viem generics are complex
      });
    } catch (e) {
      return { error: understandError(e) };
    }
  }
  /**
   * Claim legacy creator fees.
   *
   * @param input Token address, version, and locker params (for v0/v1)
   * @returns Transaction hash or error
   */
  async claimLegacyCreatorFees(input) {
    if (!this.wallet) throw new Error("Wallet client required");
    if (!this.publicClient) throw new Error("Public client required");
    const tx = this.getClaimLegacyCreatorFeesTransaction(input);
    try {
      const txHash = await writeContract(this.wallet, {
        ...tx
        // biome-ignore lint/suspicious/noExplicitAny: viem generics are complex
      });
      return { txHash, error: void 0 };
    } catch (e) {
      return { txHash: void 0, error: understandError(e) };
    }
  }
};
function getClaimLegacyCreatorFeesTransaction(input) {
  const { token, version } = input;
  if (version === 2 || version === 3 || version === 3.1) {
    const factory = LEGACY_FACTORIES[version];
    return {
      address: factory,
      abi: ClaimRewardsAbi,
      functionName: "claimRewards",
      args: [token]
    };
  }
  if (!("lockerParams" in input)) {
    throw new Error(
      "v0/v1 tokens require lockerParams (locker, positionId, recipient). These can be found in the TokenCreated event from when the token was deployed."
    );
  }
  const { locker, positionId, recipient } = input.lockerParams;
  return {
    address: locker,
    abi: LockerCollectFeesAbi,
    functionName: "collectFees",
    args: [recipient, positionId]
  };
}

// src/legacyFeeClaims/index.ts
var BASE_CHAIN_ID2 = 8453;
var MAX_UINT128 = (1n << 128n) - 1n;
var UNISWAP_V3_BASE = {
  factory: "0x33128a8fC17869897dcE68Ed026d694621f6FDfD",
  nonfungiblePositionManager: "0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1",
  weth: "0x4200000000000000000000000000000000000006"
};
var CLANKER_FACTORIES_BASE = {
  clanker_v0: "0x250c9FB2b411B48273f69879007803790A6AeA47",
  clanker_v1: "0x9B84fcE5Dcd9a38d2D01d5D72373F6b6b067c3e1",
  clanker_v2: "0x732560fa1d1A76350b1A500155BA978031B53833",
  clanker_v3: "0x375C15db32D28cEcdcAB5C03Ab889bf15cbD2c5E",
  clanker_v3_presale: "0x71cDc0bDF30F5601fb0ac80Cf1d20B771342C035",
  clanker_v3_1: "0x2A787b2362021cC3eEa3C24C4748a6cD5B687382"
};
var ClankerClaimRewardsAbi = [
  {
    type: "function",
    name: "claimRewards",
    stateMutability: "nonpayable",
    inputs: [{ name: "token", type: "address" }],
    outputs: []
  }
];
var LockerCollectFeesAbi2 = [
  {
    type: "function",
    name: "collectFees",
    stateMutability: "nonpayable",
    inputs: [
      { name: "_recipient", type: "address" },
      { name: "_tokenId", type: "uint256" }
    ],
    outputs: []
  }
];
var MetaLockerCollectFeesAbi2 = [
  {
    type: "function",
    name: "collectFees",
    stateMutability: "nonpayable",
    inputs: [{ name: "_tokenId", type: "uint256" }],
    outputs: []
  }
];
var ClankerTokenDeployerAbi = [
  {
    type: "function",
    name: "deployer",
    stateMutability: "view",
    inputs: [],
    outputs: [{ name: "", type: "address" }]
  }
];
var NonfungiblePositionManagerOwnerOfAbi = [
  {
    type: "function",
    name: "ownerOf",
    stateMutability: "view",
    inputs: [{ name: "tokenId", type: "uint256" }],
    outputs: [{ name: "", type: "address" }]
  }
];
var NonfungiblePositionManagerPositionsAbi = [
  {
    type: "function",
    name: "positions",
    stateMutability: "view",
    inputs: [{ name: "tokenId", type: "uint256" }],
    outputs: [
      { name: "nonce", type: "uint96" },
      { name: "operator", type: "address" },
      { name: "token0", type: "address" },
      { name: "token1", type: "address" },
      { name: "fee", type: "uint24" },
      { name: "tickLower", type: "int24" },
      { name: "tickUpper", type: "int24" },
      { name: "liquidity", type: "uint128" },
      { name: "feeGrowthInside0LastX128", type: "uint256" },
      { name: "feeGrowthInside1LastX128", type: "uint256" },
      { name: "tokensOwed0", type: "uint128" },
      { name: "tokensOwed1", type: "uint128" }
    ]
  }
];
var NonfungiblePositionManagerCollectAbi = [
  {
    type: "function",
    name: "collect",
    stateMutability: "payable",
    inputs: [
      {
        name: "params",
        type: "tuple",
        components: [
          { name: "tokenId", type: "uint256" },
          { name: "recipient", type: "address" },
          { name: "amount0Max", type: "uint128" },
          { name: "amount1Max", type: "uint128" }
        ]
      }
    ],
    outputs: [
      { name: "amount0", type: "uint256" },
      { name: "amount1", type: "uint256" }
    ]
  }
];
var FACTORY_CLAIM_TYPES = /* @__PURE__ */ new Set(["clanker_v2", "clanker_v3", "clanker_v3_1"]);
var isSelectorMismatchError = (error) => {
  const err = error;
  if (err?.name === "FunctionSelectorNotFoundError" || err?.cause?.name === "FunctionSelectorNotFoundError") {
    return true;
  }
  if (err?.name === "AbiFunctionNotFoundError" || err?.cause?.name === "AbiFunctionNotFoundError") {
    return true;
  }
  const message = error instanceof Error ? error.message : `${error}`;
  return message.includes("Function selector") || message.includes("function selector") || message.includes("not found");
};
var LEGACY_FEE_CLAIMS_ADDRESS = "0x10F4485d6f90239B72c6A5eaD2F2320993D285E4";
var LegacyFeeClaims = class {
  wallet;
  publicClient;
  constructor(config) {
    this.wallet = config?.wallet;
    this.publicClient = config?.publicClient;
  }
  assertBaseChain(chainId) {
    if (chainId !== BASE_CHAIN_ID2) {
      throw new Error("Legacy fee claiming is only supported on Base (chainId 8453).");
    }
  }
  /**
   * Build a Base-only transaction for claiming legacy fees (v0-v3.1).
   *
   * @param args Claim arguments
   * @returns Transaction object with { kind, to, data, value? }
   */
  async getClaimLegacyFeesTransaction(args) {
    const { chainId, token, tokenType, factory, locker, positionId, recipient, walletAddress } = args;
    this.assertBaseChain(chainId);
    const shouldUseFactory = Boolean(factory) || (tokenType ? FACTORY_CLAIM_TYPES.has(tokenType) : false);
    if (shouldUseFactory) {
      const factoryAddress = factory ?? clankerConfigFor(chainId, tokenType || "clanker_v3_1")?.address;
      if (!factoryAddress) {
        throw new Error("Missing factory address for v2\u2013v3.1 claimRewards path");
      }
      return {
        kind: "factory.claimRewards",
        to: factoryAddress,
        data: encodeFunctionData({
          abi: ClankerClaimRewardsAbi,
          functionName: "claimRewards",
          args: [token]
        })
      };
    }
    if (!locker) throw new Error("Missing locker address for v0\u2013v1 claim path");
    if (positionId == null) throw new Error("Missing positionId for v0\u2013v1 claim path");
    if (tokenType === "clanker" && walletAddress) {
      if (!this.publicClient) throw new Error("Public client required to verify token deployer");
      const deployer = await this.publicClient.readContract({
        address: token,
        abi: ClankerTokenDeployerAbi,
        functionName: "deployer",
        args: []
      });
      if (!isAddressEqual(deployer, walletAddress)) {
        throw new Error(
          `v1 legacy claim must be sent by token deployer. Expected ${deployer}, got ${walletAddress}`
        );
      }
    }
    if (!this.publicClient) {
      throw new Error("Public client required to probe legacy locker ABI");
    }
    if (recipient) {
      try {
        await this.publicClient.simulateContract({
          address: locker,
          abi: LockerCollectFeesAbi2,
          functionName: "collectFees",
          args: [recipient, positionId],
          account: walletAddress ?? recipient
        });
        return {
          kind: "locker.collectFees",
          to: locker,
          data: encodeFunctionData({
            abi: LockerCollectFeesAbi2,
            functionName: "collectFees",
            args: [recipient, positionId]
          })
        };
      } catch (error) {
        if (!isSelectorMismatchError(error)) {
          return {
            kind: "locker.collectFees",
            to: locker,
            data: encodeFunctionData({
              abi: LockerCollectFeesAbi2,
              functionName: "collectFees",
              args: [recipient, positionId]
            })
          };
        }
      }
      await this.publicClient.simulateContract({
        address: locker,
        abi: MetaLockerCollectFeesAbi2,
        functionName: "collectFees",
        args: [positionId],
        account: walletAddress ?? recipient
      });
      return {
        kind: "metaLocker.collectFees",
        to: locker,
        data: encodeFunctionData({
          abi: MetaLockerCollectFeesAbi2,
          functionName: "collectFees",
          args: [positionId]
        })
      };
    }
    try {
      await this.publicClient.simulateContract({
        address: locker,
        abi: MetaLockerCollectFeesAbi2,
        functionName: "collectFees",
        args: [positionId],
        account: walletAddress
      });
    } catch {
      throw new Error(
        "Unable to determine locker ABI. Provide `recipient` (Locker) or ensure this locker supports meta-locker collectFees(tokenId)."
      );
    }
    return {
      kind: "metaLocker.collectFees",
      to: locker,
      data: encodeFunctionData({
        abi: MetaLockerCollectFeesAbi2,
        functionName: "collectFees",
        args: [positionId]
      })
    };
  }
  /**
   * Estimate claimable Uniswap v3 LP fees for a legacy position on Base.
   *
   * @param opts Options with chainId and positionId
   * @returns Claimable fees with position owner, token0, token1, amount0, amount1
   */
  async getLegacyClaimableFees(opts) {
    const { chainId, positionId } = opts;
    this.assertBaseChain(chainId);
    if (!this.publicClient) throw new Error("Public client required");
    const positionManagerAddress = UNISWAP_V3_BASE.nonfungiblePositionManager;
    const positionOwner = await this.publicClient.readContract({
      address: positionManagerAddress,
      abi: NonfungiblePositionManagerOwnerOfAbi,
      functionName: "ownerOf",
      args: [positionId]
    });
    const position = await this.publicClient.readContract({
      address: positionManagerAddress,
      abi: NonfungiblePositionManagerPositionsAbi,
      functionName: "positions",
      args: [positionId]
    });
    const token0 = position[2];
    const token1 = position[3];
    const { result } = await this.publicClient.simulateContract({
      address: positionManagerAddress,
      abi: NonfungiblePositionManagerCollectAbi,
      functionName: "collect",
      args: [
        {
          tokenId: positionId,
          recipient: positionOwner,
          amount0Max: MAX_UINT128,
          amount1Max: MAX_UINT128
        }
      ],
      account: positionOwner
    });
    const [amount0, amount1] = result;
    return { positionOwner, token0, token1, amount0, amount1 };
  }
  /**
   * Get an abi-typed transaction for initializing token creator ownership.
   *
   * This must be called once per token by the original creator to claim ownership
   * of the token's fees. During this call, the creator can optionally set a different
   * admin key to manage the token's rewards.
   *
   * @param token The token address to initialize a creator for
   * @param newCreator The address to set as the creator for this token (can be different from msg.sender)
   * @param proof The Merkle proof demonstrating msg.sender is authorized for this token
   * @returns Abi transaction config
   */
  getInitializeTokenCreatorTransaction({
    token,
    newCreator,
    proof
  }) {
    return {
      address: LEGACY_FEE_CLAIMS_ADDRESS,
      abi: Clanker_v0_abi,
      functionName: "initializeTokenCreator",
      args: [token, newCreator, proof]
    };
  }
  /**
   * Simulate initializing token creator ownership.
   *
   * @param token The token address to initialize a creator for
   * @param newCreator The address to set as the creator for this token
   * @param proof The Merkle proof demonstrating msg.sender is authorized for this token
   * @param account Optional account to simulate calling for
   * @returns The simulated output
   */
  async initializeTokenCreatorSimulate({
    token,
    newCreator,
    proof
  }, account) {
    const acc = account || this.wallet?.account;
    if (!acc) throw new Error("Account or wallet client required for simulation");
    if (!this.publicClient) throw new Error("Public client required");
    try {
      return await simulateContract2(this.publicClient, {
        address: LEGACY_FEE_CLAIMS_ADDRESS,
        abi: Clanker_v0_abi,
        functionName: "initializeTokenCreator",
        args: [token, newCreator, proof],
        account: acc
      });
    } catch (e) {
      return { error: understandError(e) };
    }
  }
  /**
   * Initialize token creator ownership to enable fee claims.
   *
   * This must be called once per token by the original creator. The proof must be
   * obtained from the Clanker team or frontend. During initialization, you can
   * optionally set a different admin address to manage future claims.
   *
   * @param token The token address to initialize a creator for
   * @param newCreator The address to set as the creator for this token (can be different from msg.sender)
   * @param proof The Merkle proof demonstrating msg.sender is authorized for this token
   * @returns Transaction hash or error
   */
  async initializeTokenCreator({
    token,
    newCreator,
    proof
  }) {
    if (!this.wallet) throw new Error("Wallet client required");
    if (!this.publicClient) throw new Error("Public client required");
    try {
      const txHash = await writeContract2(this.wallet, {
        address: LEGACY_FEE_CLAIMS_ADDRESS,
        abi: Clanker_v0_abi,
        functionName: "initializeTokenCreator",
        args: [token, newCreator, proof]
      });
      return { txHash, error: void 0 };
    } catch (e) {
      console.error(JSON.stringify(e, null, 2));
      return { txHash: void 0, error: understandError(e) };
    }
  }
  /**
   * Get an abi-typed transaction for updating the token creator admin address.
   *
   * This allows the current creator to change the address that can trigger claims.
   * Only callable by the current creator address for the specified token.
   *
   * @param token The token address to update the creator for
   * @param newCreator The new creator/admin address
   * @returns Abi transaction config
   */
  getUpdateTokenCreatorTransaction({
    token,
    newCreator
  }) {
    return {
      address: LEGACY_FEE_CLAIMS_ADDRESS,
      abi: Clanker_v0_abi,
      functionName: "updateTokenCreator",
      args: [token, newCreator]
    };
  }
  /**
   * Simulate updating the token creator admin address.
   *
   * @param token The token address to update the creator for
   * @param newCreator The new creator/admin address
   * @param account Optional account to simulate calling for
   * @returns The simulated output
   */
  async updateTokenCreatorSimulate({
    token,
    newCreator
  }, account) {
    const acc = account || this.wallet?.account;
    if (!acc) throw new Error("Account or wallet client required for simulation");
    if (!this.publicClient) throw new Error("Public client required");
    try {
      return await simulateContract2(this.publicClient, {
        address: LEGACY_FEE_CLAIMS_ADDRESS,
        abi: Clanker_v0_abi,
        functionName: "updateTokenCreator",
        args: [token, newCreator],
        account: acc
      });
    } catch (e) {
      return { error: understandError(e) };
    }
  }
  /**
   * Update the token creator admin address.
   *
   * This allows you to change which address can trigger fee claims for your token.
   * Only callable by the current creator address.
   *
   * @param token The token address to update the creator for
   * @param newCreator The new creator/admin address
   * @returns Transaction hash or error
   */
  async updateTokenCreator({
    token,
    newCreator
  }) {
    if (!this.wallet) throw new Error("Wallet client required");
    if (!this.publicClient) throw new Error("Public client required");
    try {
      const txHash = await writeContract2(this.wallet, {
        address: LEGACY_FEE_CLAIMS_ADDRESS,
        abi: Clanker_v0_abi,
        functionName: "updateTokenCreator",
        args: [token, newCreator]
      });
      return { txHash, error: void 0 };
    } catch (e) {
      return { txHash: void 0, error: understandError(e) };
    }
  }
  /**
   * Get an abi-typed transaction for claiming token creator fees.
   *
   * This allows the authorized creator to transfer all accumulated fees from the
   * Safe wallet to any recipient address. Only callable by the authorized creator
   * for the specified token.
   *
   * @param safe The Safe wallet address holding the fees
   * @param token The ERC20 token address to transfer
   * @param recipient The address to receive the fees
   * @returns Abi transaction config
   */
  getTokenCreatorTransferTransaction({
    safe,
    token,
    recipient
  }) {
    return {
      address: LEGACY_FEE_CLAIMS_ADDRESS,
      abi: Clanker_v0_abi,
      functionName: "tokenCreatorTransfer",
      args: [safe, token, recipient]
    };
  }
  /**
   * Simulate claiming token creator fees.
   *
   * @param safe The Safe wallet address holding the fees
   * @param token The ERC20 token address to transfer
   * @param recipient The address to receive the fees
   * @param account Optional account to simulate calling for
   * @returns The simulated output
   */
  async tokenCreatorTransferSimulate({
    safe,
    token,
    recipient
  }, account) {
    const acc = account || this.wallet?.account;
    if (!acc) throw new Error("Account or wallet client required for simulation");
    if (!this.publicClient) throw new Error("Public client required");
    try {
      return await simulateContract2(this.publicClient, {
        address: LEGACY_FEE_CLAIMS_ADDRESS,
        abi: Clanker_v0_abi,
        functionName: "tokenCreatorTransfer",
        args: [safe, token, recipient],
        account: acc
      });
    } catch (e) {
      return { error: understandError(e) };
    }
  }
  /**
   * Claim token creator fees by transferring them from the Safe to a recipient.
   *
   * This transfers all accumulated fees for your token to the specified recipient.
   * Only callable by the authorized creator address for the token.
   *
   * Note: Not all Clanker tokens can be sent to the zero address. If you get an error,
   * consider sending to 0x000000000000000000000000000000000000dEaD instead.
   *
   * @param safe The Safe wallet address holding the fees
   * @param token The ERC20 token address to transfer
   * @param recipient The address to receive the fees
   * @returns Transaction hash or error
   */
  async tokenCreatorTransfer({
    safe,
    token,
    recipient
  }) {
    if (!this.wallet) throw new Error("Wallet client required");
    if (!this.publicClient) throw new Error("Public client required");
    try {
      const txHash = await writeContract2(this.wallet, {
        address: LEGACY_FEE_CLAIMS_ADDRESS,
        abi: Clanker_v0_abi,
        functionName: "tokenCreatorTransfer",
        args: [safe, token, recipient]
      });
      return { txHash, error: void 0 };
    } catch (e) {
      return { txHash: void 0, error: understandError(e) };
    }
  }
  /**
   * Get the stored creator address for a token.
   *
   * Returns the address that is authorized to claim fees for this token.
   * Returns zero address if the token creator has not been initialized yet.
   *
   * @param token The token address to check
   * @returns The creator address for the token
   */
  async getTokenCreator({ token }) {
    if (!this.publicClient) throw new Error("Public client required");
    return this.publicClient.readContract({
      address: LEGACY_FEE_CLAIMS_ADDRESS,
      abi: Clanker_v0_abi,
      functionName: "tokenCreator",
      args: [token]
    });
  }
  /**
   * Get the current Merkle root used for verifying token creator proofs.
   *
   * This is used internally by the contract to verify initialization proofs.
   *
   * @returns The current token creator Merkle root
   */
  async getTokenCreatorRoot() {
    if (!this.publicClient) throw new Error("Public client required");
    return this.publicClient.readContract({
      address: LEGACY_FEE_CLAIMS_ADDRESS,
      abi: Clanker_v0_abi,
      functionName: "tokenCreatorRoot",
      args: []
    });
  }
};
function getTokenCreatorMerkleProof(entries, targetToken) {
  const normalizedTarget = targetToken.toLowerCase();
  const targetIndex = entries.findIndex((e) => e.tokenAddress.toLowerCase() === normalizedTarget);
  if (targetIndex === -1) {
    return null;
  }
  const targetEntry = entries[targetIndex];
  const values = entries.map((e) => [e.tokenAddress, e.currentCreator]);
  const tree = StandardMerkleTree.of(values, ["address", "address"]);
  const proof = tree.getProof(targetIndex);
  const leafHash = tree.leafHash([
    targetEntry.tokenAddress,
    targetEntry.currentCreator
  ]);
  return {
    tokenAddress: targetEntry.tokenAddress,
    currentCreator: targetEntry.currentCreator,
    proof,
    leafHash,
    root: tree.root,
    index: targetIndex
  };
}
function parseTokenCreatorCSV(csvContent) {
  const lines = csvContent.trim().split("\n");
  const dataLines = lines.slice(1);
  return dataLines.map((line) => {
    const [tokenAddress, currentCreator] = line.split(",").map((s) => s.trim());
    return {
      tokenAddress,
      currentCreator
    };
  });
}
var EXPECTED_MERKLE_ROOT = "0xa7dcc91a2136ef1b3c708dbab901cbeb075f6df5cf5987494fedc340c57f7025";
function getInitializeTokenCreatorTransaction({
  token,
  newCreator,
  proof
}) {
  return {
    address: LEGACY_FEE_CLAIMS_ADDRESS,
    abi: Clanker_v0_abi,
    functionName: "initializeTokenCreator",
    args: [token, newCreator, proof]
  };
}
function getUpdateTokenCreatorTransaction({
  token,
  newCreator
}) {
  return {
    address: LEGACY_FEE_CLAIMS_ADDRESS,
    abi: Clanker_v0_abi,
    functionName: "updateTokenCreator",
    args: [token, newCreator]
  };
}
function getTokenCreatorTransferTransaction({
  safe,
  token,
  recipient
}) {
  return {
    address: LEGACY_FEE_CLAIMS_ADDRESS,
    abi: Clanker_v0_abi,
    functionName: "tokenCreatorTransfer",
    args: [safe, token, recipient]
  };
}
async function getClaimLegacyFeesTransaction(publicClient, args) {
  const { chainId, token, tokenType, factory, locker, positionId, recipient, walletAddress } = args;
  if (chainId !== BASE_CHAIN_ID2) {
    throw new Error("Base-only: expected chainId=8453");
  }
  const shouldUseFactory = Boolean(factory) || (tokenType ? FACTORY_CLAIM_TYPES.has(tokenType) : false);
  if (shouldUseFactory) {
    const factoryAddress = factory ?? clankerConfigFor(chainId, tokenType || "clanker_v3_1")?.address;
    if (!factoryAddress) {
      throw new Error("Missing factory address for v2\u2013v3.1 claimRewards path");
    }
    return {
      kind: "factory.claimRewards",
      to: factoryAddress,
      data: encodeFunctionData({
        abi: ClankerClaimRewardsAbi,
        functionName: "claimRewards",
        args: [token]
      })
    };
  }
  if (!locker) throw new Error("Missing locker address for v0\u2013v1 claim path");
  if (positionId == null) throw new Error("Missing positionId for v0\u2013v1 claim path");
  if (tokenType === "clanker" && walletAddress) {
    const deployer = await publicClient.readContract({
      address: token,
      abi: ClankerTokenDeployerAbi,
      functionName: "deployer"
    });
    if (!isAddressEqual(deployer, walletAddress)) {
      throw new Error(
        `v1 legacy claim must be sent by token deployer. Expected ${deployer}, got ${walletAddress}`
      );
    }
  }
  if (recipient) {
    try {
      await publicClient.simulateContract({
        address: locker,
        abi: LockerCollectFeesAbi2,
        functionName: "collectFees",
        args: [recipient, positionId],
        account: walletAddress ?? recipient
      });
      return {
        kind: "locker.collectFees",
        to: locker,
        data: encodeFunctionData({
          abi: LockerCollectFeesAbi2,
          functionName: "collectFees",
          args: [recipient, positionId]
        })
      };
    } catch (error) {
      if (!isSelectorMismatchError(error)) {
        return {
          kind: "locker.collectFees",
          to: locker,
          data: encodeFunctionData({
            abi: LockerCollectFeesAbi2,
            functionName: "collectFees",
            args: [recipient, positionId]
          })
        };
      }
    }
    await publicClient.simulateContract({
      address: locker,
      abi: MetaLockerCollectFeesAbi2,
      functionName: "collectFees",
      args: [positionId],
      account: walletAddress ?? recipient
    });
    return {
      kind: "metaLocker.collectFees",
      to: locker,
      data: encodeFunctionData({
        abi: MetaLockerCollectFeesAbi2,
        functionName: "collectFees",
        args: [positionId]
      })
    };
  }
  try {
    await publicClient.simulateContract({
      address: locker,
      abi: MetaLockerCollectFeesAbi2,
      functionName: "collectFees",
      args: [positionId],
      account: walletAddress
    });
  } catch {
    throw new Error(
      "Unable to determine locker ABI. Provide `recipient` (Locker) or ensure this locker supports meta-locker collectFees(tokenId)."
    );
  }
  return {
    kind: "metaLocker.collectFees",
    to: locker,
    data: encodeFunctionData({
      abi: MetaLockerCollectFeesAbi2,
      functionName: "collectFees",
      args: [positionId]
    })
  };
}
async function getLegacyClaimableFees(publicClient, opts) {
  const { chainId, positionId } = opts;
  if (chainId !== BASE_CHAIN_ID2) {
    throw new Error("Base-only: expected chainId=8453");
  }
  const positionManagerAddress = UNISWAP_V3_BASE.nonfungiblePositionManager;
  const positionOwner = await publicClient.readContract({
    address: positionManagerAddress,
    abi: NonfungiblePositionManagerOwnerOfAbi,
    functionName: "ownerOf",
    args: [positionId]
  });
  const [position, sim] = await Promise.all([
    publicClient.readContract({
      address: positionManagerAddress,
      abi: NonfungiblePositionManagerPositionsAbi,
      functionName: "positions",
      args: [positionId]
    }),
    publicClient.simulateContract({
      address: positionManagerAddress,
      abi: NonfungiblePositionManagerCollectAbi,
      functionName: "collect",
      args: [
        {
          tokenId: positionId,
          recipient: positionOwner,
          amount0Max: MAX_UINT128,
          amount1Max: MAX_UINT128
        }
      ],
      account: positionOwner
    })
  ]);
  const token0 = position[2];
  const token1 = position[3];
  const [amount0, amount1] = sim.result;
  return { positionOwner, token0, token1, amount0, amount1 };
}
export {
  BASE_CHAIN_ID2 as BASE_CHAIN_ID,
  CLANKER_FACTORIES_BASE,
  ClankerClaimRewardsAbi,
  ClankerTokenDeployerAbi,
  EXPECTED_MERKLE_ROOT,
  LEGACY_FACTORIES,
  LEGACY_FEE_CLAIMS_ADDRESS,
  LegacyCreatorFees,
  LegacyFeeClaims,
  LockerCollectFeesAbi2 as LockerCollectFeesAbi,
  MetaLockerCollectFeesAbi2 as MetaLockerCollectFeesAbi,
  NonfungiblePositionManagerCollectAbi,
  NonfungiblePositionManagerOwnerOfAbi,
  NonfungiblePositionManagerPositionsAbi,
  UNISWAP_V3_BASE,
  getClaimLegacyCreatorFeesTransaction,
  getClaimLegacyFeesTransaction,
  getInitializeTokenCreatorTransaction,
  getLegacyClaimableFees,
  getTokenCreatorMerkleProof,
  getTokenCreatorTransferTransaction,
  getUpdateTokenCreatorTransaction,
  parseTokenCreatorCSV
};