functions
    

    
    function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) constant returns (bool limitBroken);

    function isBreakingInvestorCap(address receiver, uint tokenAmount) constant returns (bool limitBroken);

    
    function isCrowdsaleFull() public constant returns (bool);

    
    function assignTokens(address receiver, uint tokenAmount) private;
}





contract MintedTokenCappedCrowdsaleExt is CrowdsaleExt {

    
    uint public maximumSellableTokens;

    function MintedTokenCappedCrowdsaleExt(address _token, MilestonePricing _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens, bool _isUpdatable, bool _isWhiteListed) CrowdsaleExt(_token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal, _isUpdatable, _isWhiteListed) {
        maximumSellableTokens = _maximumSellableTokens;
    }