interface IAllocator {

    /*
     * Determine the next allocation to rebalance into.
     *
     * @param  _targetBaseAssetAllocation       Target allocation of the base asset
     * @param  _allocationPrecision             Precision of allocation percentage
     * @param  _currentCollateralSet            Instance of current set collateralizing RebalancingSetToken
     * @return address                          The address of the proposed nextSet
     */
    function determineNewAllocation(
        uint256 _targetBaseAssetAllocation,
        uint256 _allocationPrecision,
        ISetToken _currentCollateralSet
    )
        external
        returns (ISetToken);

    /*
     * Calculate value of passed collateral set.
     *
     * @param  _collateralSet        Instance of current set collateralizing RebalancingSetToken
     * @return uint256               USD value of passed Set
     */
    function calculateCollateralSetValue(
        ISetToken _collateralSet
    )
        external
        view
        returns(uint256);
}
/**
 * @title IAllocator
 * @author Set Protocol
 *
 * Interface for interacting with Allocator contracts
 */
function determineNewAllocation(
    uint256 _targetBaseAssetAllocation,
    uint256 _allocationPrecision,
    ISetToken _currentCollateralSet
)
    external
    returns (ISetToken);

/*
 * Determine the next allocation to rebalance into.
 *
 * @param  _targetBaseAssetAllocation       Target allocation of the base asset
 * @param  _allocationPrecision             Precision of allocation percentage
 * @param  _currentCollateralSet            Instance of current set collateralizing RebalancingSetToken
 * @return address                          The address of the proposed nextSet
 */