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 interface PoolTogetherV3MultiTokenListenerInterface extends utils.Interface {
    functions: {
        'addAddresses(address[])': FunctionFragment;
        'addressType()': FunctionFragment;
        'beforeTokenMint(address,uint256,address,address)': FunctionFragment;
        'beforeTokenTransfer(address,address,uint256,address)': FunctionFragment;
        'clearAll()': FunctionFragment;
        'contains(address)': FunctionFragment;
        'end()': FunctionFragment;
        'freeze()': FunctionFragment;
        'getAddresses()': FunctionFragment;
        'initialize(address)': FunctionFragment;
        'next(address)': FunctionFragment;
        'owner()': FunctionFragment;
        'removeAddress(address,address)': FunctionFragment;
        'renounceOwnership()': FunctionFragment;
        'start()': FunctionFragment;
        'supportsInterface(bytes4)': FunctionFragment;
        'transferOwnership(address)': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'addAddresses' | 'addressType' | 'beforeTokenMint' | 'beforeTokenTransfer' | 'clearAll' | 'contains' | 'end' | 'freeze' | 'getAddresses' | 'initialize' | 'next' | 'owner' | 'removeAddress' | 'renounceOwnership' | 'start' | 'supportsInterface' | 'transferOwnership'): FunctionFragment;
    encodeFunctionData(functionFragment: 'addAddresses', values: [PromiseOrValue<string>[]]): string;
    encodeFunctionData(functionFragment: 'addressType', values?: undefined): string;
    encodeFunctionData(functionFragment: 'beforeTokenMint', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'beforeTokenTransfer', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'clearAll', values?: undefined): string;
    encodeFunctionData(functionFragment: 'contains', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'end', values?: undefined): string;
    encodeFunctionData(functionFragment: 'freeze', values?: undefined): string;
    encodeFunctionData(functionFragment: 'getAddresses', values?: undefined): string;
    encodeFunctionData(functionFragment: 'initialize', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'next', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'owner', values?: undefined): string;
    encodeFunctionData(functionFragment: 'removeAddress', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'renounceOwnership', values?: undefined): string;
    encodeFunctionData(functionFragment: 'start', values?: undefined): string;
    encodeFunctionData(functionFragment: 'supportsInterface', values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: 'transferOwnership', values: [PromiseOrValue<string>]): string;
    decodeFunctionResult(functionFragment: 'addAddresses', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'addressType', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'beforeTokenMint', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'beforeTokenTransfer', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'clearAll', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'contains', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'end', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'freeze', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'getAddresses', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'next', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'removeAddress', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'renounceOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'start', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'supportsInterface', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'transferOwnership', data: BytesLike): Result;
    events: {
        'AddressAdded(address)': EventFragment;
        'AddressRemoved(address)': EventFragment;
        'AllAddressesCleared()': EventFragment;
        'OwnershipTransferred(address,address)': EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: 'AddressAdded'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'AddressRemoved'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'AllAddressesCleared'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'OwnershipTransferred'): EventFragment;
}
export interface AddressAddedEventObject {
    _address: string;
}
export declare type AddressAddedEvent = TypedEvent<[string], AddressAddedEventObject>;
export declare type AddressAddedEventFilter = TypedEventFilter<AddressAddedEvent>;
export interface AddressRemovedEventObject {
    _address: string;
}
export declare type AddressRemovedEvent = TypedEvent<[string], AddressRemovedEventObject>;
export declare type AddressRemovedEventFilter = TypedEventFilter<AddressRemovedEvent>;
export interface AllAddressesClearedEventObject {
}
export declare type AllAddressesClearedEvent = TypedEvent<[], AllAddressesClearedEventObject>;
export declare type AllAddressesClearedEventFilter = TypedEventFilter<AllAddressesClearedEvent>;
export interface OwnershipTransferredEventObject {
    previousOwner: string;
    newOwner: string;
}
export declare type OwnershipTransferredEvent = TypedEvent<[string, string], OwnershipTransferredEventObject>;
export declare type OwnershipTransferredEventFilter = TypedEventFilter<OwnershipTransferredEvent>;
export interface PoolTogetherV3MultiTokenListener extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: PoolTogetherV3MultiTokenListenerInterface;
    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: {
        addAddresses(_addresses: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        addressType(overrides?: CallOverrides): Promise<[string]>;
        beforeTokenMint(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        clearAll(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        contains(_addr: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        end(overrides?: CallOverrides): Promise<[string]>;
        freeze(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        getAddresses(overrides?: CallOverrides): Promise<[string[]]>;
        initialize(_owner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        next(current: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[string]>;
        owner(overrides?: CallOverrides): Promise<[string]>;
        removeAddress(_previousContract: PromiseOrValue<string>, _address: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        start(overrides?: CallOverrides): Promise<[string]>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[boolean]>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    addAddresses(_addresses: PromiseOrValue<string>[], overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    addressType(overrides?: CallOverrides): Promise<string>;
    beforeTokenMint(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    clearAll(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    contains(_addr: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    end(overrides?: CallOverrides): Promise<string>;
    freeze(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    getAddresses(overrides?: CallOverrides): Promise<string[]>;
    initialize(_owner: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    next(current: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
    owner(overrides?: CallOverrides): Promise<string>;
    removeAddress(_previousContract: PromiseOrValue<string>, _address: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    renounceOwnership(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    start(overrides?: CallOverrides): Promise<string>;
    supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<boolean>;
    transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        addAddresses(_addresses: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<void>;
        addressType(overrides?: CallOverrides): Promise<string>;
        beforeTokenMint(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        clearAll(overrides?: CallOverrides): Promise<void>;
        contains(_addr: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        end(overrides?: CallOverrides): Promise<string>;
        freeze(overrides?: CallOverrides): Promise<void>;
        getAddresses(overrides?: CallOverrides): Promise<string[]>;
        initialize(_owner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        next(current: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
        owner(overrides?: CallOverrides): Promise<string>;
        removeAddress(_previousContract: PromiseOrValue<string>, _address: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        renounceOwnership(overrides?: CallOverrides): Promise<void>;
        start(overrides?: CallOverrides): Promise<string>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<boolean>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        'AddressAdded(address)'(_address?: PromiseOrValue<string> | null): AddressAddedEventFilter;
        AddressAdded(_address?: PromiseOrValue<string> | null): AddressAddedEventFilter;
        'AddressRemoved(address)'(_address?: PromiseOrValue<string> | null): AddressRemovedEventFilter;
        AddressRemoved(_address?: PromiseOrValue<string> | null): AddressRemovedEventFilter;
        'AllAddressesCleared()'(): AllAddressesClearedEventFilter;
        AllAddressesCleared(): AllAddressesClearedEventFilter;
        'OwnershipTransferred(address,address)'(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        OwnershipTransferred(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
    };
    estimateGas: {
        addAddresses(_addresses: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        addressType(overrides?: CallOverrides): Promise<BigNumber>;
        beforeTokenMint(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        clearAll(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        contains(_addr: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        end(overrides?: CallOverrides): Promise<BigNumber>;
        freeze(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        getAddresses(overrides?: CallOverrides): Promise<BigNumber>;
        initialize(_owner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        next(current: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<BigNumber>;
        removeAddress(_previousContract: PromiseOrValue<string>, _address: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        start(overrides?: CallOverrides): Promise<BigNumber>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        addAddresses(_addresses: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        addressType(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        beforeTokenMint(to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, referrer: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        beforeTokenTransfer(from: PromiseOrValue<string>, to: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, controlledToken: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        clearAll(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        contains(_addr: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        end(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        freeze(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        getAddresses(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        initialize(_owner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        next(current: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        removeAddress(_previousContract: PromiseOrValue<string>, _address: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        start(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
