[
  {
    "type": "constructor",
    "inputs": [
      {
        "name": "owner_",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "beacon_",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "initialQuoteTokens_",
        "type": "address[]",
        "internalType": "address[]"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "EXTENSION_DELAY",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "EXTENSION_GRACE",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "acceptOwnership",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "addBaseFee",
    "inputs": [
      {
        "name": "baseFactor",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "allPairs",
    "inputs": [
      {
        "name": "index",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "allPairsLength",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "beacon",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "canCreatePool",
    "inputs": [
      {
        "name": "deployer",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenX",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenY",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "cancelPairExtension",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "extension",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "createPair",
    "inputs": [
      {
        "name": "tokenX",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenY",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "activeId",
        "type": "uint24",
        "internalType": "uint24"
      },
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "baseFactor",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "amountX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "defaultPairExtension",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "emergencyPauser",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "extensionEta",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "extension",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "eta",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getAllFeeConfigs",
    "inputs": [],
    "outputs": [
      {
        "name": "binSteps",
        "type": "uint16[]",
        "internalType": "uint16[]"
      },
      {
        "name": "baseFees",
        "type": "uint16[]",
        "internalType": "uint16[]"
      },
      {
        "name": "variableFeeCaps",
        "type": "uint16[]",
        "internalType": "uint16[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getAllPairs",
    "inputs": [
      {
        "name": "tokenX",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenY",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "pairs",
        "type": "address[]",
        "internalType": "address[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getAllPairsPaginated",
    "inputs": [
      {
        "name": "offset",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "limit",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "pairs",
        "type": "address[]",
        "internalType": "address[]"
      },
      {
        "name": "total",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getAllowedBaseFees",
    "inputs": [],
    "outputs": [
      {
        "name": "baseFees",
        "type": "uint16[]",
        "internalType": "uint16[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getApprovedQuoteTokens",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address[]",
        "internalType": "address[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getPair",
    "inputs": [
      {
        "name": "tokenX",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenY",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "baseFactor",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getPairBaseFactor",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "baseFactor",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getPairMetadata",
    "inputs": [
      {
        "name": "pairAddr",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "metadata",
        "type": "tuple",
        "internalType": "struct IUmbraeLBFactory.PairMetadata",
        "components": [
          {
            "name": "pairAddress",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tokenX",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tokenY",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "binStep",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "activeId",
            "type": "uint24",
            "internalType": "uint24"
          },
          {
            "name": "reserveX",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "reserveY",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "protocolFeesX",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "protocolFeesY",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "volatility",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getPairsMetadata",
    "inputs": [
      {
        "name": "pairAddresses",
        "type": "address[]",
        "internalType": "address[]"
      }
    ],
    "outputs": [
      {
        "name": "metadata",
        "type": "tuple[]",
        "internalType": "struct IUmbraeLBFactory.PairMetadata[]",
        "components": [
          {
            "name": "pairAddress",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tokenX",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tokenY",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "binStep",
            "type": "uint16",
            "internalType": "uint16"
          },
          {
            "name": "activeId",
            "type": "uint24",
            "internalType": "uint24"
          },
          {
            "name": "reserveX",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "reserveY",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "protocolFeesX",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "protocolFeesY",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "volatility",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getPoolProtocolShare",
    "inputs": [
      {
        "name": "pool",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getPoolsForBinStep",
    "inputs": [
      {
        "name": "tokenX",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenY",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [
      {
        "name": "pools",
        "type": "address[]",
        "internalType": "address[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getProtocolStatistics",
    "inputs": [],
    "outputs": [
      {
        "name": "totalPairs",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "verifiedTokenCount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "verifiedPairCount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "totalReserveX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "totalReserveY",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "totalProtocolFeesX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "totalProtocolFeesY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getTokenTier",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "tier",
        "type": "uint8",
        "internalType": "enum IUmbraeLBFactory.VerificationTier"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getVariableFeeCap",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "baseFee",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [
      {
        "name": "variableFeeCap",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getVerifiedTokens",
    "inputs": [],
    "outputs": [
      {
        "name": "tokens",
        "type": "address[]",
        "internalType": "address[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getVerifiedTokensWithTiers",
    "inputs": [],
    "outputs": [
      {
        "name": "infos",
        "type": "tuple[]",
        "internalType": "struct IUmbraeLBFactory.TokenVerificationInfo[]",
        "components": [
          {
            "name": "token",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tier",
            "type": "uint8",
            "internalType": "enum IUmbraeLBFactory.VerificationTier"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "globalProtocolShare",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "grantOperator",
    "inputs": [
      {
        "name": "operator",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "grantTokenDeployer",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "deployer",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "grantTokenDeployerBatch",
    "inputs": [
      {
        "name": "tokens",
        "type": "address[]",
        "internalType": "address[]"
      },
      {
        "name": "deployer",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "isAllowedBinStep",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isApprovedQuoteToken",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isBinStepAllowed",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isFeeConfigAllowed",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "baseFee",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isOperator",
    "inputs": [
      {
        "name": "account",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isPairRegistered",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isPairVerified",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "verified",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isPermissionedDeployment",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isTokenDeployer",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "deployer",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isVerifiedToken",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "verified",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "owner",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "pausePair",
    "inputs": [
      {
        "name": "tokenX",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenY",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "baseFactor",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "pendingOwner",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "protocolFeeRecipient",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "reduceGlobalProtocolShare",
    "inputs": [
      {
        "name": "newShare",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "removeBaseFee",
    "inputs": [
      {
        "name": "baseFactor",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "removeFeeConfig",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "baseFee",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "removePoolProtocolShareOverride",
    "inputs": [
      {
        "name": "pool",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "revokeOperator",
    "inputs": [
      {
        "name": "operator",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "revokeTokenDeployer",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "deployer",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "schedulePairExtension",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "extension",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setAllowedBinStep",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "allowed",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setAllowedFeeConfig",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "baseFee",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "variableFeeCap",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setApprovedQuoteTokens",
    "inputs": [
      {
        "name": "quoteTokens",
        "type": "address[]",
        "internalType": "address[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setDefaultPairExtension",
    "inputs": [
      {
        "name": "extension",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setEmergencyPauser",
    "inputs": [
      {
        "name": "newPauser",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setFactoryOwner",
    "inputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "setFeeParameters",
    "inputs": [
      {
        "name": "tokenX",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenY",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "baseFactor",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "filterPeriod",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "decayPeriod",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "reductionFactor",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "variableFeeControl",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "maxVolatilityAccumulator",
        "type": "uint24",
        "internalType": "uint24"
      },
      {
        "name": "minSwapBps",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setFlashLoanFee",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "feeBps",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setPairExtension",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "extension",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setPermissionedDeployment",
    "inputs": [
      {
        "name": "enabled",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setPoolProtocolShareOverride",
    "inputs": [
      {
        "name": "pool",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "share",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setProtocolFeeRecipient",
    "inputs": [
      {
        "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": "unpausePair",
    "inputs": [
      {
        "name": "tokenX",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenY",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "baseFactor",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "unverifyToken",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "verifyToken",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "verifyToken",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tier",
        "type": "uint8",
        "internalType": "enum IUmbraeLBFactory.VerificationTier"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "verifyTokensBatch",
    "inputs": [
      {
        "name": "tokens",
        "type": "address[]",
        "internalType": "address[]"
      },
      {
        "name": "tiers",
        "type": "uint8[]",
        "internalType": "enum IUmbraeLBFactory.VerificationTier[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "event",
    "name": "BaseFeeAdded",
    "inputs": [
      {
        "name": "baseFactor",
        "type": "uint16",
        "indexed": true,
        "internalType": "uint16"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "BaseFeeRemoved",
    "inputs": [
      {
        "name": "baseFactor",
        "type": "uint16",
        "indexed": true,
        "internalType": "uint16"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "BinStepConfigured",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "indexed": true,
        "internalType": "uint16"
      },
      {
        "name": "allowed",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      },
      {
        "name": "timestamp",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "DefaultPairExtensionChanged",
    "inputs": [
      {
        "name": "oldExtension",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newExtension",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "EmergencyPauserChanged",
    "inputs": [
      {
        "name": "oldPauser",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newPauser",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "FactoryOwnerChanged",
    "inputs": [
      {
        "name": "oldOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "FeeConfigRemoved",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "indexed": true,
        "internalType": "uint16"
      },
      {
        "name": "baseFee",
        "type": "uint16",
        "indexed": true,
        "internalType": "uint16"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "FeeConfigSet",
    "inputs": [
      {
        "name": "binStep",
        "type": "uint16",
        "indexed": true,
        "internalType": "uint16"
      },
      {
        "name": "baseFee",
        "type": "uint16",
        "indexed": true,
        "internalType": "uint16"
      },
      {
        "name": "variableFeeCap",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "FeeParametersSet",
    "inputs": [
      {
        "name": "sender",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "pair",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "baseFactor",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "filterPeriod",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "decayPeriod",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "reductionFactor",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "variableFeeControl",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      },
      {
        "name": "maxVolatilityAccumulator",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "GlobalProtocolShareReduced",
    "inputs": [
      {
        "name": "oldShare",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "newShare",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OperatorGranted",
    "inputs": [
      {
        "name": "operator",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OperatorRevoked",
    "inputs": [
      {
        "name": "operator",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OwnershipTransferStarted",
    "inputs": [
      {
        "name": "previousOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "PairCreated",
    "inputs": [
      {
        "name": "tokenX",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "tokenY",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "binStep",
        "type": "uint16",
        "indexed": true,
        "internalType": "uint16"
      },
      {
        "name": "pair",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "pid",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "activeId",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      },
      {
        "name": "baseFactor",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "PairExtensionCancelled",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "extension",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "PairExtensionScheduled",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "extension",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "eta",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "PairExtensionSet",
    "inputs": [
      {
        "name": "pair",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "extension",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "PermissionedDeploymentChanged",
    "inputs": [
      {
        "name": "enabled",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "PoolProtocolShareOverrideRemoved",
    "inputs": [
      {
        "name": "pool",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "PoolProtocolShareOverrideSet",
    "inputs": [
      {
        "name": "pool",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "protocolShare",
        "type": "uint16",
        "indexed": false,
        "internalType": "uint16"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ProtocolFeeRecipientChanged",
    "inputs": [
      {
        "name": "oldRecipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newRecipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "QuoteTokenApproved",
    "inputs": [
      {
        "name": "quoteToken",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TokenDeployerGranted",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "deployer",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TokenDeployerRevoked",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "deployer",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TokenTierChanged",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "oldTier",
        "type": "uint8",
        "indexed": false,
        "internalType": "enum IUmbraeLBFactory.VerificationTier"
      },
      {
        "name": "newTier",
        "type": "uint8",
        "indexed": false,
        "internalType": "enum IUmbraeLBFactory.VerificationTier"
      },
      {
        "name": "timestamp",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TokenUnverified",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TokenVerified",
    "inputs": [
      {
        "name": "token",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "error",
    "name": "LBFactory__ActiveIdPriceNotRepresentable",
    "inputs": [
      {
        "name": "activeId",
        "type": "uint24",
        "internalType": "uint24"
      },
      {
        "name": "binStep",
        "type": "uint16",
        "internalType": "uint16"
      }
    ]
  },
  {
    "type": "error",
    "name": "LBFactory__ArrayLengthMismatch",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__BaseFeeAlreadyExists",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__BaseFeeNotFound",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__CannotChangeBaseFactor",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__ExtensionExpired",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__ExtensionNotAContract",
    "inputs": [
      {
        "name": "extension",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "LBFactory__ExtensionNotReady",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__FeeConfigsRemain",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__FeeOnTransferNotSupported",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__IdenticalTokens",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__InsufficientInitialLiquidity",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__InvalidActiveId",
    "inputs": [
      {
        "name": "activeId",
        "type": "uint24",
        "internalType": "uint24"
      },
      {
        "name": "minActiveId",
        "type": "uint24",
        "internalType": "uint24"
      },
      {
        "name": "maxActiveId",
        "type": "uint24",
        "internalType": "uint24"
      }
    ]
  },
  {
    "type": "error",
    "name": "LBFactory__InvalidBaseFee",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__InvalidBeacon",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__InvalidBinStep",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__InvalidFeeConfig",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__NoExtensionScheduled",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__NoPendingOwner",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__PairAlreadyExists",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__PairNotFound",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__ProtocolShareBelowFloor",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__ProtocolShareCannotIncrease",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__Unauthorized",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBFactory__ZeroAddress",
    "inputs": []
  },
  {
    "type": "error",
    "name": "TransferHelper__NoCode",
    "inputs": []
  },
  {
    "type": "error",
    "name": "TransferHelper__TransferFromFailed",
    "inputs": []
  },
  {
    "type": "error",
    "name": "TransferHelper__TransferFromReturnedFalse",
    "inputs": []
  }
]