import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, PopulatedTransaction, Signer, utils } from 'ethers';
import type { FunctionFragment, Result } from '@ethersproject/abi';
import type { Listener, Provider } from '@ethersproject/providers';
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from './common';
export declare namespace Previewer {
    type InterestRateModelStruct = {
        id: PromiseOrValue<string>;
        fixedCurveA: PromiseOrValue<BigNumberish>;
        fixedCurveB: PromiseOrValue<BigNumberish>;
        fixedMaxUtilization: PromiseOrValue<BigNumberish>;
        floatingCurveA: PromiseOrValue<BigNumberish>;
        floatingCurveB: PromiseOrValue<BigNumberish>;
        floatingMaxUtilization: PromiseOrValue<BigNumberish>;
    };
    type InterestRateModelStructOutput = [
        string,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        id: string;
        fixedCurveA: BigNumber;
        fixedCurveB: BigNumber;
        fixedMaxUtilization: BigNumber;
        floatingCurveA: BigNumber;
        floatingCurveB: BigNumber;
        floatingMaxUtilization: BigNumber;
    };
    type FixedPoolStruct = {
        maturity: PromiseOrValue<BigNumberish>;
        borrowed: PromiseOrValue<BigNumberish>;
        supplied: PromiseOrValue<BigNumberish>;
        available: PromiseOrValue<BigNumberish>;
        utilization: PromiseOrValue<BigNumberish>;
        depositRate: PromiseOrValue<BigNumberish>;
        minBorrowRate: PromiseOrValue<BigNumberish>;
        optimalDeposit: PromiseOrValue<BigNumberish>;
    };
    type FixedPoolStructOutput = [
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber
    ] & {
        maturity: BigNumber;
        borrowed: BigNumber;
        supplied: BigNumber;
        available: BigNumber;
        utilization: BigNumber;
        depositRate: BigNumber;
        minBorrowRate: BigNumber;
        optimalDeposit: BigNumber;
    };
    type RewardRateStruct = {
        asset: PromiseOrValue<string>;
        assetName: PromiseOrValue<string>;
        assetSymbol: PromiseOrValue<string>;
        usdPrice: PromiseOrValue<BigNumberish>;
        borrow: PromiseOrValue<BigNumberish>;
        floatingDeposit: PromiseOrValue<BigNumberish>;
        maturities: PromiseOrValue<BigNumberish>[];
    };
    type RewardRateStructOutput = [string, string, string, BigNumber, BigNumber, BigNumber, BigNumber[]] & {
        asset: string;
        assetName: string;
        assetSymbol: string;
        usdPrice: BigNumber;
        borrow: BigNumber;
        floatingDeposit: BigNumber;
        maturities: BigNumber[];
    };
    type FixedPositionStruct = {
        maturity: PromiseOrValue<BigNumberish>;
        previewValue: PromiseOrValue<BigNumberish>;
        position: FixedLib.PositionStruct;
    };
    type FixedPositionStructOutput = [BigNumber, BigNumber, FixedLib.PositionStructOutput] & {
        maturity: BigNumber;
        previewValue: BigNumber;
        position: FixedLib.PositionStructOutput;
    };
    type ClaimableRewardStruct = {
        asset: PromiseOrValue<string>;
        assetName: PromiseOrValue<string>;
        assetSymbol: PromiseOrValue<string>;
        amount: PromiseOrValue<BigNumberish>;
    };
    type ClaimableRewardStructOutput = [string, string, string, BigNumber] & {
        asset: string;
        assetName: string;
        assetSymbol: string;
        amount: BigNumber;
    };
    type MarketAccountStruct = {
        market: PromiseOrValue<string>;
        symbol: PromiseOrValue<string>;
        decimals: PromiseOrValue<BigNumberish>;
        asset: PromiseOrValue<string>;
        assetName: PromiseOrValue<string>;
        assetSymbol: PromiseOrValue<string>;
        interestRateModel: Previewer.InterestRateModelStruct;
        usdPrice: PromiseOrValue<BigNumberish>;
        penaltyRate: PromiseOrValue<BigNumberish>;
        adjustFactor: PromiseOrValue<BigNumberish>;
        maxFuturePools: PromiseOrValue<BigNumberish>;
        fixedPools: Previewer.FixedPoolStruct[];
        rewardRates: Previewer.RewardRateStruct[];
        floatingBorrowRate: PromiseOrValue<BigNumberish>;
        floatingUtilization: PromiseOrValue<BigNumberish>;
        floatingBackupBorrowed: PromiseOrValue<BigNumberish>;
        floatingAvailableAssets: PromiseOrValue<BigNumberish>;
        totalFloatingBorrowAssets: PromiseOrValue<BigNumberish>;
        totalFloatingDepositAssets: PromiseOrValue<BigNumberish>;
        totalFloatingBorrowShares: PromiseOrValue<BigNumberish>;
        totalFloatingDepositShares: PromiseOrValue<BigNumberish>;
        isCollateral: PromiseOrValue<boolean>;
        maxBorrowAssets: PromiseOrValue<BigNumberish>;
        floatingBorrowShares: PromiseOrValue<BigNumberish>;
        floatingBorrowAssets: PromiseOrValue<BigNumberish>;
        floatingDepositShares: PromiseOrValue<BigNumberish>;
        floatingDepositAssets: PromiseOrValue<BigNumberish>;
        fixedDepositPositions: Previewer.FixedPositionStruct[];
        fixedBorrowPositions: Previewer.FixedPositionStruct[];
        claimableRewards: Previewer.ClaimableRewardStruct[];
    };
    type MarketAccountStructOutput = [
        string,
        string,
        number,
        string,
        string,
        string,
        Previewer.InterestRateModelStructOutput,
        BigNumber,
        BigNumber,
        BigNumber,
        number,
        Previewer.FixedPoolStructOutput[],
        Previewer.RewardRateStructOutput[],
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        boolean,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        BigNumber,
        Previewer.FixedPositionStructOutput[],
        Previewer.FixedPositionStructOutput[],
        Previewer.ClaimableRewardStructOutput[]
    ] & {
        market: string;
        symbol: string;
        decimals: number;
        asset: string;
        assetName: string;
        assetSymbol: string;
        interestRateModel: Previewer.InterestRateModelStructOutput;
        usdPrice: BigNumber;
        penaltyRate: BigNumber;
        adjustFactor: BigNumber;
        maxFuturePools: number;
        fixedPools: Previewer.FixedPoolStructOutput[];
        rewardRates: Previewer.RewardRateStructOutput[];
        floatingBorrowRate: BigNumber;
        floatingUtilization: BigNumber;
        floatingBackupBorrowed: BigNumber;
        floatingAvailableAssets: BigNumber;
        totalFloatingBorrowAssets: BigNumber;
        totalFloatingDepositAssets: BigNumber;
        totalFloatingBorrowShares: BigNumber;
        totalFloatingDepositShares: BigNumber;
        isCollateral: boolean;
        maxBorrowAssets: BigNumber;
        floatingBorrowShares: BigNumber;
        floatingBorrowAssets: BigNumber;
        floatingDepositShares: BigNumber;
        floatingDepositAssets: BigNumber;
        fixedDepositPositions: Previewer.FixedPositionStructOutput[];
        fixedBorrowPositions: Previewer.FixedPositionStructOutput[];
        claimableRewards: Previewer.ClaimableRewardStructOutput[];
    };
    type FixedPreviewStruct = {
        maturity: PromiseOrValue<BigNumberish>;
        assets: PromiseOrValue<BigNumberish>;
        utilization: PromiseOrValue<BigNumberish>;
    };
    type FixedPreviewStructOutput = [BigNumber, BigNumber, BigNumber] & {
        maturity: BigNumber;
        assets: BigNumber;
        utilization: BigNumber;
    };
}
export declare namespace FixedLib {
    type PositionStruct = {
        principal: PromiseOrValue<BigNumberish>;
        fee: PromiseOrValue<BigNumberish>;
    };
    type PositionStructOutput = [BigNumber, BigNumber] & {
        principal: BigNumber;
        fee: BigNumber;
    };
}
export interface PreviewerInterface extends utils.Interface {
    functions: {
        'auditor()': FunctionFragment;
        'basePriceFeed()': FunctionFragment;
        'exactly(address)': FunctionFragment;
        'previewBorrowAtAllMaturities(address,uint256)': FunctionFragment;
        'previewBorrowAtMaturity(address,uint256,uint256)': FunctionFragment;
        'previewDepositAtAllMaturities(address,uint256)': FunctionFragment;
        'previewDepositAtMaturity(address,uint256,uint256)': FunctionFragment;
        'previewRepayAtMaturity(address,uint256,uint256,address)': FunctionFragment;
        'previewWithdrawAtMaturity(address,uint256,uint256,address)': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'auditor' | 'basePriceFeed' | 'exactly' | 'previewBorrowAtAllMaturities' | 'previewBorrowAtMaturity' | 'previewDepositAtAllMaturities' | 'previewDepositAtMaturity' | 'previewRepayAtMaturity' | 'previewWithdrawAtMaturity'): FunctionFragment;
    encodeFunctionData(functionFragment: 'auditor', values?: undefined): string;
    encodeFunctionData(functionFragment: 'basePriceFeed', values?: undefined): string;
    encodeFunctionData(functionFragment: 'exactly', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'previewBorrowAtAllMaturities', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'previewBorrowAtMaturity', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'previewDepositAtAllMaturities', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'previewDepositAtMaturity', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'previewRepayAtMaturity', values: [
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<string>
    ]): string;
    encodeFunctionData(functionFragment: 'previewWithdrawAtMaturity', values: [
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<string>
    ]): string;
    decodeFunctionResult(functionFragment: 'auditor', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'basePriceFeed', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'exactly', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'previewBorrowAtAllMaturities', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'previewBorrowAtMaturity', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'previewDepositAtAllMaturities', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'previewDepositAtMaturity', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'previewRepayAtMaturity', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'previewWithdrawAtMaturity', data: BytesLike): Result;
    events: {};
}
export interface Previewer extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: PreviewerInterface;
    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: {
        auditor(overrides?: CallOverrides): Promise<[string]>;
        basePriceFeed(overrides?: CallOverrides): Promise<[string]>;
        exactly(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[
            Previewer.MarketAccountStructOutput[]
        ] & {
            data: Previewer.MarketAccountStructOutput[];
        }>;
        previewBorrowAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[
            Previewer.FixedPreviewStructOutput[]
        ] & {
            previews: Previewer.FixedPreviewStructOutput[];
        }>;
        previewBorrowAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[Previewer.FixedPreviewStructOutput]>;
        previewDepositAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[
            Previewer.FixedPreviewStructOutput[]
        ] & {
            previews: Previewer.FixedPreviewStructOutput[];
        }>;
        previewDepositAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[Previewer.FixedPreviewStructOutput]>;
        previewRepayAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[Previewer.FixedPreviewStructOutput]>;
        previewWithdrawAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, owner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[Previewer.FixedPreviewStructOutput]>;
    };
    auditor(overrides?: CallOverrides): Promise<string>;
    basePriceFeed(overrides?: CallOverrides): Promise<string>;
    exactly(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<Previewer.MarketAccountStructOutput[]>;
    previewBorrowAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput[]>;
    previewBorrowAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput>;
    previewDepositAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput[]>;
    previewDepositAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput>;
    previewRepayAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput>;
    previewWithdrawAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, owner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput>;
    callStatic: {
        auditor(overrides?: CallOverrides): Promise<string>;
        basePriceFeed(overrides?: CallOverrides): Promise<string>;
        exactly(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<Previewer.MarketAccountStructOutput[]>;
        previewBorrowAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput[]>;
        previewBorrowAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput>;
        previewDepositAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput[]>;
        previewDepositAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput>;
        previewRepayAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput>;
        previewWithdrawAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, owner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<Previewer.FixedPreviewStructOutput>;
    };
    filters: {};
    estimateGas: {
        auditor(overrides?: CallOverrides): Promise<BigNumber>;
        basePriceFeed(overrides?: CallOverrides): Promise<BigNumber>;
        exactly(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        previewBorrowAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        previewBorrowAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        previewDepositAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        previewDepositAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        previewRepayAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        previewWithdrawAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, owner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    };
    populateTransaction: {
        auditor(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        basePriceFeed(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        exactly(account: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        previewBorrowAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        previewBorrowAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        previewDepositAtAllMaturities(market: PromiseOrValue<string>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        previewDepositAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, assets: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        previewRepayAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, borrower: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        previewWithdrawAtMaturity(market: PromiseOrValue<string>, maturity: PromiseOrValue<BigNumberish>, positionAssets: PromiseOrValue<BigNumberish>, owner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
    };
}
