/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
  BaseContract,
  BigNumber,
  BigNumberish,
  BytesLike,
  CallOverrides,
  ContractTransaction,
  Overrides,
  PopulatedTransaction,
  Signer,
  utils,
} from "ethers";
import type {
  FunctionFragment,
  Result,
  EventFragment,
} from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type {
  TypedEventFilter,
  TypedEvent,
  TypedListener,
  OnEvent,
  PromiseOrValue,
} from "./common";

export declare namespace IFeeManager {
  export type PoolCardinalityStruct = {
    weth: PromiseOrValue<BigNumberish>;
    currentMax: PromiseOrValue<BigNumberish>;
    customMax: PromiseOrValue<BigNumberish>;
  };

  export type PoolCardinalityStructOutput = [BigNumber, number, number] & {
    weth: BigNumber;
    currentMax: number;
    customMax: number;
  };

  export type FeeStoreStruct = {
    wethForFullRange: PromiseOrValue<BigNumberish>;
    tokenForFullRange: PromiseOrValue<BigNumberish>;
  };

  export type FeeStoreStructOutput = [BigNumber, BigNumber] & {
    wethForFullRange: BigNumber;
    tokenForFullRange: BigNumber;
  };

  export type PoolDistributionFeesStruct = {
    wethForMaintenance: PromiseOrValue<BigNumberish>;
    wethForCardinality: PromiseOrValue<BigNumberish>;
    isInitialized: PromiseOrValue<boolean>;
  };

  export type PoolDistributionFeesStructOutput = [
    BigNumber,
    BigNumber,
    boolean
  ] & {
    wethForMaintenance: BigNumber;
    wethForCardinality: BigNumber;
    isInitialized: boolean;
  };
}

export interface IFeeManagerInterface extends utils.Interface {
  functions: {
    "POOL_MANAGER_FACTORY()": FunctionFragment;
    "WETH()": FunctionFragment;
    "cardinalityJob()": FunctionFragment;
    "depositFromLockManager(uint256,uint256)": FunctionFragment;
    "depositFromPoolManager(uint256,uint256)": FunctionFragment;
    "fullRangeCallback(address,address,uint256,uint256)": FunctionFragment;
    "getMaxCardinalityForPool(address)": FunctionFragment;
    "increaseCardinality(address,uint256,uint16)": FunctionFragment;
    "increaseFullRangePosition(address,address,uint256,uint256,bool)": FunctionFragment;
    "maintenanceGovernance()": FunctionFragment;
    "migrateFrom(address,(uint256,uint16,uint16),(uint256,uint256),(uint256,uint256,bool))": FunctionFragment;
    "migrateTo(address)": FunctionFragment;
    "poolCardinality(address)": FunctionFragment;
    "poolCardinalityMax()": FunctionFragment;
    "poolDistribution(address)": FunctionFragment;
    "poolManagerDeposits(address)": FunctionFragment;
    "setCardinalityJob(address)": FunctionFragment;
    "setMaintenanceGovernance(address)": FunctionFragment;
    "setPoolCardinalityMax(uint16)": FunctionFragment;
    "setPoolCardinalityTarget(address,uint16)": FunctionFragment;
    "setSwapGasCostMultiplier(uint256)": FunctionFragment;
    "setWethForCardinality(address,uint256)": FunctionFragment;
    "setWethForMaintenance(address,uint256)": FunctionFragment;
    "swapGasCostMultiplier()": FunctionFragment;
    "uniswapV3SwapCallback(int256,int256,bytes)": FunctionFragment;
  };

  getFunction(
    nameOrSignatureOrTopic:
      | "POOL_MANAGER_FACTORY"
      | "WETH"
      | "cardinalityJob"
      | "depositFromLockManager"
      | "depositFromPoolManager"
      | "fullRangeCallback"
      | "getMaxCardinalityForPool"
      | "increaseCardinality"
      | "increaseFullRangePosition"
      | "maintenanceGovernance"
      | "migrateFrom"
      | "migrateTo"
      | "poolCardinality"
      | "poolCardinalityMax"
      | "poolDistribution"
      | "poolManagerDeposits"
      | "setCardinalityJob"
      | "setMaintenanceGovernance"
      | "setPoolCardinalityMax"
      | "setPoolCardinalityTarget"
      | "setSwapGasCostMultiplier"
      | "setWethForCardinality"
      | "setWethForMaintenance"
      | "swapGasCostMultiplier"
      | "uniswapV3SwapCallback"
  ): FunctionFragment;

