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

import {
  ethers,
  EventFilter,
  Signer,
  BigNumber,
  BigNumberish,
  PopulatedTransaction,
} from "ethers";
import {
  Contract,
  ContractTransaction,
  Overrides,
  CallOverrides,
} from "@ethersproject/contracts";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";

interface IHooksInterface extends ethers.utils.Interface {
  functions: {
    "afterAddLiquidity(address,tuple,tuple,int256,int256,bytes)": FunctionFragment;
    "afterDonate(address,tuple,uint256,uint256,bytes)": FunctionFragment;
    "afterInitialize(address,tuple,uint160,int24)": FunctionFragment;
    "afterRemoveLiquidity(address,tuple,tuple,int256,int256,bytes)": FunctionFragment;
    "afterSwap(address,tuple,tuple,int256,bytes)": FunctionFragment;
    "beforeAddLiquidity(address,tuple,tuple,bytes)": FunctionFragment;
    "beforeDonate(address,tuple,uint256,uint256,bytes)": FunctionFragment;
    "beforeInitialize(address,tuple,uint160)": FunctionFragment;
    "beforeRemoveLiquidity(address,tuple,tuple,bytes)": FunctionFragment;
    "beforeSwap(address,tuple,tuple,bytes)": FunctionFragment;
  };

  encodeFunctionData(
    functionFragment: "afterAddLiquidity",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      BigNumberish,
      BigNumberish,
      BytesLike
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "afterDonate",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      BigNumberish,
      BigNumberish,
      BytesLike
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "afterInitialize",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      BigNumberish,
      BigNumberish
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "afterRemoveLiquidity",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      BigNumberish,
      BigNumberish,
      BytesLike
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "afterSwap",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      BigNumberish,
      BytesLike
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "beforeAddLiquidity",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      BytesLike
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "beforeDonate",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      BigNumberish,
      BigNumberish,
      BytesLike
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "beforeInitialize",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      BigNumberish
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "beforeRemoveLiquidity",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      BytesLike
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "beforeSwap",
    values: [
      string,
      {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      BytesLike
    ]
  ): string;

  decodeFunctionResult(
    functionFragment: "afterAddLiquidity",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "afterDonate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "afterInitialize",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "afterRemoveLiquidity",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "afterSwap", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "beforeAddLiquidity",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "beforeDonate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "beforeInitialize",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "beforeRemoveLiquidity",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "beforeSwap", data: BytesLike): Result;

  events: {};
}

export class IHooks extends Contract {
  connect(signerOrProvider: Signer | Provider | string): this;
  attach(addressOrName: string): this;
  deployed(): Promise<this>;

  on(event: EventFilter | string, listener: Listener): this;
  once(event: EventFilter | string, listener: Listener): this;
  addListener(eventName: EventFilter | string, listener: Listener): this;
  removeAllListeners(eventName: EventFilter | string): this;
  removeListener(eventName: any, listener: Listener): this;

  interface: IHooksInterface;

