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

import {
  ethers,
  EventFilter,
  Signer,
  BigNumber,
  BigNumberish,
  PopulatedTransaction,
  BaseContract,
  ContractTransaction,
  Overrides,
  CallOverrides,
} from "ethers";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
import type {
  TypedEventFilter,
  TypedEvent,
  TypedListener,
  OnEvent,
} from "./common";

export interface TradeFactoryExecutorInterface extends ethers.utils.Interface {
  functions: {
    "DEFAULT_ADMIN_ROLE()": FunctionFragment;
    "MASTER_ADMIN()": FunctionFragment;
    "STRATEGY()": FunctionFragment;
    "STRATEGY_ADDER()": FunctionFragment;
    "SWAPPER_ADDER()": FunctionFragment;
    "SWAPPER_SETTER()": FunctionFragment;
    "TRADES_MODIFIER()": FunctionFragment;
    "TRADES_SETTLER()": FunctionFragment;
    "addSwappers(address[])": FunctionFragment;
    "cancelPendingTrades(uint256[])": FunctionFragment;
    "create(address,address,uint256,uint256)": FunctionFragment;
    "execute(uint256[],uint256)": FunctionFragment;
    "expire(uint256)": FunctionFragment;
    "getRoleAdmin(bytes32)": FunctionFragment;
    "grantRole(bytes32,address)": FunctionFragment;
    "hasRole(bytes32,address)": FunctionFragment;
    "isMechanic(address)": FunctionFragment;
    "isSwapper(address)": FunctionFragment;
    "mechanicsRegistry()": FunctionFragment;
    "mergePendingTrades(uint256,uint256[])": FunctionFragment;
    "otcPool()": FunctionFragment;
    "pendingTradesById(uint256)": FunctionFragment;
    "pendingTradesIds(address)": FunctionFragment;
    "removeSwappers(address[])": FunctionFragment;
    "renounceRole(bytes32,address)": FunctionFragment;
    "revokeRole(bytes32,address)": FunctionFragment;
    "setMechanicsRegistry(address)": FunctionFragment;
    "setOTCPool(address)": FunctionFragment;
    "setStrategyPermissions(address,bytes1)": FunctionFragment;
    "setStrategySyncSwapper(address,address)": FunctionFragment;
    "strategyPermissions(address)": FunctionFragment;
    "strategySyncSwapper(address)": FunctionFragment;
    "supportsInterface(bytes4)": FunctionFragment;
    "swapperStrategies(address)": FunctionFragment;
    "swappers()": FunctionFragment;
  };

