// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; interface IRouter { function config() external view returns (address); function pairFactory() external view returns (address); function pcvTreasury() external view returns (address); function WETH() external view returns (address); function addLiquidity( address baseToken, address quoteToken, uint256 baseAmount, uint256 quoteAmountMin, uint256 deadline, bool pcv ) external returns (uint256 quoteAmount, uint256 liquidity); function addLiquidityETH( address quoteToken, uint256 quoteAmountMin, uint256 deadline, bool pcv ) external payable returns ( uint256 ethAmount, uint256 quoteAmount, uint256 liquidity ); function removeLiquidity( address baseToken, address quoteToken, uint256 liquidity, uint256 baseAmountMin, uint256 deadline ) external returns (uint256 baseAmount, uint256 quoteAmount); function removeLiquidityETH( address quoteToken, uint256 liquidity, uint256 ethAmountMin, uint256 deadline ) external returns (uint256 ethAmount, uint256 quoteAmount); function deposit( address baseToken, address quoteToken, address holder, uint256 amount ) external; function depositETH(address quoteToken, address holder) external payable; function withdraw( address baseToken, address quoteToken, uint256 amount ) external; function withdrawETH(address quoteToken, uint256 amount) external; function openPositionWithWallet( address baseToken, address quoteToken, uint8 side, uint256 marginAmount, uint256 quoteAmount, uint256 baseAmountLimit, uint256 deadline ) external returns (uint256 baseAmount); function openPositionETHWithWallet( address quoteToken, uint8 side, uint256 quoteAmount, uint256 baseAmountLimit, uint256 deadline ) external payable returns (uint256 baseAmount); function openPositionWithMargin( address baseToken, address quoteToken, uint8 side, uint256 quoteAmount, uint256 baseAmountLimit, uint256 deadline ) external returns (uint256 baseAmount); function closePosition( address baseToken, address quoteToken, uint256 quoteAmount, uint256 deadline, bool autoWithdraw ) external returns (uint256 baseAmount, uint256 withdrawAmount); function closePositionETH( address quoteToken, uint256 quoteAmount, uint256 deadline ) external returns (uint256 baseAmount, uint256 withdrawAmount); function liquidate( address baseToken, address quoteToken, address trader, address to ) external returns (uint256 quoteAmount, uint256 baseAmount, uint256 bonus); function getReserves(address baseToken, address quoteToken) external view returns (uint256 reserveBase, uint256 reserveQuote); function getQuoteAmount( address baseToken, address quoteToken, uint8 side, uint256 baseAmount ) external view returns (uint256 quoteAmount); function getWithdrawable( address baseToken, address quoteToken, address holder ) external view returns (uint256 amount); function getPosition( address baseToken, address quoteToken, address holder ) external view returns ( int256 baseSize, int256 quoteSize, uint256 tradeSize ); }