  functions: {
    afterAddLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    afterDonate(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    afterInitialize(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      tick: BigNumberish,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      tick: BigNumberish,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    afterRemoveLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    afterSwap(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      delta: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      delta: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    beforeAddLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    beforeDonate(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    beforeInitialize(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "beforeInitialize(address,(address,address,uint24,int24,address),uint160)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    beforeRemoveLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    beforeSwap(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<ContractTransaction>;
  };

  afterAddLiquidity(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      tickLower: BigNumberish;
      tickUpper: BigNumberish;
      liquidityDelta: BigNumberish;
      salt: BytesLike;
    },
    delta: BigNumberish,
    feesAccrued: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      tickLower: BigNumberish;
      tickUpper: BigNumberish;
      liquidityDelta: BigNumberish;
      salt: BytesLike;
    },
    delta: BigNumberish,
    feesAccrued: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  afterDonate(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    amount0: BigNumberish,
    amount1: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    amount0: BigNumberish,
    amount1: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  afterInitialize(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    sqrtPriceX96: BigNumberish,
    tick: BigNumberish,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    sqrtPriceX96: BigNumberish,
    tick: BigNumberish,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  afterRemoveLiquidity(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      tickLower: BigNumberish;
      tickUpper: BigNumberish;
      liquidityDelta: BigNumberish;
      salt: BytesLike;
    },
    delta: BigNumberish,
    feesAccrued: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      tickLower: BigNumberish;
      tickUpper: BigNumberish;
      liquidityDelta: BigNumberish;
      salt: BytesLike;
    },
    delta: BigNumberish,
    feesAccrued: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  afterSwap(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      zeroForOne: boolean;
      amountSpecified: BigNumberish;
      sqrtPriceLimitX96: BigNumberish;
    },
    delta: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      zeroForOne: boolean;
      amountSpecified: BigNumberish;
      sqrtPriceLimitX96: BigNumberish;
    },
    delta: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  beforeAddLiquidity(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      tickLower: BigNumberish;
      tickUpper: BigNumberish;
      liquidityDelta: BigNumberish;
      salt: BytesLike;
    },
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      tickLower: BigNumberish;
      tickUpper: BigNumberish;
      liquidityDelta: BigNumberish;
      salt: BytesLike;
    },
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  beforeDonate(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    amount0: BigNumberish,
    amount1: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    amount0: BigNumberish,
    amount1: BigNumberish,
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  beforeInitialize(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    sqrtPriceX96: BigNumberish,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "beforeInitialize(address,(address,address,uint24,int24,address),uint160)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    sqrtPriceX96: BigNumberish,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  beforeRemoveLiquidity(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      tickLower: BigNumberish;
      tickUpper: BigNumberish;
      liquidityDelta: BigNumberish;
      salt: BytesLike;
    },
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      tickLower: BigNumberish;
      tickUpper: BigNumberish;
      liquidityDelta: BigNumberish;
      salt: BytesLike;
    },
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  beforeSwap(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      zeroForOne: boolean;
      amountSpecified: BigNumberish;
      sqrtPriceLimitX96: BigNumberish;
    },
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)"(
    sender: string,
    key: {
      currency0: string;
      currency1: string;
      fee: BigNumberish;
      tickSpacing: BigNumberish;
      hooks: string;
    },
    params: {
      zeroForOne: boolean;
      amountSpecified: BigNumberish;
      sqrtPriceLimitX96: BigNumberish;
    },
    hookData: BytesLike,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  callStatic: {
    afterAddLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<{
      0: string;
      1: BigNumber;
    }>;

    "afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<{
      0: string;
      1: BigNumber;
    }>;

    afterDonate(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

    "afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

    afterInitialize(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      tick: BigNumberish,
      overrides?: CallOverrides
    ): Promise<string>;

    "afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      tick: BigNumberish,
      overrides?: CallOverrides
    ): Promise<string>;

    afterRemoveLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<{
      0: string;
      1: BigNumber;
    }>;

    "afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<{
      0: string;
      1: BigNumber;
    }>;

    afterSwap(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      delta: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<{
      0: string;
      1: BigNumber;
    }>;

    "afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      delta: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<{
      0: string;
      1: BigNumber;
    }>;

    beforeAddLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

    "beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

    beforeDonate(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

    "beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

    beforeInitialize(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      overrides?: CallOverrides
    ): Promise<string>;

    "beforeInitialize(address,(address,address,uint24,int24,address),uint160)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      overrides?: CallOverrides
    ): Promise<string>;

    beforeRemoveLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

    "beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

    beforeSwap(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<{
      0: string;
      1: BigNumber;
      2: number;
    }>;

    "beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      hookData: BytesLike,
      overrides?: CallOverrides
    ): Promise<{
      0: string;
      1: BigNumber;
      2: number;
    }>;
  };

  filters: {};

  estimateGas: {
    afterAddLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    afterDonate(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    afterInitialize(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      tick: BigNumberish,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      tick: BigNumberish,
      overrides?: Overrides
    ): Promise<BigNumber>;

    afterRemoveLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    afterSwap(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      delta: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      delta: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    beforeAddLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    beforeDonate(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    beforeInitialize(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "beforeInitialize(address,(address,address,uint24,int24,address),uint160)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      overrides?: Overrides
    ): Promise<BigNumber>;

    beforeRemoveLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    beforeSwap(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<BigNumber>;
  };

  populateTransaction: {
    afterAddLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    afterDonate(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    afterInitialize(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      tick: BigNumberish,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      tick: BigNumberish,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    afterRemoveLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      delta: BigNumberish,
      feesAccrued: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    afterSwap(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      delta: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      delta: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    beforeAddLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    beforeDonate(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      amount0: BigNumberish,
      amount1: BigNumberish,
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    beforeInitialize(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "beforeInitialize(address,(address,address,uint24,int24,address),uint160)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      sqrtPriceX96: BigNumberish,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    beforeRemoveLiquidity(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        tickLower: BigNumberish;
        tickUpper: BigNumberish;
        liquidityDelta: BigNumberish;
        salt: BytesLike;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    beforeSwap(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)"(
      sender: string,
      key: {
        currency0: string;
        currency1: string;
        fee: BigNumberish;
        tickSpacing: BigNumberish;
        hooks: string;
      },
      params: {
        zeroForOne: boolean;
        amountSpecified: BigNumberish;
        sqrtPriceLimitX96: BigNumberish;
      },
      hookData: BytesLike,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;
  };
}