  encodeFunctionData(
    functionFragment: "POOL_MANAGER_FACTORY",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "WETH", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "cardinalityJob",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "depositFromLockManager",
    values: [PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "depositFromPoolManager",
    values: [PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "fullRangeCallback",
    values: [
      PromiseOrValue<string>,
      PromiseOrValue<string>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "getMaxCardinalityForPool",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "increaseCardinality",
    values: [
      PromiseOrValue<string>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "increaseFullRangePosition",
    values: [
      PromiseOrValue<string>,
      PromiseOrValue<string>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<boolean>
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "maintenanceGovernance",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "migrateFrom",
    values: [
      PromiseOrValue<string>,
      IFeeManager.PoolCardinalityStruct,
      IFeeManager.FeeStoreStruct,
      IFeeManager.PoolDistributionFeesStruct
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "migrateTo",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "poolCardinality",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "poolCardinalityMax",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "poolDistribution",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "poolManagerDeposits",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setCardinalityJob",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setMaintenanceGovernance",
    values: [PromiseOrValue<string>]
  ): string;
  encodeFunctionData(
    functionFragment: "setPoolCardinalityMax",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "setPoolCardinalityTarget",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "setSwapGasCostMultiplier",
    values: [PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "setWethForCardinality",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "setWethForMaintenance",
    values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
  ): string;
  encodeFunctionData(
    functionFragment: "swapGasCostMultiplier",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "uniswapV3SwapCallback",
    values: [
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BigNumberish>,
      PromiseOrValue<BytesLike>
    ]
  ): string;

  decodeFunctionResult(
    functionFragment: "POOL_MANAGER_FACTORY",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "WETH", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "cardinalityJob",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "depositFromLockManager",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "depositFromPoolManager",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "fullRangeCallback",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getMaxCardinalityForPool",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "increaseCardinality",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "increaseFullRangePosition",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "maintenanceGovernance",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "migrateFrom",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "migrateTo", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "poolCardinality",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "poolCardinalityMax",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "poolDistribution",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "poolManagerDeposits",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setCardinalityJob",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setMaintenanceGovernance",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setPoolCardinalityMax",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setPoolCardinalityTarget",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setSwapGasCostMultiplier",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setWethForCardinality",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setWethForMaintenance",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "swapGasCostMultiplier",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "uniswapV3SwapCallback",
    data: BytesLike
  ): Result;

  events: {
    "CardinalityJobSet(address)": EventFragment;
    "FeesDeposited(address,uint256,uint256,uint256,uint256)": EventFragment;
    "MaintenanceGovernanceChanged(address)": EventFragment;
    "Migrated(address,address,address)": EventFragment;
    "SwapGasCostMultiplierChanged(uint256)": EventFragment;
    "WethForCardinalityChanged(uint256)": EventFragment;
    "WethForMaintenanceChanged(uint256)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "CardinalityJobSet"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "FeesDeposited"): EventFragment;
  getEvent(
    nameOrSignatureOrTopic: "MaintenanceGovernanceChanged"
  ): EventFragment;
  getEvent(nameOrSignatureOrTopic: "Migrated"): EventFragment;
  getEvent(
    nameOrSignatureOrTopic: "SwapGasCostMultiplierChanged"
  ): EventFragment;
  getEvent(nameOrSignatureOrTopic: "WethForCardinalityChanged"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "WethForMaintenanceChanged"): EventFragment;
}

export interface CardinalityJobSetEventObject {
  _cardinalityJob: string;
}
export type CardinalityJobSetEvent = TypedEvent<
  [string],
  CardinalityJobSetEventObject
>;

export type CardinalityJobSetEventFilter =
  TypedEventFilter<CardinalityJobSetEvent>;

export interface FeesDepositedEventObject {
  _poolManager: string;
  _wethFees: BigNumber;
  _tokenFees: BigNumber;
  _wethForMaintenance: BigNumber;
  _wethForCardinality: BigNumber;
}
export type FeesDepositedEvent = TypedEvent<
  [string, BigNumber, BigNumber, BigNumber, BigNumber],
  FeesDepositedEventObject
>;

export type FeesDepositedEventFilter = TypedEventFilter<FeesDepositedEvent>;

export interface MaintenanceGovernanceChangedEventObject {
  _maintenanceGovernance: string;
}
export type MaintenanceGovernanceChangedEvent = TypedEvent<
  [string],
  MaintenanceGovernanceChangedEventObject
>;

export type MaintenanceGovernanceChangedEventFilter =
  TypedEventFilter<MaintenanceGovernanceChangedEvent>;

export interface MigratedEventObject {
  _poolManager: string;
  _oldFeeManager: string;
  _newFeeManager: string;
}
export type MigratedEvent = TypedEvent<
  [string, string, string],
  MigratedEventObject
>;

export type MigratedEventFilter = TypedEventFilter<MigratedEvent>;

export interface SwapGasCostMultiplierChangedEventObject {
  _swapGasCostMultiplier: BigNumber;
}
export type SwapGasCostMultiplierChangedEvent = TypedEvent<
  [BigNumber],
  SwapGasCostMultiplierChangedEventObject
>;

export type SwapGasCostMultiplierChangedEventFilter =
  TypedEventFilter<SwapGasCostMultiplierChangedEvent>;

export interface WethForCardinalityChangedEventObject {
  _wethForCardinality: BigNumber;
}
export type WethForCardinalityChangedEvent = TypedEvent<
  [BigNumber],
  WethForCardinalityChangedEventObject
>;

export type WethForCardinalityChangedEventFilter =
  TypedEventFilter<WethForCardinalityChangedEvent>;

export interface WethForMaintenanceChangedEventObject {
  _wethForMaintenance: BigNumber;
}
export type WethForMaintenanceChangedEvent = TypedEvent<
  [BigNumber],
  WethForMaintenanceChangedEventObject
>;

export type WethForMaintenanceChangedEventFilter =
  TypedEventFilter<WethForMaintenanceChangedEvent>;

export interface IFeeManager extends BaseContract {
  connect(signerOrProvider: Signer | Provider | string): this;
  attach(addressOrName: string): this;
  deployed(): Promise<this>;

  interface: IFeeManagerInterface;

  queryFilter<TEvent extends TypedEvent>(
    event: TypedEventFilter<TEvent>,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined
  ): Promise<Array<TEvent>>;

  listeners<TEvent extends TypedEvent>(
    eventFilter?: TypedEventFilter<TEvent>
  ): Array<TypedListener<TEvent>>;
  listeners(eventName?: string): Array<Listener>;
  removeAllListeners<TEvent extends TypedEvent>(
    eventFilter: TypedEventFilter<TEvent>
  ): this;
  removeAllListeners(eventName?: string): this;
  off: OnEvent<this>;
  on: OnEvent<this>;
  once: OnEvent<this>;
  removeListener: OnEvent<this>;

  functions: {
    POOL_MANAGER_FACTORY(
      overrides?: CallOverrides
    ): Promise<[string] & { _poolManagerFactory: string }>;

    WETH(overrides?: CallOverrides): Promise<[string] & { _weth: string }>;

    cardinalityJob(
      overrides?: CallOverrides
    ): Promise<[string] & { _cardinalityJob: string }>;

    depositFromLockManager(
      _wethFees: PromiseOrValue<BigNumberish>,
      _tokenFees: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    depositFromPoolManager(
      _wethFees: PromiseOrValue<BigNumberish>,
      _tokenFees: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    fullRangeCallback(
      _pool: PromiseOrValue<string>,
      _token: PromiseOrValue<string>,
      _neededWeth: PromiseOrValue<BigNumberish>,
      _neededToken: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    getMaxCardinalityForPool(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { _maxCardinality: BigNumber }>;

    increaseCardinality(
      _poolManager: PromiseOrValue<string>,
      _weth: PromiseOrValue<BigNumberish>,
      _cardinality: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    increaseFullRangePosition(
      _pool: PromiseOrValue<string>,
      _token: PromiseOrValue<string>,
      _neededWeth: PromiseOrValue<BigNumberish>,
      _neededToken: PromiseOrValue<BigNumberish>,
      _isWethToken0: PromiseOrValue<boolean>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    maintenanceGovernance(
      overrides?: CallOverrides
    ): Promise<[string] & { _maintenanceGovernance: string }>;

    migrateFrom(
      _poolManager: PromiseOrValue<string>,
      _poolCardinality: IFeeManager.PoolCardinalityStruct,
      _poolManagerDeposits: IFeeManager.FeeStoreStruct,
      _poolDistributionFees: IFeeManager.PoolDistributionFeesStruct,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    migrateTo(
      _newFeeManager: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    poolCardinality(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, number, number] & {
        weth: BigNumber;
        currentMax: number;
        customMax: number;
      }
    >;

    poolCardinalityMax(
      overrides?: CallOverrides
    ): Promise<[number] & { _poolCardinalityMax: number }>;

    poolDistribution(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber, boolean] & {
        wethForMaintenance: BigNumber;
        wethForCardinality: BigNumber;
        isInitialized: boolean;
      }
    >;

    poolManagerDeposits(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber] & {
        wethForFullRange: BigNumber;
        tokenForFullRange: BigNumber;
      }
    >;

    setCardinalityJob(
      _cardinalityJob: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setMaintenanceGovernance(
      _maintenanceGovernance: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setPoolCardinalityMax(
      _poolCardinalityMax: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setPoolCardinalityTarget(
      _poolManager: PromiseOrValue<string>,
      _cardinality: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setSwapGasCostMultiplier(
      _swapGasCostMultiplier: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setWethForCardinality(
      _poolManager: PromiseOrValue<string>,
      _wethForCardinality: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    setWethForMaintenance(
      _poolManager: PromiseOrValue<string>,
      _wethForMaintenance: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;

    swapGasCostMultiplier(
      overrides?: CallOverrides
    ): Promise<[BigNumber] & { _swapGasCostMultiplier: BigNumber }>;

    uniswapV3SwapCallback(
      _amount0Delta: PromiseOrValue<BigNumberish>,
      _amount1Delta: PromiseOrValue<BigNumberish>,
      _data: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<ContractTransaction>;
  };

  POOL_MANAGER_FACTORY(overrides?: CallOverrides): Promise<string>;

  WETH(overrides?: CallOverrides): Promise<string>;

  cardinalityJob(overrides?: CallOverrides): Promise<string>;

  depositFromLockManager(
    _wethFees: PromiseOrValue<BigNumberish>,
    _tokenFees: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  depositFromPoolManager(
    _wethFees: PromiseOrValue<BigNumberish>,
    _tokenFees: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  fullRangeCallback(
    _pool: PromiseOrValue<string>,
    _token: PromiseOrValue<string>,
    _neededWeth: PromiseOrValue<BigNumberish>,
    _neededToken: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  getMaxCardinalityForPool(
    _poolManager: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  increaseCardinality(
    _poolManager: PromiseOrValue<string>,
    _weth: PromiseOrValue<BigNumberish>,
    _cardinality: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  increaseFullRangePosition(
    _pool: PromiseOrValue<string>,
    _token: PromiseOrValue<string>,
    _neededWeth: PromiseOrValue<BigNumberish>,
    _neededToken: PromiseOrValue<BigNumberish>,
    _isWethToken0: PromiseOrValue<boolean>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  maintenanceGovernance(overrides?: CallOverrides): Promise<string>;

  migrateFrom(
    _poolManager: PromiseOrValue<string>,
    _poolCardinality: IFeeManager.PoolCardinalityStruct,
    _poolManagerDeposits: IFeeManager.FeeStoreStruct,
    _poolDistributionFees: IFeeManager.PoolDistributionFeesStruct,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  migrateTo(
    _newFeeManager: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  poolCardinality(
    _poolManager: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<
    [BigNumber, number, number] & {
      weth: BigNumber;
      currentMax: number;
      customMax: number;
    }
  >;

  poolCardinalityMax(overrides?: CallOverrides): Promise<number>;

  poolDistribution(
    _poolManager: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<
    [BigNumber, BigNumber, boolean] & {
      wethForMaintenance: BigNumber;
      wethForCardinality: BigNumber;
      isInitialized: boolean;
    }
  >;

  poolManagerDeposits(
    _poolManager: PromiseOrValue<string>,
    overrides?: CallOverrides
  ): Promise<
    [BigNumber, BigNumber] & {
      wethForFullRange: BigNumber;
      tokenForFullRange: BigNumber;
    }
  >;

  setCardinalityJob(
    _cardinalityJob: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setMaintenanceGovernance(
    _maintenanceGovernance: PromiseOrValue<string>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setPoolCardinalityMax(
    _poolCardinalityMax: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setPoolCardinalityTarget(
    _poolManager: PromiseOrValue<string>,
    _cardinality: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setSwapGasCostMultiplier(
    _swapGasCostMultiplier: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setWethForCardinality(
    _poolManager: PromiseOrValue<string>,
    _wethForCardinality: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  setWethForMaintenance(
    _poolManager: PromiseOrValue<string>,
    _wethForMaintenance: PromiseOrValue<BigNumberish>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  swapGasCostMultiplier(overrides?: CallOverrides): Promise<BigNumber>;

  uniswapV3SwapCallback(
    _amount0Delta: PromiseOrValue<BigNumberish>,
    _amount1Delta: PromiseOrValue<BigNumberish>,
    _data: PromiseOrValue<BytesLike>,
    overrides?: Overrides & { from?: PromiseOrValue<string> }
  ): Promise<ContractTransaction>;

  callStatic: {
    POOL_MANAGER_FACTORY(overrides?: CallOverrides): Promise<string>;

    WETH(overrides?: CallOverrides): Promise<string>;

    cardinalityJob(overrides?: CallOverrides): Promise<string>;

    depositFromLockManager(
      _wethFees: PromiseOrValue<BigNumberish>,
      _tokenFees: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    depositFromPoolManager(
      _wethFees: PromiseOrValue<BigNumberish>,
      _tokenFees: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    fullRangeCallback(
      _pool: PromiseOrValue<string>,
      _token: PromiseOrValue<string>,
      _neededWeth: PromiseOrValue<BigNumberish>,
      _neededToken: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    getMaxCardinalityForPool(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    increaseCardinality(
      _poolManager: PromiseOrValue<string>,
      _weth: PromiseOrValue<BigNumberish>,
      _cardinality: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    increaseFullRangePosition(
      _pool: PromiseOrValue<string>,
      _token: PromiseOrValue<string>,
      _neededWeth: PromiseOrValue<BigNumberish>,
      _neededToken: PromiseOrValue<BigNumberish>,
      _isWethToken0: PromiseOrValue<boolean>,
      overrides?: CallOverrides
    ): Promise<void>;

    maintenanceGovernance(overrides?: CallOverrides): Promise<string>;

    migrateFrom(
      _poolManager: PromiseOrValue<string>,
      _poolCardinality: IFeeManager.PoolCardinalityStruct,
      _poolManagerDeposits: IFeeManager.FeeStoreStruct,
      _poolDistributionFees: IFeeManager.PoolDistributionFeesStruct,
      overrides?: CallOverrides
    ): Promise<void>;

    migrateTo(
      _newFeeManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    poolCardinality(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, number, number] & {
        weth: BigNumber;
        currentMax: number;
        customMax: number;
      }
    >;

    poolCardinalityMax(overrides?: CallOverrides): Promise<number>;

    poolDistribution(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber, boolean] & {
        wethForMaintenance: BigNumber;
        wethForCardinality: BigNumber;
        isInitialized: boolean;
      }
    >;

    poolManagerDeposits(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, BigNumber] & {
        wethForFullRange: BigNumber;
        tokenForFullRange: BigNumber;
      }
    >;

    setCardinalityJob(
      _cardinalityJob: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    setMaintenanceGovernance(
      _maintenanceGovernance: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<void>;

    setPoolCardinalityMax(
      _poolCardinalityMax: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    setPoolCardinalityTarget(
      _poolManager: PromiseOrValue<string>,
      _cardinality: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    setSwapGasCostMultiplier(
      _swapGasCostMultiplier: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    setWethForCardinality(
      _poolManager: PromiseOrValue<string>,
      _wethForCardinality: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    setWethForMaintenance(
      _poolManager: PromiseOrValue<string>,
      _wethForMaintenance: PromiseOrValue<BigNumberish>,
      overrides?: CallOverrides
    ): Promise<void>;

    swapGasCostMultiplier(overrides?: CallOverrides): Promise<BigNumber>;

    uniswapV3SwapCallback(
      _amount0Delta: PromiseOrValue<BigNumberish>,
      _amount1Delta: PromiseOrValue<BigNumberish>,
      _data: PromiseOrValue<BytesLike>,
      overrides?: CallOverrides
    ): Promise<void>;
  };

  filters: {
    "CardinalityJobSet(address)"(
      _cardinalityJob?: null
    ): CardinalityJobSetEventFilter;
    CardinalityJobSet(_cardinalityJob?: null): CardinalityJobSetEventFilter;

    "FeesDeposited(address,uint256,uint256,uint256,uint256)"(
      _poolManager?: null,
      _wethFees?: null,
      _tokenFees?: null,
      _wethForMaintenance?: null,
      _wethForCardinality?: null
    ): FeesDepositedEventFilter;
    FeesDeposited(
      _poolManager?: null,
      _wethFees?: null,
      _tokenFees?: null,
      _wethForMaintenance?: null,
      _wethForCardinality?: null
    ): FeesDepositedEventFilter;

    "MaintenanceGovernanceChanged(address)"(
      _maintenanceGovernance?: null
    ): MaintenanceGovernanceChangedEventFilter;
    MaintenanceGovernanceChanged(
      _maintenanceGovernance?: null
    ): MaintenanceGovernanceChangedEventFilter;

    "Migrated(address,address,address)"(
      _poolManager?: null,
      _oldFeeManager?: null,
      _newFeeManager?: null
    ): MigratedEventFilter;
    Migrated(
      _poolManager?: null,
      _oldFeeManager?: null,
      _newFeeManager?: null
    ): MigratedEventFilter;

    "SwapGasCostMultiplierChanged(uint256)"(
      _swapGasCostMultiplier?: null
    ): SwapGasCostMultiplierChangedEventFilter;
    SwapGasCostMultiplierChanged(
      _swapGasCostMultiplier?: null
    ): SwapGasCostMultiplierChangedEventFilter;

    "WethForCardinalityChanged(uint256)"(
      _wethForCardinality?: null
    ): WethForCardinalityChangedEventFilter;
    WethForCardinalityChanged(
      _wethForCardinality?: null
    ): WethForCardinalityChangedEventFilter;

    "WethForMaintenanceChanged(uint256)"(
      _wethForMaintenance?: null
    ): WethForMaintenanceChangedEventFilter;
    WethForMaintenanceChanged(
      _wethForMaintenance?: null
    ): WethForMaintenanceChangedEventFilter;
  };

  estimateGas: {
    POOL_MANAGER_FACTORY(overrides?: CallOverrides): Promise<BigNumber>;

    WETH(overrides?: CallOverrides): Promise<BigNumber>;

    cardinalityJob(overrides?: CallOverrides): Promise<BigNumber>;

    depositFromLockManager(
      _wethFees: PromiseOrValue<BigNumberish>,
      _tokenFees: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    depositFromPoolManager(
      _wethFees: PromiseOrValue<BigNumberish>,
      _tokenFees: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    fullRangeCallback(
      _pool: PromiseOrValue<string>,
      _token: PromiseOrValue<string>,
      _neededWeth: PromiseOrValue<BigNumberish>,
      _neededToken: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    getMaxCardinalityForPool(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    increaseCardinality(
      _poolManager: PromiseOrValue<string>,
      _weth: PromiseOrValue<BigNumberish>,
      _cardinality: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    increaseFullRangePosition(
      _pool: PromiseOrValue<string>,
      _token: PromiseOrValue<string>,
      _neededWeth: PromiseOrValue<BigNumberish>,
      _neededToken: PromiseOrValue<BigNumberish>,
      _isWethToken0: PromiseOrValue<boolean>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    maintenanceGovernance(overrides?: CallOverrides): Promise<BigNumber>;

    migrateFrom(
      _poolManager: PromiseOrValue<string>,
      _poolCardinality: IFeeManager.PoolCardinalityStruct,
      _poolManagerDeposits: IFeeManager.FeeStoreStruct,
      _poolDistributionFees: IFeeManager.PoolDistributionFeesStruct,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    migrateTo(
      _newFeeManager: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    poolCardinality(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    poolCardinalityMax(overrides?: CallOverrides): Promise<BigNumber>;

    poolDistribution(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    poolManagerDeposits(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    setCardinalityJob(
      _cardinalityJob: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setMaintenanceGovernance(
      _maintenanceGovernance: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setPoolCardinalityMax(
      _poolCardinalityMax: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setPoolCardinalityTarget(
      _poolManager: PromiseOrValue<string>,
      _cardinality: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setSwapGasCostMultiplier(
      _swapGasCostMultiplier: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setWethForCardinality(
      _poolManager: PromiseOrValue<string>,
      _wethForCardinality: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    setWethForMaintenance(
      _poolManager: PromiseOrValue<string>,
      _wethForMaintenance: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;

    swapGasCostMultiplier(overrides?: CallOverrides): Promise<BigNumber>;

    uniswapV3SwapCallback(
      _amount0Delta: PromiseOrValue<BigNumberish>,
      _amount1Delta: PromiseOrValue<BigNumberish>,
      _data: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<BigNumber>;
  };

  populateTransaction: {
    POOL_MANAGER_FACTORY(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    WETH(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    cardinalityJob(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    depositFromLockManager(
      _wethFees: PromiseOrValue<BigNumberish>,
      _tokenFees: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    depositFromPoolManager(
      _wethFees: PromiseOrValue<BigNumberish>,
      _tokenFees: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    fullRangeCallback(
      _pool: PromiseOrValue<string>,
      _token: PromiseOrValue<string>,
      _neededWeth: PromiseOrValue<BigNumberish>,
      _neededToken: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    getMaxCardinalityForPool(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    increaseCardinality(
      _poolManager: PromiseOrValue<string>,
      _weth: PromiseOrValue<BigNumberish>,
      _cardinality: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    increaseFullRangePosition(
      _pool: PromiseOrValue<string>,
      _token: PromiseOrValue<string>,
      _neededWeth: PromiseOrValue<BigNumberish>,
      _neededToken: PromiseOrValue<BigNumberish>,
      _isWethToken0: PromiseOrValue<boolean>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    maintenanceGovernance(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    migrateFrom(
      _poolManager: PromiseOrValue<string>,
      _poolCardinality: IFeeManager.PoolCardinalityStruct,
      _poolManagerDeposits: IFeeManager.FeeStoreStruct,
      _poolDistributionFees: IFeeManager.PoolDistributionFeesStruct,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    migrateTo(
      _newFeeManager: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    poolCardinality(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    poolCardinalityMax(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    poolDistribution(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    poolManagerDeposits(
      _poolManager: PromiseOrValue<string>,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    setCardinalityJob(
      _cardinalityJob: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setMaintenanceGovernance(
      _maintenanceGovernance: PromiseOrValue<string>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setPoolCardinalityMax(
      _poolCardinalityMax: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setPoolCardinalityTarget(
      _poolManager: PromiseOrValue<string>,
      _cardinality: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setSwapGasCostMultiplier(
      _swapGasCostMultiplier: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setWethForCardinality(
      _poolManager: PromiseOrValue<string>,
      _wethForCardinality: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    setWethForMaintenance(
      _poolManager: PromiseOrValue<string>,
      _wethForMaintenance: PromiseOrValue<BigNumberish>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;

    swapGasCostMultiplier(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    uniswapV3SwapCallback(
      _amount0Delta: PromiseOrValue<BigNumberish>,
      _amount1Delta: PromiseOrValue<BigNumberish>,
      _data: PromiseOrValue<BytesLike>,
      overrides?: Overrides & { from?: PromiseOrValue<string> }
    ): Promise<PopulatedTransaction>;
  };
}
