[
  {
    "type": "constructor",
    "inputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "fallback",
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "balanceOf",
    "inputs": [
      {
        "name": "account",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "id",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "balanceOfBatch",
    "inputs": [
      {
        "name": "accounts",
        "type": "address[]",
        "internalType": "address[]"
      },
      {
        "name": "ids",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "outputs": [
      {
        "name": "batchBalances",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "binStep",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "burn",
    "inputs": [
      {
        "name": "ids",
        "type": "uint256[]",
        "internalType": "uint256[]"
      },
      {
        "name": "amounts",
        "type": "uint256[]",
        "internalType": "uint256[]"
      },
      {
        "name": "to",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "amountX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "feeX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "feeY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "claimLPFees",
    "inputs": [
      {
        "name": "binId",
        "type": "uint24",
        "internalType": "uint24"
      },
      {
        "name": "to",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "amountX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "claimLPFeesFor",
    "inputs": [
      {
        "name": "holder",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binId",
        "type": "uint24",
        "internalType": "uint24"
      },
      {
        "name": "to",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "amountX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "claimLPFeesForBins",
    "inputs": [
      {
        "name": "holder",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binIds",
        "type": "uint24[]",
        "internalType": "uint24[]"
      },
      {
        "name": "to",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "amountX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "claimLPFeesForSharesBins",
    "inputs": [
      {
        "name": "holder",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binIds",
        "type": "uint24[]",
        "internalType": "uint24[]"
      },
      {
        "name": "shares",
        "type": "uint256[]",
        "internalType": "uint256[]"
      },
      {
        "name": "scopeId",
        "type": "bytes32",
        "internalType": "bytes32"
      },
      {
        "name": "to",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "amountX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "collectProtocolFeeX",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "collectProtocolFeeY",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "collectProtocolFees",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "getActiveBinsBitmapWord",
    "inputs": [
      {
        "name": "wordIndex",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getActiveBinsList",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint24[]",
        "internalType": "uint24[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getActiveId",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "uint24",
        "internalType": "uint24"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getBin",
    "inputs": [
      {
        "name": "id",
        "type": "uint24",
        "internalType": "uint24"
      }
    ],
    "outputs": [
      {
        "name": "reserveX",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "reserveY",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getBinNormalized",
    "inputs": [
      {
        "name": "id",
        "type": "uint24",
        "internalType": "uint24"
      }
    ],
    "outputs": [
      {
        "name": "reserveX",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "reserveY",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "shares",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getClaimableFees",
    "inputs": [
      {
        "name": "user",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binId",
        "type": "uint24",
        "internalType": "uint24"
      }
    ],
    "outputs": [
      {
        "name": "claimableX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "claimableY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getDecimals",
    "inputs": [],
    "outputs": [
      {
        "name": "decimalsX",
        "type": "uint8",
        "internalType": "uint8"
      },
      {
        "name": "decimalsY",
        "type": "uint8",
        "internalType": "uint8"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOracleParameters",
    "inputs": [],
    "outputs": [
      {
        "name": "activeSize",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "oracleLength",
        "type": "uint16",
        "internalType": "uint16"
      },
      {
        "name": "lastUpdate",
        "type": "uint40",
        "internalType": "uint40"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getProtocolFees",
    "inputs": [],
    "outputs": [
      {
        "name": "feesX",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "feesY",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getQuoteState",
    "inputs": [],
    "outputs": [
      {
        "name": "feeParams",
        "type": "tuple",
        "internalType": "struct FeeHelper.FeeParameters",
        "components": [
          {
            "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"
          }
        ]
      },
      {
        "name": "volatilityAccumulator",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "volatilityReference",
        "type": "uint24",
        "internalType": "uint24"
      },
      {
        "name": "lastVolatilityUpdate",
        "type": "uint40",
        "internalType": "uint40"
      },
      {
        "name": "scaleX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "scaleY",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "factory",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getReserves",
    "inputs": [],
    "outputs": [
      {
        "name": "reserveX",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "reserveY",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getReservesNormalized",
    "inputs": [],
    "outputs": [
      {
        "name": "reserveX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "reserveY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "initialize",
    "inputs": [
      {
        "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": "baseFactor_",
        "type": "uint16",
        "internalType": "uint16"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "isApprovedForAll",
    "inputs": [
      {
        "name": "owner",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "spender",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "mint",
    "inputs": [
      {
        "name": "ids",
        "type": "uint256[]",
        "internalType": "uint256[]"
      },
      {
        "name": "amounts",
        "type": "uint256[]",
        "internalType": "uint256[]"
      },
      {
        "name": "to",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "refundTo",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "liquidityMinted",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "pause",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "preparePositionAcquisition",
    "inputs": [
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binIds",
        "type": "uint24[]",
        "internalType": "uint24[]"
      },
      {
        "name": "incomingAmounts",
        "type": "uint256[]",
        "internalType": "uint256[]"
      },
      {
        "name": "resetSpentCycles",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [
      {
        "name": "cyclesReset",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "safeBatchTransferFrom",
    "inputs": [
      {
        "name": "from",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "to",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "ids",
        "type": "uint256[]",
        "internalType": "uint256[]"
      },
      {
        "name": "amounts",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "safeTransferFrom",
    "inputs": [
      {
        "name": "from",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "to",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "id",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setApprovalForAll",
    "inputs": [
      {
        "name": "spender",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "approved",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setExtension",
    "inputs": [
      {
        "name": "ext",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setFeeParameters",
    "inputs": [
      {
        "name": "params",
        "type": "tuple",
        "internalType": "struct FeeHelper.FeeParameters",
        "components": [
          {
            "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": "supportsInterface",
    "inputs": [
      {
        "name": "interfaceId",
        "type": "bytes4",
        "internalType": "bytes4"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "swap",
    "inputs": [
      {
        "name": "swapForY",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "to",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "amountIn",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amountOutMin",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "amountOut",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "swap",
    "inputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "swap",
    "inputs": [
      {
        "name": "",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "tokenX",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "tokenY",
    "inputs": [],
    "outputs": [
      {
        "name": "",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "totalSupply",
    "inputs": [
      {
        "name": "id",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "unpause",
    "inputs": [],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "event",
    "name": "ActiveBinChanged",
    "inputs": [
      {
        "name": "oldActiveId",
        "type": "uint24",
        "indexed": true,
        "internalType": "uint24"
      },
      {
        "name": "newActiveId",
        "type": "uint24",
        "indexed": true,
        "internalType": "uint24"
      },
      {
        "name": "timestamp",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ApprovalForAll",
    "inputs": [
      {
        "name": "account",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "sender",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "approved",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "FeeParametersUpdated",
    "inputs": [
      {
        "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": "uint16",
        "indexed": false,
        "internalType": "uint16"
      },
      {
        "name": "maxVolatilityAccumulator",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "FlashLoan",
    "inputs": [
      {
        "name": "borrower",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "amountX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "feeX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "feeY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Initialized",
    "inputs": [
      {
        "name": "version",
        "type": "uint64",
        "indexed": false,
        "internalType": "uint64"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "LPFeesClaimed",
    "inputs": [
      {
        "name": "user",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "binId",
        "type": "uint24",
        "indexed": true,
        "internalType": "uint24"
      },
      {
        "name": "amountX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "LPFeesCompounded",
    "inputs": [
      {
        "name": "user",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "binId",
        "type": "uint24",
        "indexed": true,
        "internalType": "uint24"
      },
      {
        "name": "lpTokensMinted",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "amountX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "LiquidityAdded",
    "inputs": [
      {
        "name": "sender",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "recipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "ids",
        "type": "uint256[]",
        "indexed": false,
        "internalType": "uint256[]"
      },
      {
        "name": "amounts",
        "type": "uint256[]",
        "indexed": false,
        "internalType": "uint256[]"
      },
      {
        "name": "liquidityMinted",
        "type": "uint256[]",
        "indexed": false,
        "internalType": "uint256[]"
      },
      {
        "name": "totalAmountX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "totalAmountY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "activeId",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "LiquidityRemoved",
    "inputs": [
      {
        "name": "sender",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "recipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "ids",
        "type": "uint256[]",
        "indexed": false,
        "internalType": "uint256[]"
      },
      {
        "name": "amounts",
        "type": "uint256[]",
        "indexed": false,
        "internalType": "uint256[]"
      },
      {
        "name": "totalAmountX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "totalAmountY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "feeX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "feeY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "activeId",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "MintSurplusRefunded",
    "inputs": [
      {
        "name": "refundTo",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "recipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "surplusX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "surplusY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "MintSurplusRefunded",
    "inputs": [
      {
        "name": "refundTo",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "recipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "surplusX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "surplusY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OracleUpdated",
    "inputs": [
      {
        "name": "activeId",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      },
      {
        "name": "timestamp",
        "type": "uint40",
        "indexed": false,
        "internalType": "uint40"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Paused",
    "inputs": [],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ProtocolFeesCollected",
    "inputs": [
      {
        "name": "recipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "amountX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "amountY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ReservesUpdated",
    "inputs": [
      {
        "name": "reserveX",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "reserveY",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "timestamp",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ResidualFeeAccumulated",
    "inputs": [
      {
        "name": "binId",
        "type": "uint24",
        "indexed": true,
        "internalType": "uint24"
      },
      {
        "name": "residualX",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "residualY",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "SpentPositionFeeCyclesReset",
    "inputs": [
      {
        "name": "caller",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "holder",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "cyclesReset",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Swap",
    "inputs": [
      {
        "name": "sender",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "recipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "amountIn",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "amountOut",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "activeId",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      },
      {
        "name": "swapForY",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "SwapDetailed",
    "inputs": [
      {
        "name": "sender",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "recipient",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "amountIn",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "amountOut",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "startBinId",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      },
      {
        "name": "endBinId",
        "type": "uint24",
        "indexed": false,
        "internalType": "uint24"
      },
      {
        "name": "binsTraversed",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "totalFee",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "protocolFee",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "lpFee",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "swapForY",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TransferBatch",
    "inputs": [
      {
        "name": "sender",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "from",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "to",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "ids",
        "type": "uint256[]",
        "indexed": false,
        "internalType": "uint256[]"
      },
      {
        "name": "amounts",
        "type": "uint256[]",
        "indexed": false,
        "internalType": "uint256[]"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TransferSingle",
    "inputs": [
      {
        "name": "sender",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "from",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "to",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "id",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "amount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Unpaused",
    "inputs": [],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "VolatilityUpdated",
    "inputs": [
      {
        "name": "volatility",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "timestamp",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "error",
    "name": "FeeAccounting__InsufficientBacking",
    "inputs": [
      {
        "name": "binId",
        "type": "uint24",
        "internalType": "uint24"
      },
      {
        "name": "requestedX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "availableX",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "requestedY",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "availableY",
        "type": "uint256",
        "internalType": "uint256"
      }
    ]
  },
  {
    "type": "error",
    "name": "InvalidInitialization",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__BinReserveOverflow",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__CannotChangeBaseFactor",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__FlashLoanCallbackFailed",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__FlashLoanCallbackReturnMismatch",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__FlashLoanExceedsActiveBinReserves",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__InsufficientAmountOut",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__InsufficientInputAmount",
    "inputs": [
      {
        "name": "availableAmountIn",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "requiredAmountIn",
        "type": "uint256",
        "internalType": "uint256"
      }
    ]
  },
  {
    "type": "error",
    "name": "LBPair__InsufficientLiquidity",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__InsufficientLiquidityForSwap",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__InvalidInput",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__LegacySwapDisabled",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__NoExtension",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__NoFeesToClaim",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__NoFeesToCompound",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__Paused",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__RecipientFeeCycleMustBeReset",
    "inputs": [
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binId",
        "type": "uint24",
        "internalType": "uint24"
      }
    ]
  },
  {
    "type": "error",
    "name": "LBPair__RecipientFeesMustBeClaimed",
    "inputs": [
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "binId",
        "type": "uint24",
        "internalType": "uint24"
      }
    ]
  },
  {
    "type": "error",
    "name": "LBPair__Unauthorized",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__ZeroAddress",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__ZeroAmount",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBPair__ZeroAmountFlashLoan",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBToken__InvalidLength",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBToken__MintToZeroAddress",
    "inputs": []
  },
  {
    "type": "error",
    "name": "LBToken__SelfApproval",
    "inputs": [
      {
        "name": "owner",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "LBToken__SpenderNotApproved",
    "inputs": [
      {
        "name": "owner",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "spender",
        "type": "address",
        "internalType": "address"
      }
    ]
  },
  {
    "type": "error",
    "name": "LBToken__TransferExceedsBalance",
    "inputs": [
      {
        "name": "from",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "id",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "amount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ]
  },
  {
    "type": "error",
    "name": "LBToken__TransferToZeroAddress",
    "inputs": []
  },
  {
    "type": "error",
    "name": "NotInitializing",
    "inputs": []
  },
  {
    "type": "error",
    "name": "ReentrancyGuardReentrantCall",
    "inputs": []
  },
  {
    "type": "error",
    "name": "SafeCast__Overflow",
    "inputs": []
  },
  {
    "type": "error",
    "name": "TransferHelper__NoCode",
    "inputs": []
  },
  {
    "type": "error",
    "name": "TransferHelper__TransferFailed",
    "inputs": []
  }
]