  encodeFunctionData(
    functionFragment: "DEFAULT_ADMIN_ROLE",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "MASTER_ADMIN",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "STRATEGY", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "STRATEGY_ADDER",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "SWAPPER_ADDER",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "SWAPPER_SETTER",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "TRADES_MODIFIER",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "TRADES_SETTLER",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "addSwappers",
    values: [string[]]
  ): string;
  encodeFunctionData(
    functionFragment: "cancelPendingTrades",
    values: [BigNumberish[]]
  ): string;
  encodeFunctionData(
    functionFragment: "create",
    values: [string, string, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "execute",
    values: [BigNumberish[], BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "expire",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getRoleAdmin",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "grantRole",
    values: [BytesLike, string]
  ): string;
  encodeFunctionData(
    functionFragment: "hasRole",
    values: [BytesLike, string]
  ): string;
  encodeFunctionData(functionFragment: "isMechanic", values: [string]): string;
  encodeFunctionData(functionFragment: "isSwapper", values: [string]): string;
  encodeFunctionData(
    functionFragment: "mechanicsRegistry",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "mergePendingTrades",
    values: [BigNumberish, BigNumberish[]]
  ): string;
  encodeFunctionData(functionFragment: "otcPool", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "pendingTradesById",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "pendingTradesIds",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "removeSwappers",
    values: [string[]]
  ): string;
  encodeFunctionData(
    functionFragment: "renounceRole",
    values: [BytesLike, string]
  ): string;
  encodeFunctionData(
    functionFragment: "revokeRole",
    values: [BytesLike, string]
  ): string;
  encodeFunctionData(
    functionFragment: "setMechanicsRegistry",
    values: [string]
  ): string;
  encodeFunctionData(functionFragment: "setOTCPool", values: [string]): string;
  encodeFunctionData(
    functionFragment: "setStrategyPermissions",
    values: [string, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "setStrategySyncSwapper",
    values: [string, string]
  ): string;
  encodeFunctionData(
    functionFragment: "strategyPermissions",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "strategySyncSwapper",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "supportsInterface",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "swapperStrategies",
    values: [string]
  ): string;
  encodeFunctionData(functionFragment: "swappers", values?: undefined): string;

  decodeFunctionResult(
    functionFragment: "DEFAULT_ADMIN_ROLE",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "MASTER_ADMIN",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "STRATEGY", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "STRATEGY_ADDER",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "SWAPPER_ADDER",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "SWAPPER_SETTER",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "TRADES_MODIFIER",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "TRADES_SETTLER",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "addSwappers",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "cancelPendingTrades",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "create", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "expire", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "getRoleAdmin",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "isMechanic", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "isSwapper", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "mechanicsRegistry",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "mergePendingTrades",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "otcPool", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "pendingTradesById",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "pendingTradesIds",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "removeSwappers",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "renounceRole",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "setMechanicsRegistry",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "setOTCPool", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "setStrategyPermissions",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setStrategySyncSwapper",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "strategyPermissions",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "strategySyncSwapper",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "supportsInterface",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "swapperStrategies",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "swappers", data: BytesLike): Result;

  events: {
    "AsyncOTCTradesExecuted(uint256[],uint256)": EventFragment;
    "AsyncStrategySwapperSet(address,address)": EventFragment;
    "AsyncTradeExecuted(uint256,uint256)": EventFragment;
    "AsyncTradeExpired(uint256)": EventFragment;
    "AsyncTradesMatched(uint256,uint256,uint256,uint256)": EventFragment;
    "OTCPoolSet(address)": EventFragment;
    "RoleAdminChanged(bytes32,bytes32,bytes32)": EventFragment;
    "RoleGranted(bytes32,address,address)": EventFragment;
    "RoleRevoked(bytes32,address,address)": EventFragment;
    "StrategyPermissionsSet(address,bytes1)": EventFragment;
    "SwapperAndTokenEnabled(address,address)": EventFragment;
    "SwappersAdded(address[])": EventFragment;
    "SwappersRemoved(address[])": EventFragment;
    "SyncStrategySwapperSet(address,address)": EventFragment;
    "SyncTradeExecuted(address,address,address,address,uint256,uint256,bytes,uint256)": EventFragment;
    "TradeCreated(uint256,address,address,address,uint256,uint256)": EventFragment;
    "TradesCanceled(address,uint256[])": EventFragment;
    "TradesMerged(uint256,uint256[])": EventFragment;
    "TradesSwapperChanged(uint256[],address)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "AsyncOTCTradesExecuted"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "AsyncStrategySwapperSet"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "AsyncTradeExecuted"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "AsyncTradeExpired"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "AsyncTradesMatched"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "OTCPoolSet"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "RoleAdminChanged"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "RoleGranted"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "RoleRevoked"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "StrategyPermissionsSet"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "SwapperAndTokenEnabled"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "SwappersAdded"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "SwappersRemoved"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "SyncStrategySwapperSet"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "SyncTradeExecuted"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "TradeCreated"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "TradesCanceled"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "TradesMerged"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "TradesSwapperChanged"): EventFragment;
}

export type AsyncOTCTradesExecutedEvent = TypedEvent<
  [BigNumber[], BigNumber],
  { _ids: BigNumber[]; _rateTokenInToOut: BigNumber }
>;

export type AsyncOTCTradesExecutedEventFilter =
  TypedEventFilter<AsyncOTCTradesExecutedEvent>;

export type AsyncStrategySwapperSetEvent = TypedEvent<
  [string, string],
  { _strategy: string; _swapper: string }
>;

export type AsyncStrategySwapperSetEventFilter =
  TypedEventFilter<AsyncStrategySwapperSetEvent>;

export type AsyncTradeExecutedEvent = TypedEvent<
  [BigNumber, BigNumber],
  { _id: BigNumber; _receivedAmount: BigNumber }
>;

export type AsyncTradeExecutedEventFilter =
  TypedEventFilter<AsyncTradeExecutedEvent>;

export type AsyncTradeExpiredEvent = TypedEvent<
  [BigNumber],
  { _id: BigNumber }
>;

export type AsyncTradeExpiredEventFilter =
  TypedEventFilter<AsyncTradeExpiredEvent>;

export type AsyncTradesMatchedEvent = TypedEvent<
  [BigNumber, BigNumber, BigNumber, BigNumber],
  {
    _firstTradeId: BigNumber;
    _secondTradeId: BigNumber;
    _consumedFirstTrade: BigNumber;
    _consumedSecondTrade: BigNumber;
  }
>;

export type AsyncTradesMatchedEventFilter =
  TypedEventFilter<AsyncTradesMatchedEvent>;

export type OTCPoolSetEvent = TypedEvent<[string], { _otcPool: string }>;

export type OTCPoolSetEventFilter = TypedEventFilter<OTCPoolSetEvent>;

export type RoleAdminChangedEvent = TypedEvent<
  [string, string, string],
  { role: string; previousAdminRole: string; newAdminRole: string }
>;

export type RoleAdminChangedEventFilter =
  TypedEventFilter<RoleAdminChangedEvent>;

export type RoleGrantedEvent = TypedEvent<
  [string, string, string],
  { role: string; account: string; sender: string }
>;

export type RoleGrantedEventFilter = TypedEventFilter<RoleGrantedEvent>;

export type RoleRevokedEvent = TypedEvent<
  [string, string, string],
  { role: string; account: string; sender: string }
>;

export type RoleRevokedEventFilter = TypedEventFilter<RoleRevokedEvent>;

export type StrategyPermissionsSetEvent = TypedEvent<
  [string, string],
  { _strategy: string; _permissions: string }
>;

export type StrategyPermissionsSetEventFilter =
  TypedEventFilter<StrategyPermissionsSetEvent>;

export type SwapperAndTokenEnabledEvent = TypedEvent<
  [string, string],
  { _swapper: string; _token: string }
>;

export type SwapperAndTokenEnabledEventFilter =
  TypedEventFilter<SwapperAndTokenEnabledEvent>;

export type SwappersAddedEvent = TypedEvent<
  [string[]],
  { _swappers: string[] }
>;

export type SwappersAddedEventFilter = TypedEventFilter<SwappersAddedEvent>;

export type SwappersRemovedEvent = TypedEvent<
  [string[]],
  { _swapper: string[] }
>;

export type SwappersRemovedEventFilter = TypedEventFilter<SwappersRemovedEvent>;

export type SyncStrategySwapperSetEvent = TypedEvent<
  [string, string],
  { _strategy: string; _swapper: string }
>;

export type SyncStrategySwapperSetEventFilter =
  TypedEventFilter<SyncStrategySwapperSetEvent>;

export type SyncTradeExecutedEvent = TypedEvent<
  [string, string, string, string, BigNumber, BigNumber, string, BigNumber],
  {
    _strategy: string;
    _swapper: string;
    _tokenIn: string;
    _tokenOut: string;
    _amountIn: BigNumber;
    _maxSlippage: BigNumber;
    _data: string;
    _receivedAmount: BigNumber;
  }
>;

export type SyncTradeExecutedEventFilter =
  TypedEventFilter<SyncTradeExecutedEvent>;

export type TradeCreatedEvent = TypedEvent<
  [BigNumber, string, string, string, BigNumber, BigNumber],
  {
    _id: BigNumber;
    _strategy: string;
    _tokenIn: string;
    _tokenOut: string;
    _amountIn: BigNumber;
    _deadline: BigNumber;
  }
>;

export type TradeCreatedEventFilter = TypedEventFilter<TradeCreatedEvent>;

export type TradesCanceledEvent = TypedEvent<
  [string, BigNumber[]],
  { _strategy: string; _ids: BigNumber[] }
>;

export type TradesCanceledEventFilter = TypedEventFilter<TradesCanceledEvent>;

export type TradesMergedEvent = TypedEvent<
  [BigNumber, BigNumber[]],
  { _anchorTrade: BigNumber; _ids: BigNumber[] }
>;

export type TradesMergedEventFilter = TypedEventFilter<TradesMergedEvent>;

export type TradesSwapperChangedEvent = TypedEvent<
  [BigNumber[], string],
  { _ids: BigNumber[]; _newSwapper: string }
>;

export type TradesSwapperChangedEventFilter =
  TypedEventFilter<TradesSwapperChangedEvent>;

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

  interface: TradeFactoryExecutorInterface;

  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: {
    DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<[string]>;

    MASTER_ADMIN(overrides?: CallOverrides): Promise<[string]>;

    STRATEGY(overrides?: CallOverrides): Promise<[string]>;

    STRATEGY_ADDER(overrides?: CallOverrides): Promise<[string]>;

    SWAPPER_ADDER(overrides?: CallOverrides): Promise<[string]>;

    SWAPPER_SETTER(overrides?: CallOverrides): Promise<[string]>;

    TRADES_MODIFIER(overrides?: CallOverrides): Promise<[string]>;

    TRADES_SETTLER(overrides?: CallOverrides): Promise<[string]>;

    addSwappers(
      __swappers: string[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    cancelPendingTrades(
      _ids: BigNumberish[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    create(
      _tokenIn: string,
      _tokenOut: string,
      _amountIn: BigNumberish,
      _deadline: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    "execute(uint256[],uint256)"(
      _ids: BigNumberish[],
      _rateTokenInToOut: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    "execute(uint256,address,uint256,bytes)"(
      _id: BigNumberish,
      _swapper: string,
      _minAmountOut: BigNumberish,
      _data: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    "execute(uint256,uint256,uint256,uint256)"(
      _firstTradeId: BigNumberish,
      _secondTradeId: BigNumberish,
      _consumedFirstTrade: BigNumberish,
      _consumedSecondTrade: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    "execute(address,address,uint256,uint256,bytes)"(
      _tokenIn: string,
      _tokenOut: string,
      _amountIn: BigNumberish,
      _maxSlippage: BigNumberish,
      _data: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    expire(
      _id: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise<[string]>;

    grantRole(
      role: BytesLike,
      account: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    hasRole(
      role: BytesLike,
      account: string,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    isMechanic(
      _mechanic: string,
      overrides?: CallOverrides
    ): Promise<[boolean] & { _isMechanic: boolean }>;

    isSwapper(
      _swapper: string,
      overrides?: CallOverrides
    ): Promise<[boolean] & { _isSwapper: boolean }>;

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

    mergePendingTrades(
      _anchorTradeId: BigNumberish,
      _toMergeIds: BigNumberish[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    otcPool(overrides?: CallOverrides): Promise<[string]>;

    pendingTradesById(
      arg0: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, string, string, string, BigNumber, BigNumber] & {
        _id: BigNumber;
        _strategy: string;
        _tokenIn: string;
        _tokenOut: string;
        _amountIn: BigNumber;
        _deadline: BigNumber;
      }
    >;

    "pendingTradesIds(address)"(
      _strategy: string,
      overrides?: CallOverrides
    ): Promise<[BigNumber[]] & { _pendingIds: BigNumber[] }>;

    "pendingTradesIds()"(
      overrides?: CallOverrides
    ): Promise<[BigNumber[]] & { _pendingIds: BigNumber[] }>;

    removeSwappers(
      __swappers: string[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    renounceRole(
      role: BytesLike,
      account: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    revokeRole(
      role: BytesLike,
      account: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    setMechanicsRegistry(
      _mechanicsRegistry: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    setOTCPool(
      _otcPool: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    setStrategyPermissions(
      _strategy: string,
      _permissions: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    setStrategySyncSwapper(
      _strategy: string,
      _swapper: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    strategyPermissions(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<[string]>;

    strategySyncSwapper(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<[string]>;

    supportsInterface(
      interfaceId: BytesLike,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

    swapperStrategies(
      _swapper: string,
      overrides?: CallOverrides
    ): Promise<[string[]] & { _strategies: string[] }>;

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

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

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

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

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

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

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

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

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

  addSwappers(
    __swappers: string[],
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  cancelPendingTrades(
    _ids: BigNumberish[],
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  create(
    _tokenIn: string,
    _tokenOut: string,
    _amountIn: BigNumberish,
    _deadline: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  "execute(uint256[],uint256)"(
    _ids: BigNumberish[],
    _rateTokenInToOut: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  "execute(uint256,address,uint256,bytes)"(
    _id: BigNumberish,
    _swapper: string,
    _minAmountOut: BigNumberish,
    _data: BytesLike,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  "execute(uint256,uint256,uint256,uint256)"(
    _firstTradeId: BigNumberish,
    _secondTradeId: BigNumberish,
    _consumedFirstTrade: BigNumberish,
    _consumedSecondTrade: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  "execute(address,address,uint256,uint256,bytes)"(
    _tokenIn: string,
    _tokenOut: string,
    _amountIn: BigNumberish,
    _maxSlippage: BigNumberish,
    _data: BytesLike,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  expire(
    _id: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise<string>;

  grantRole(
    role: BytesLike,
    account: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  hasRole(
    role: BytesLike,
    account: string,
    overrides?: CallOverrides
  ): Promise<boolean>;

  isMechanic(_mechanic: string, overrides?: CallOverrides): Promise<boolean>;

  isSwapper(_swapper: string, overrides?: CallOverrides): Promise<boolean>;

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

  mergePendingTrades(
    _anchorTradeId: BigNumberish,
    _toMergeIds: BigNumberish[],
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

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

  pendingTradesById(
    arg0: BigNumberish,
    overrides?: CallOverrides
  ): Promise<
    [BigNumber, string, string, string, BigNumber, BigNumber] & {
      _id: BigNumber;
      _strategy: string;
      _tokenIn: string;
      _tokenOut: string;
      _amountIn: BigNumber;
      _deadline: BigNumber;
    }
  >;

  "pendingTradesIds(address)"(
    _strategy: string,
    overrides?: CallOverrides
  ): Promise<BigNumber[]>;

  "pendingTradesIds()"(overrides?: CallOverrides): Promise<BigNumber[]>;

  removeSwappers(
    __swappers: string[],
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  renounceRole(
    role: BytesLike,
    account: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  revokeRole(
    role: BytesLike,
    account: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  setMechanicsRegistry(
    _mechanicsRegistry: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  setOTCPool(
    _otcPool: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  setStrategyPermissions(
    _strategy: string,
    _permissions: BytesLike,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  setStrategySyncSwapper(
    _strategy: string,
    _swapper: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  strategyPermissions(arg0: string, overrides?: CallOverrides): Promise<string>;

  strategySyncSwapper(arg0: string, overrides?: CallOverrides): Promise<string>;

  supportsInterface(
    interfaceId: BytesLike,
    overrides?: CallOverrides
  ): Promise<boolean>;

  swapperStrategies(
    _swapper: string,
    overrides?: CallOverrides
  ): Promise<string[]>;

  swappers(overrides?: CallOverrides): Promise<string[]>;

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

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

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

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

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

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

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

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

    addSwappers(__swappers: string[], overrides?: CallOverrides): Promise<void>;

    cancelPendingTrades(
      _ids: BigNumberish[],
      overrides?: CallOverrides
    ): Promise<void>;

    create(
      _tokenIn: string,
      _tokenOut: string,
      _amountIn: BigNumberish,
      _deadline: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    "execute(uint256[],uint256)"(
      _ids: BigNumberish[],
      _rateTokenInToOut: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    "execute(uint256,address,uint256,bytes)"(
      _id: BigNumberish,
      _swapper: string,
      _minAmountOut: BigNumberish,
      _data: BytesLike,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    "execute(uint256,uint256,uint256,uint256)"(
      _firstTradeId: BigNumberish,
      _secondTradeId: BigNumberish,
      _consumedFirstTrade: BigNumberish,
      _consumedSecondTrade: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    "execute(address,address,uint256,uint256,bytes)"(
      _tokenIn: string,
      _tokenOut: string,
      _amountIn: BigNumberish,
      _maxSlippage: BigNumberish,
      _data: BytesLike,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    expire(_id: BigNumberish, overrides?: CallOverrides): Promise<BigNumber>;

    getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise<string>;

    grantRole(
      role: BytesLike,
      account: string,
      overrides?: CallOverrides
    ): Promise<void>;

    hasRole(
      role: BytesLike,
      account: string,
      overrides?: CallOverrides
    ): Promise<boolean>;

    isMechanic(_mechanic: string, overrides?: CallOverrides): Promise<boolean>;

    isSwapper(_swapper: string, overrides?: CallOverrides): Promise<boolean>;

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

    mergePendingTrades(
      _anchorTradeId: BigNumberish,
      _toMergeIds: BigNumberish[],
      overrides?: CallOverrides
    ): Promise<void>;

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

    pendingTradesById(
      arg0: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [BigNumber, string, string, string, BigNumber, BigNumber] & {
        _id: BigNumber;
        _strategy: string;
        _tokenIn: string;
        _tokenOut: string;
        _amountIn: BigNumber;
        _deadline: BigNumber;
      }
    >;

    "pendingTradesIds(address)"(
      _strategy: string,
      overrides?: CallOverrides
    ): Promise<BigNumber[]>;

    "pendingTradesIds()"(overrides?: CallOverrides): Promise<BigNumber[]>;

    removeSwappers(
      __swappers: string[],
      overrides?: CallOverrides
    ): Promise<void>;

    renounceRole(
      role: BytesLike,
      account: string,
      overrides?: CallOverrides
    ): Promise<void>;

    revokeRole(
      role: BytesLike,
      account: string,
      overrides?: CallOverrides
    ): Promise<void>;

    setMechanicsRegistry(
      _mechanicsRegistry: string,
      overrides?: CallOverrides
    ): Promise<void>;

    setOTCPool(_otcPool: string, overrides?: CallOverrides): Promise<void>;

    setStrategyPermissions(
      _strategy: string,
      _permissions: BytesLike,
      overrides?: CallOverrides
    ): Promise<void>;

    setStrategySyncSwapper(
      _strategy: string,
      _swapper: string,
      overrides?: CallOverrides
    ): Promise<void>;

    strategyPermissions(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<string>;

    strategySyncSwapper(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<string>;

    supportsInterface(
      interfaceId: BytesLike,
      overrides?: CallOverrides
    ): Promise<boolean>;

    swapperStrategies(
      _swapper: string,
      overrides?: CallOverrides
    ): Promise<string[]>;

    swappers(overrides?: CallOverrides): Promise<string[]>;
  };

  filters: {
    "AsyncOTCTradesExecuted(uint256[],uint256)"(
      _ids?: null,
      _rateTokenInToOut?: null
    ): AsyncOTCTradesExecutedEventFilter;
    AsyncOTCTradesExecuted(
      _ids?: null,
      _rateTokenInToOut?: null
    ): AsyncOTCTradesExecutedEventFilter;

    "AsyncStrategySwapperSet(address,address)"(
      _strategy?: string | null,
      _swapper?: null
    ): AsyncStrategySwapperSetEventFilter;
    AsyncStrategySwapperSet(
      _strategy?: string | null,
      _swapper?: null
    ): AsyncStrategySwapperSetEventFilter;

    "AsyncTradeExecuted(uint256,uint256)"(
      _id?: BigNumberish | null,
      _receivedAmount?: null
    ): AsyncTradeExecutedEventFilter;
    AsyncTradeExecuted(
      _id?: BigNumberish | null,
      _receivedAmount?: null
    ): AsyncTradeExecutedEventFilter;

    "AsyncTradeExpired(uint256)"(
      _id?: BigNumberish | null
    ): AsyncTradeExpiredEventFilter;
    AsyncTradeExpired(_id?: BigNumberish | null): AsyncTradeExpiredEventFilter;

    "AsyncTradesMatched(uint256,uint256,uint256,uint256)"(
      _firstTradeId?: BigNumberish | null,
      _secondTradeId?: BigNumberish | null,
      _consumedFirstTrade?: null,
      _consumedSecondTrade?: null
    ): AsyncTradesMatchedEventFilter;
    AsyncTradesMatched(
      _firstTradeId?: BigNumberish | null,
      _secondTradeId?: BigNumberish | null,
      _consumedFirstTrade?: null,
      _consumedSecondTrade?: null
    ): AsyncTradesMatchedEventFilter;

    "OTCPoolSet(address)"(_otcPool?: null): OTCPoolSetEventFilter;
    OTCPoolSet(_otcPool?: null): OTCPoolSetEventFilter;

    "RoleAdminChanged(bytes32,bytes32,bytes32)"(
      role?: BytesLike | null,
      previousAdminRole?: BytesLike | null,
      newAdminRole?: BytesLike | null
    ): RoleAdminChangedEventFilter;
    RoleAdminChanged(
      role?: BytesLike | null,
      previousAdminRole?: BytesLike | null,
      newAdminRole?: BytesLike | null
    ): RoleAdminChangedEventFilter;

    "RoleGranted(bytes32,address,address)"(
      role?: BytesLike | null,
      account?: string | null,
      sender?: string | null
    ): RoleGrantedEventFilter;
    RoleGranted(
      role?: BytesLike | null,
      account?: string | null,
      sender?: string | null
    ): RoleGrantedEventFilter;

    "RoleRevoked(bytes32,address,address)"(
      role?: BytesLike | null,
      account?: string | null,
      sender?: string | null
    ): RoleRevokedEventFilter;
    RoleRevoked(
      role?: BytesLike | null,
      account?: string | null,
      sender?: string | null
    ): RoleRevokedEventFilter;

    "StrategyPermissionsSet(address,bytes1)"(
      _strategy?: string | null,
      _permissions?: null
    ): StrategyPermissionsSetEventFilter;
    StrategyPermissionsSet(
      _strategy?: string | null,
      _permissions?: null
    ): StrategyPermissionsSetEventFilter;

    "SwapperAndTokenEnabled(address,address)"(
      _swapper?: string | null,
      _token?: null
    ): SwapperAndTokenEnabledEventFilter;
    SwapperAndTokenEnabled(
      _swapper?: string | null,
      _token?: null
    ): SwapperAndTokenEnabledEventFilter;

    "SwappersAdded(address[])"(_swappers?: null): SwappersAddedEventFilter;
    SwappersAdded(_swappers?: null): SwappersAddedEventFilter;

    "SwappersRemoved(address[])"(_swapper?: null): SwappersRemovedEventFilter;
    SwappersRemoved(_swapper?: null): SwappersRemovedEventFilter;

    "SyncStrategySwapperSet(address,address)"(
      _strategy?: string | null,
      _swapper?: null
    ): SyncStrategySwapperSetEventFilter;
    SyncStrategySwapperSet(
      _strategy?: string | null,
      _swapper?: null
    ): SyncStrategySwapperSetEventFilter;

    "SyncTradeExecuted(address,address,address,address,uint256,uint256,bytes,uint256)"(
      _strategy?: string | null,
      _swapper?: string | null,
      _tokenIn?: null,
      _tokenOut?: null,
      _amountIn?: null,
      _maxSlippage?: null,
      _data?: null,
      _receivedAmount?: null
    ): SyncTradeExecutedEventFilter;
    SyncTradeExecuted(
      _strategy?: string | null,
      _swapper?: string | null,
      _tokenIn?: null,
      _tokenOut?: null,
      _amountIn?: null,
      _maxSlippage?: null,
      _data?: null,
      _receivedAmount?: null
    ): SyncTradeExecutedEventFilter;

    "TradeCreated(uint256,address,address,address,uint256,uint256)"(
      _id?: BigNumberish | null,
      _strategy?: null,
      _tokenIn?: null,
      _tokenOut?: null,
      _amountIn?: null,
      _deadline?: null
    ): TradeCreatedEventFilter;
    TradeCreated(
      _id?: BigNumberish | null,
      _strategy?: null,
      _tokenIn?: null,
      _tokenOut?: null,
      _amountIn?: null,
      _deadline?: null
    ): TradeCreatedEventFilter;

    "TradesCanceled(address,uint256[])"(
      _strategy?: string | null,
      _ids?: null
    ): TradesCanceledEventFilter;
    TradesCanceled(
      _strategy?: string | null,
      _ids?: null
    ): TradesCanceledEventFilter;

    "TradesMerged(uint256,uint256[])"(
      _anchorTrade?: BigNumberish | null,
      _ids?: null
    ): TradesMergedEventFilter;
    TradesMerged(
      _anchorTrade?: BigNumberish | null,
      _ids?: null
    ): TradesMergedEventFilter;

    "TradesSwapperChanged(uint256[],address)"(
      _ids?: null,
      _newSwapper?: null
    ): TradesSwapperChangedEventFilter;
    TradesSwapperChanged(
      _ids?: null,
      _newSwapper?: null
    ): TradesSwapperChangedEventFilter;
  };

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

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

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

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

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

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

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

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

    addSwappers(
      __swappers: string[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    cancelPendingTrades(
      _ids: BigNumberish[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    create(
      _tokenIn: string,
      _tokenOut: string,
      _amountIn: BigNumberish,
      _deadline: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    "execute(uint256[],uint256)"(
      _ids: BigNumberish[],
      _rateTokenInToOut: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    "execute(uint256,address,uint256,bytes)"(
      _id: BigNumberish,
      _swapper: string,
      _minAmountOut: BigNumberish,
      _data: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    "execute(uint256,uint256,uint256,uint256)"(
      _firstTradeId: BigNumberish,
      _secondTradeId: BigNumberish,
      _consumedFirstTrade: BigNumberish,
      _consumedSecondTrade: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    "execute(address,address,uint256,uint256,bytes)"(
      _tokenIn: string,
      _tokenOut: string,
      _amountIn: BigNumberish,
      _maxSlippage: BigNumberish,
      _data: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    expire(
      _id: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    getRoleAdmin(
      role: BytesLike,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    grantRole(
      role: BytesLike,
      account: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    hasRole(
      role: BytesLike,
      account: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isMechanic(
      _mechanic: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    isSwapper(_swapper: string, overrides?: CallOverrides): Promise<BigNumber>;

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

    mergePendingTrades(
      _anchorTradeId: BigNumberish,
      _toMergeIds: BigNumberish[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

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

    pendingTradesById(
      arg0: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    "pendingTradesIds(address)"(
      _strategy: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    "pendingTradesIds()"(overrides?: CallOverrides): Promise<BigNumber>;

    removeSwappers(
      __swappers: string[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    renounceRole(
      role: BytesLike,
      account: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    revokeRole(
      role: BytesLike,
      account: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    setMechanicsRegistry(
      _mechanicsRegistry: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    setOTCPool(
      _otcPool: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    setStrategyPermissions(
      _strategy: string,
      _permissions: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    setStrategySyncSwapper(
      _strategy: string,
      _swapper: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    strategyPermissions(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    strategySyncSwapper(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    supportsInterface(
      interfaceId: BytesLike,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    swapperStrategies(
      _swapper: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    swappers(overrides?: CallOverrides): Promise<BigNumber>;
  };

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

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

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

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

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

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

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

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

    addSwappers(
      __swappers: string[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    cancelPendingTrades(
      _ids: BigNumberish[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    create(
      _tokenIn: string,
      _tokenOut: string,
      _amountIn: BigNumberish,
      _deadline: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    "execute(uint256[],uint256)"(
      _ids: BigNumberish[],
      _rateTokenInToOut: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    "execute(uint256,address,uint256,bytes)"(
      _id: BigNumberish,
      _swapper: string,
      _minAmountOut: BigNumberish,
      _data: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    "execute(uint256,uint256,uint256,uint256)"(
      _firstTradeId: BigNumberish,
      _secondTradeId: BigNumberish,
      _consumedFirstTrade: BigNumberish,
      _consumedSecondTrade: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    "execute(address,address,uint256,uint256,bytes)"(
      _tokenIn: string,
      _tokenOut: string,
      _amountIn: BigNumberish,
      _maxSlippage: BigNumberish,
      _data: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    expire(
      _id: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    getRoleAdmin(
      role: BytesLike,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    grantRole(
      role: BytesLike,
      account: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    hasRole(
      role: BytesLike,
      account: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isMechanic(
      _mechanic: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    isSwapper(
      _swapper: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

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

    mergePendingTrades(
      _anchorTradeId: BigNumberish,
      _toMergeIds: BigNumberish[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

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

    pendingTradesById(
      arg0: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    "pendingTradesIds(address)"(
      _strategy: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    "pendingTradesIds()"(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    removeSwappers(
      __swappers: string[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    renounceRole(
      role: BytesLike,
      account: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    revokeRole(
      role: BytesLike,
      account: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    setMechanicsRegistry(
      _mechanicsRegistry: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    setOTCPool(
      _otcPool: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    setStrategyPermissions(
      _strategy: string,
      _permissions: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    setStrategySyncSwapper(
      _strategy: string,
      _swapper: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    strategyPermissions(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    strategySyncSwapper(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    supportsInterface(
      interfaceId: BytesLike,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    swapperStrategies(
      _swapper: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    swappers(overrides?: CallOverrides): Promise<PopulatedTransaction>;
  };
}
