import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PayableOverrides, 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 EvmAuthInterface extends utils.Interface {
    functions: {
        "DEFAULT_ADMIN_ROLE()": FunctionFragment;
        "ROLE_MEMBER()": FunctionFragment;
        "buyAccess()": FunctionFragment;
        "challenge()": FunctionFragment;
        "challengeExpiresAt()": FunctionFragment;
        "changeDuration(uint256)": FunctionFragment;
        "changePrice(uint256)": FunctionFragment;
        "clientExpiresAt(address)": FunctionFragment;
        "daoAddress()": FunctionFragment;
        "depositToken(address,uint256)": FunctionFragment;
        "depositTokenWithPermit(address,uint256,uint256,uint8,bytes32,bytes32)": FunctionFragment;
        "duration()": FunctionFragment;
        "etherLeft(address)": FunctionFragment;
        "getClients()": FunctionFragment;
        "getRoleAdmin(bytes32)": FunctionFragment;
        "getWithdrawBalance()": FunctionFragment;
        "grantRole(bytes32,address)": FunctionFragment;
        "hasRole(bytes32,address)": FunctionFragment;
        "isClient(address)": FunctionFragment;
        "nextChallenge()": FunctionFragment;
        "owner()": FunctionFragment;
        "price()": FunctionFragment;
        "removeClient(address)": FunctionFragment;
        "renounceOwnership()": FunctionFragment;
        "renounceRole(bytes32,address)": FunctionFragment;
        "revokeRole(bytes32,address)": FunctionFragment;
        "setChallenge(bytes32)": FunctionFragment;
        "supportsInterface(bytes4)": FunctionFragment;
        "transferOwnership(address)": FunctionFragment;
        "withdraw(address,uint256)": FunctionFragment;
        "withdrawERC20(address,address,uint256)": FunctionFragment;
        "withdrawERC20Even(address,address[])": FunctionFragment;
        "withdrawEven(address[])": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "DEFAULT_ADMIN_ROLE" | "ROLE_MEMBER" | "buyAccess" | "challenge" | "challengeExpiresAt" | "changeDuration" | "changePrice" | "clientExpiresAt" | "daoAddress" | "depositToken" | "depositTokenWithPermit" | "duration" | "etherLeft" | "getClients" | "getRoleAdmin" | "getWithdrawBalance" | "grantRole" | "hasRole" | "isClient" | "nextChallenge" | "owner" | "price" | "removeClient" | "renounceOwnership" | "renounceRole" | "revokeRole" | "setChallenge" | "supportsInterface" | "transferOwnership" | "withdraw" | "withdrawERC20" | "withdrawERC20Even" | "withdrawEven"): FunctionFragment;
    encodeFunctionData(functionFragment: "DEFAULT_ADMIN_ROLE", values?: undefined): string;
    encodeFunctionData(functionFragment: "ROLE_MEMBER", values?: undefined): string;
    encodeFunctionData(functionFragment: "buyAccess", values?: undefined): string;
    encodeFunctionData(functionFragment: "challenge", values?: undefined): string;
    encodeFunctionData(functionFragment: "challengeExpiresAt", values?: undefined): string;
    encodeFunctionData(functionFragment: "changeDuration", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "changePrice", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "clientExpiresAt", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "daoAddress", values?: undefined): string;
    encodeFunctionData(functionFragment: "depositToken", values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "depositTokenWithPermit", values: [
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BytesLike>,
        PromiseOrValue<BytesLike>
    ]): string;
    encodeFunctionData(functionFragment: "duration", values?: undefined): string;
    encodeFunctionData(functionFragment: "etherLeft", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "getClients", values?: undefined): string;
    encodeFunctionData(functionFragment: "getRoleAdmin", values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: "getWithdrawBalance", values?: undefined): string;
    encodeFunctionData(functionFragment: "grantRole", values: [PromiseOrValue<BytesLike>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "hasRole", values: [PromiseOrValue<BytesLike>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "isClient", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "nextChallenge", values?: undefined): string;
    encodeFunctionData(functionFragment: "owner", values?: undefined): string;
    encodeFunctionData(functionFragment: "price", values?: undefined): string;
    encodeFunctionData(functionFragment: "removeClient", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "renounceOwnership", values?: undefined): string;
    encodeFunctionData(functionFragment: "renounceRole", values: [PromiseOrValue<BytesLike>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "revokeRole", values: [PromiseOrValue<BytesLike>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "setChallenge", values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: "supportsInterface", values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: "transferOwnership", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "withdraw", values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "withdrawERC20", values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: "withdrawERC20Even", values: [PromiseOrValue<string>, PromiseOrValue<string>[]]): string;
    encodeFunctionData(functionFragment: "withdrawEven", values: [PromiseOrValue<string>[]]): string;
    decodeFunctionResult(functionFragment: "DEFAULT_ADMIN_ROLE", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "ROLE_MEMBER", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "buyAccess", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "challenge", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "challengeExpiresAt", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "changeDuration", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "changePrice", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "clientExpiresAt", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "daoAddress", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "depositToken", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "depositTokenWithPermit", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "duration", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "etherLeft", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getClients", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRoleAdmin", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getWithdrawBalance", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "isClient", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "nextChallenge", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "price", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "removeClient", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "renounceOwnership", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "renounceRole", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setChallenge", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "supportsInterface", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "transferOwnership", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "withdrawERC20", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "withdrawERC20Even", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "withdrawEven", data: BytesLike): Result;
    events: {
        "BuyTicket(address,uint256,uint256,uint256)": EventFragment;
        "Deposited(address,uint256,uint256)": EventFragment;
        "DurationChange(uint256,uint256,uint256)": EventFragment;
        "NewChallenge(bytes32,uint256,uint256)": EventFragment;
        "OwnershipTransferred(address,address)": EventFragment;
        "PriceChange(uint256,uint256,uint256)": EventFragment;
        "RoleAdminChanged(bytes32,bytes32,bytes32)": EventFragment;
        "RoleGranted(bytes32,address,address)": EventFragment;
        "RoleRevoked(bytes32,address,address)": EventFragment;
        "Withdrawn(address,address,uint256,uint256)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "BuyTicket"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "Deposited"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "DurationChange"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "NewChallenge"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "PriceChange"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "RoleAdminChanged"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "RoleGranted"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "RoleRevoked"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "Withdrawn"): EventFragment;
}
export interface BuyTicketEventObject {
    buyer: string;
    duration: BigNumber;
    clientExpireAt: BigNumber;
    price: BigNumber;
}
export type BuyTicketEvent = TypedEvent<[
    string,
    BigNumber,
    BigNumber,
    BigNumber
], BuyTicketEventObject>;
export type BuyTicketEventFilter = TypedEventFilter<BuyTicketEvent>;
export interface DepositedEventObject {
    token: string;
    amount: BigNumber;
    timestamp: BigNumber;
}
export type DepositedEvent = TypedEvent<[
    string,
    BigNumber,
    BigNumber
], DepositedEventObject>;
export type DepositedEventFilter = TypedEventFilter<DepositedEvent>;
export interface DurationChangeEventObject {
    oldDuration: BigNumber;
    newDuration: BigNumber;
    timestamp: BigNumber;
}
export type DurationChangeEvent = TypedEvent<[
    BigNumber,
    BigNumber,
    BigNumber
], DurationChangeEventObject>;
export type DurationChangeEventFilter = TypedEventFilter<DurationChangeEvent>;
export interface NewChallengeEventObject {
    challenge: string;
    challengeExpiresAt: BigNumber;
    time: BigNumber;
}
export type NewChallengeEvent = TypedEvent<[
    string,
    BigNumber,
    BigNumber
], NewChallengeEventObject>;
export type NewChallengeEventFilter = TypedEventFilter<NewChallengeEvent>;
export interface OwnershipTransferredEventObject {
    previousOwner: string;
    newOwner: string;
}
export type OwnershipTransferredEvent = TypedEvent<[
    string,
    string
], OwnershipTransferredEventObject>;
export type OwnershipTransferredEventFilter = TypedEventFilter<OwnershipTransferredEvent>;
export interface PriceChangeEventObject {
    oldPrice: BigNumber;
    newPrice: BigNumber;
    timestamp: BigNumber;
}
export type PriceChangeEvent = TypedEvent<[
    BigNumber,
    BigNumber,
    BigNumber
], PriceChangeEventObject>;
export type PriceChangeEventFilter = TypedEventFilter<PriceChangeEvent>;
export interface RoleAdminChangedEventObject {
    role: string;
    previousAdminRole: string;
    newAdminRole: string;
}
export type RoleAdminChangedEvent = TypedEvent<[
    string,
    string,
    string
], RoleAdminChangedEventObject>;
export type RoleAdminChangedEventFilter = TypedEventFilter<RoleAdminChangedEvent>;
export interface RoleGrantedEventObject {
    role: string;
    account: string;
    sender: string;
}
export type RoleGrantedEvent = TypedEvent<[
    string,
    string,
    string
], RoleGrantedEventObject>;
export type RoleGrantedEventFilter = TypedEventFilter<RoleGrantedEvent>;
export interface RoleRevokedEventObject {
    role: string;
    account: string;
    sender: string;
}
export type RoleRevokedEvent = TypedEvent<[
    string,
    string,
    string
], RoleRevokedEventObject>;
export type RoleRevokedEventFilter = TypedEventFilter<RoleRevokedEvent>;
export interface WithdrawnEventObject {
    payee: string;
    token: string;
    amount: BigNumber;
    timestamp: BigNumber;
}
export type WithdrawnEvent = TypedEvent<[
    string,
    string,
    BigNumber,
    BigNumber
], WithdrawnEventObject>;
export type WithdrawnEventFilter = TypedEventFilter<WithdrawnEvent>;
export interface EvmAuth extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: EvmAuthInterface;
    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]>;
        ROLE_MEMBER(overrides?: CallOverrides): Promise<[string]>;
        buyAccess(overrides?: PayableOverrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        challenge(overrides?: CallOverrides): Promise<[string]>;
        challengeExpiresAt(overrides?: CallOverrides): Promise<[BigNumber]>;
        changeDuration(_duration: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        changePrice(_price: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        clientExpiresAt(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber] & {
            expiresAt: BigNumber;
        }>;
        daoAddress(overrides?: CallOverrides): Promise<[string]>;
        depositToken(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        depositTokenWithPermit(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, deadline: PromiseOrValue<BigNumberish>, v: PromiseOrValue<BigNumberish>, r: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        duration(overrides?: CallOverrides): Promise<[BigNumber]>;
        etherLeft(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber] & {
            remainingBalance: BigNumber;
        }>;
        getClients(overrides?: CallOverrides): Promise<[string[]] & {
            clientAddresses: string[];
        }>;
        getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[string]>;
        getWithdrawBalance(overrides?: CallOverrides): Promise<[BigNumber] & {
            balance: BigNumber;
        }>;
        grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        isClient(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        nextChallenge(overrides?: CallOverrides): Promise<[BigNumber] & {
            expiresIn: BigNumber;
        }>;
        owner(overrides?: CallOverrides): Promise<[string]>;
        price(overrides?: CallOverrides): Promise<[BigNumber]>;
        removeClient(_client: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setChallenge(_challenge: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[boolean]>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdraw(payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawERC20(token: PromiseOrValue<string>, payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawERC20Even(token: PromiseOrValue<string>, payees: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawEven(payees: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<string>;
    ROLE_MEMBER(overrides?: CallOverrides): Promise<string>;
    buyAccess(overrides?: PayableOverrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    challenge(overrides?: CallOverrides): Promise<string>;
    challengeExpiresAt(overrides?: CallOverrides): Promise<BigNumber>;
    changeDuration(_duration: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    changePrice(_price: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    clientExpiresAt(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    daoAddress(overrides?: CallOverrides): Promise<string>;
    depositToken(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    depositTokenWithPermit(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, deadline: PromiseOrValue<BigNumberish>, v: PromiseOrValue<BigNumberish>, r: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    duration(overrides?: CallOverrides): Promise<BigNumber>;
    etherLeft(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    getClients(overrides?: CallOverrides): Promise<string[]>;
    getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<string>;
    getWithdrawBalance(overrides?: CallOverrides): Promise<BigNumber>;
    grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    isClient(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    nextChallenge(overrides?: CallOverrides): Promise<BigNumber>;
    owner(overrides?: CallOverrides): Promise<string>;
    price(overrides?: CallOverrides): Promise<BigNumber>;
    removeClient(_client: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    renounceOwnership(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setChallenge(_challenge: PromiseOrValue<BytesLike>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<boolean>;
    transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdraw(payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawERC20(token: PromiseOrValue<string>, payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawERC20Even(token: PromiseOrValue<string>, payees: PromiseOrValue<string>[], overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawEven(payees: PromiseOrValue<string>[], overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<string>;
        ROLE_MEMBER(overrides?: CallOverrides): Promise<string>;
        buyAccess(overrides?: CallOverrides): Promise<BigNumber>;
        challenge(overrides?: CallOverrides): Promise<string>;
        challengeExpiresAt(overrides?: CallOverrides): Promise<BigNumber>;
        changeDuration(_duration: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        changePrice(_price: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        clientExpiresAt(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        daoAddress(overrides?: CallOverrides): Promise<string>;
        depositToken(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<boolean>;
        depositTokenWithPermit(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, deadline: PromiseOrValue<BigNumberish>, v: PromiseOrValue<BigNumberish>, r: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<boolean>;
        duration(overrides?: CallOverrides): Promise<BigNumber>;
        etherLeft(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        getClients(overrides?: CallOverrides): Promise<string[]>;
        getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<string>;
        getWithdrawBalance(overrides?: CallOverrides): Promise<BigNumber>;
        grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        isClient(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        nextChallenge(overrides?: CallOverrides): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<string>;
        price(overrides?: CallOverrides): Promise<BigNumber>;
        removeClient(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        renounceOwnership(overrides?: CallOverrides): Promise<void>;
        renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setChallenge(_challenge: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<void>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<boolean>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        withdraw(payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        withdrawERC20(token: PromiseOrValue<string>, payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        withdrawERC20Even(token: PromiseOrValue<string>, payees: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<void>;
        withdrawEven(payees: PromiseOrValue<string>[], overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        "BuyTicket(address,uint256,uint256,uint256)"(buyer?: null, duration?: null, clientExpireAt?: null, price?: null): BuyTicketEventFilter;
        BuyTicket(buyer?: null, duration?: null, clientExpireAt?: null, price?: null): BuyTicketEventFilter;
        "Deposited(address,uint256,uint256)"(token?: PromiseOrValue<string> | null, amount?: null, timestamp?: null): DepositedEventFilter;
        Deposited(token?: PromiseOrValue<string> | null, amount?: null, timestamp?: null): DepositedEventFilter;
        "DurationChange(uint256,uint256,uint256)"(oldDuration?: null, newDuration?: null, timestamp?: null): DurationChangeEventFilter;
        DurationChange(oldDuration?: null, newDuration?: null, timestamp?: null): DurationChangeEventFilter;
        "NewChallenge(bytes32,uint256,uint256)"(challenge?: null, challengeExpiresAt?: null, time?: null): NewChallengeEventFilter;
        NewChallenge(challenge?: null, challengeExpiresAt?: null, time?: null): NewChallengeEventFilter;
        "OwnershipTransferred(address,address)"(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        OwnershipTransferred(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        "PriceChange(uint256,uint256,uint256)"(oldPrice?: null, newPrice?: null, timestamp?: null): PriceChangeEventFilter;
        PriceChange(oldPrice?: null, newPrice?: null, timestamp?: null): PriceChangeEventFilter;
        "RoleAdminChanged(bytes32,bytes32,bytes32)"(role?: PromiseOrValue<BytesLike> | null, previousAdminRole?: PromiseOrValue<BytesLike> | null, newAdminRole?: PromiseOrValue<BytesLike> | null): RoleAdminChangedEventFilter;
        RoleAdminChanged(role?: PromiseOrValue<BytesLike> | null, previousAdminRole?: PromiseOrValue<BytesLike> | null, newAdminRole?: PromiseOrValue<BytesLike> | null): RoleAdminChangedEventFilter;
        "RoleGranted(bytes32,address,address)"(role?: PromiseOrValue<BytesLike> | null, account?: PromiseOrValue<string> | null, sender?: PromiseOrValue<string> | null): RoleGrantedEventFilter;
        RoleGranted(role?: PromiseOrValue<BytesLike> | null, account?: PromiseOrValue<string> | null, sender?: PromiseOrValue<string> | null): RoleGrantedEventFilter;
        "RoleRevoked(bytes32,address,address)"(role?: PromiseOrValue<BytesLike> | null, account?: PromiseOrValue<string> | null, sender?: PromiseOrValue<string> | null): RoleRevokedEventFilter;
        RoleRevoked(role?: PromiseOrValue<BytesLike> | null, account?: PromiseOrValue<string> | null, sender?: PromiseOrValue<string> | null): RoleRevokedEventFilter;
        "Withdrawn(address,address,uint256,uint256)"(payee?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, timestamp?: null): WithdrawnEventFilter;
        Withdrawn(payee?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null, timestamp?: null): WithdrawnEventFilter;
    };
    estimateGas: {
        DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<BigNumber>;
        ROLE_MEMBER(overrides?: CallOverrides): Promise<BigNumber>;
        buyAccess(overrides?: PayableOverrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        challenge(overrides?: CallOverrides): Promise<BigNumber>;
        challengeExpiresAt(overrides?: CallOverrides): Promise<BigNumber>;
        changeDuration(_duration: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        changePrice(_price: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        clientExpiresAt(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        daoAddress(overrides?: CallOverrides): Promise<BigNumber>;
        depositToken(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        depositTokenWithPermit(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, deadline: PromiseOrValue<BigNumberish>, v: PromiseOrValue<BigNumberish>, r: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        duration(overrides?: CallOverrides): Promise<BigNumber>;
        etherLeft(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        getClients(overrides?: CallOverrides): Promise<BigNumber>;
        getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        getWithdrawBalance(overrides?: CallOverrides): Promise<BigNumber>;
        grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        isClient(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        nextChallenge(overrides?: CallOverrides): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<BigNumber>;
        price(overrides?: CallOverrides): Promise<BigNumber>;
        removeClient(_client: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setChallenge(_challenge: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdraw(payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawERC20(token: PromiseOrValue<string>, payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawERC20Even(token: PromiseOrValue<string>, payees: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawEven(payees: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        ROLE_MEMBER(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        buyAccess(overrides?: PayableOverrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        challenge(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        challengeExpiresAt(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        changeDuration(_duration: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        changePrice(_price: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        clientExpiresAt(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        daoAddress(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        depositToken(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        depositTokenWithPermit(token: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, deadline: PromiseOrValue<BigNumberish>, v: PromiseOrValue<BigNumberish>, r: PromiseOrValue<BytesLike>, s: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        duration(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        etherLeft(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getClients(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getRoleAdmin(role: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getWithdrawBalance(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        grantRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        hasRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        isClient(_client: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        nextChallenge(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        price(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        removeClient(_client: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        renounceRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        revokeRole(role: PromiseOrValue<BytesLike>, account: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setChallenge(_challenge: PromiseOrValue<BytesLike>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        supportsInterface(interfaceId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdraw(payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawERC20(token: PromiseOrValue<string>, payee: PromiseOrValue<string>, amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawERC20Even(token: PromiseOrValue<string>, payees: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawEven(payees: PromiseOrValue<string>[], overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
