interface IOneSplit {
    function getExpectedReturn(
        IERC20 fromToken,
        IERC20 destToken,
        //address fromToken,
        //address destToken,
        uint256 amount,
        uint256 parts,
        uint256 flags // See constants in IOneSplit.sol
    )
        external
        view
        returns (uint256 returnAmount, uint256[] memory distribution);

    /*
    function getExpectedReturnWithGas(
        IERC20 fromToken,
        IERC20 destToken,
        uint256 amount,
        uint256 parts,
        uint256 flags, // See constants in IOneSplit.sol
        uint256 destTokenEthPriceTimesGasPrice
    )
        public
        view
        returns(
            uint256 returnAmount,
            uint256 estimateGasAmount,
            uint256[] memory distribution
        );
    */
    function swap(
        IERC20 fromToken,
        IERC20 destToken,
        uint256 amount,
        uint256 minReturn,
        uint256[] calldata distribution,
        uint256 flags
    ) external payable returns (uint256 returnAmount);
}
//import "openzeppelin-eth/contracts/token/ERC20/ERC20Detailed.sol";
function swap(
    IERC20 fromToken,
    IERC20 destToken,
    uint256 amount,
    uint256 minReturn,
    uint256[] calldata distribution,
    uint256 flags
) external payable returns (uint256 returnAmount);

/*
 function getExpectedReturnWithGas(
 IERC20 fromToken,
 IERC20 destToken,
 uint256 amount,
 uint256 parts,
 uint256 flags, // See constants in IOneSplit.sol
 uint256 destTokenEthPriceTimesGasPrice
 )
 public
 view
 returns(
 uint256 returnAmount,
 uint256 estimateGasAmount,
 uint256[] memory distribution
 );
 */