Copy interface IIdleToken {
function token () external returns (address underlying);
function userAvgPrices (address) external returns (uint256 avgPrice);
function mintIdleToken (uint256 _amount , bool _skipWholeRebalance) external returns (uint256 mintedTokens);
function redeemIdleToken(uint256 _amount, bool _skipRebalance, uint256[] calldata _clientProtocolAmounts) external returns (uint256 redeemedTokens);
function redeemInterestBearingTokens (uint256 _amount) external ;
function rebalance () external returns (bool);
function rebalanceWithGST () external returns (bool);
function openRebalance (uint256[] calldata _newAllocations) external returns (bool , uint256 avgApr);
function tokenPrice () external view returns (uint256 price);
function getAPRs () external view returns (address[] memory addresses , uint256[] memory aprs);
function getAvgAPR () external view returns (uint256 avgApr);
function getCurrentAllocations() external view returns (address[] memory tokenAddresses, uint256[] memory amounts, uint256 total);
// Old V2 methods
function mintIdleToken(uint256 _amount, uint256[] calldata _clientProtocolAmounts) external returns (uint256 mintedTokens);
function rebalance (uint256 _newAmount , uint256[] calldata _clientProtocolAmounts) external returns (bool);
}