contract MintableToken is StandardToken, Ownable {
    
    uint256 public cap = 100000000000*10**18;
    
    function mint(address _account, uint256 _amount) public onlyOwner returns(bool) {
        _mint(_account, _amount);
        return true;
    }
    
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     */
    
    function _mint(address account, uint256 amount) internal virtual {
        
        require(account != address(0), "ERC20: mint to the zero address");
        require(totalSupply + amount <= cap, "Maximum token supply exceeded");
        totalSupply += amount;
        balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
 * the total supply.
 *
 * Emits a {Transfer} event with `from` set to the zero address.
 *
 * Requirements:
 *
 * - `to` cannot be the zero address.
 */
function _mint(address account, uint256 amount) internal virtual {
        
    require(account != address(0), "ERC20: mint to the zero address");
    require(totalSupply + amount <= cap, "Maximum token supply exceeded");
    totalSupply += amount;
    balances[account] += amount;
    emit Transfer(address(0), account, amount);
}

/** @dev Creates `amount` tokens and assigns them to `account`, increasing
 * the total supply.
 *
 * Emits a {Transfer} event with `from` set to the zero address.
 *
 * Requirements:
 *
 * - `to` cannot be the zero address.
 */