contract AbqErc20 is Token
{
    address public owner;
    constructor(address _owner, uint256 _abqAmount)
    {
        tokenName = "Aardbanq DAO";
        tokenSymbol = "ABQ";
        tokenDecimals = 18;
        tokenTotalSupply = _abqAmount;
        owner = _owner;
        balances[_owner] = _abqAmount;
        emit Transfer(address(0), _owner, _abqAmount);
    }

    modifier onlyOwner()
    {
        require(msg.sender == owner, "ABQ/only-owner");
        _;
    }

    /// @notice Allows the owner to change the ownership to another address.
    /// @param _newOwner The address that should be the new owner.
    function changeOwner(address _newOwner)
        external
        onlyOwner()
    {
        owner = _newOwner;
    }

    /// @notice Allows the owner to mint tokens.
    /// @param _target The address to mint the tokens to.
    /// @param _abqAmount The amount of ABQ to mint.
    function mint(address _target, uint256 _abqAmount)
        external
        onlyOwner()
    {
        tokenTotalSupply = SafeMathTyped.add256(tokenTotalSupply, _abqAmount);
        balances[_target] = SafeMathTyped.add256(balances[_target], _abqAmount);
        emit Transfer(address(0), _target, _abqAmount);
    }
}
/// @notice This is the ABQ token. It allows the owner (the Aardbanq DAO) to mint new tokens. It also allow the 
/// owner to change owners. The ABQ token has 18 decimals.
function changeOwner(address _newOwner)
    external
    onlyOwner()
{
    owner = _newOwner;
}

/// @notice Allows the owner to change the ownership to another address.
/// @param _newOwner The address that should be the new owner.