contract BasicToken is ERC20Basic {

  using SafeMath for uint256;

  // @notice This creates an array with all balances
  mapping(address => uint256) balances;

  // @notice Get the token balance of address `_owner`
  function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
  }

  function transfer(address _to, uint256 _value) public returns (bool) {
    
    // @notice Prevent transfer to 0x0 address
    require(_to != address(0));

    // @notice `Check if the sender has enough` is not needed
    // because sub(balances[msg.sender], _value) will `throw` if this condition is not met
    require(balances[msg.sender] >= _value);

    // @notice `Check for overflows` is not needed
    // because add(_to, _value) will `throw` if this condition is not met
    require(balances[_to] + _value >= balances[_to]);

    // @notice Subtract from the sender
    balances[msg.sender] = balances[msg.sender].sub(_value);

    // @notice Add the same to the recipient
    balances[_to] = balances[_to].add(_value);

    // @notice Trigger `transfer` event
    emit Transfer(msg.sender, _to, _value);
    return true;
  }

}
/**
 * @title BasicToken
 * @dev Simpler version of StandardToken, with basic functions
 * ----------------------------------------------------------------------------
 */
function balanceOf(address _owner) public view returns (uint256 balance) {
  return balances[_owner];
}

// @notice Get the token balance of address `_owner`