contract ERC20Compatible {
	mapping(address => mapping(address => uint256)) private allowed;

	event Approval(address indexed _owner, address indexed _spender, uint256 _value);	
	function _transfer(address _from, address _to, uint256 _amount, bytes _data) internal returns (bool success);

	/**
	* @dev Get the amount of tokens that a holder allowed other holder to spend.
	* @param _owner The address of the owner.
	* @param _spender The address of the spender.
	* @return amount The amount of tokens still available for the spender.
	*/
	function allowance(address _owner, address _spender) external constant returns (uint256 amount) {
		return allowed[_owner][_spender];
	}
	/**
	* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
	* @param _spender The address of the holder who will spend the tokens of the msg.sender.
	* @param _amount The amount of tokens allow to be spent.
	* @return returns true on success or throw on failure
	*/
	function approve(address _spender, uint256 _amount) external returns (bool success) {
		require( _spender != address(0) 
			&& _spender != msg.sender 
			&& (_amount == 0 || allowed[msg.sender][_spender] == 0)
		);
		allowed[msg.sender][_spender] = _amount;
		Approval(msg.sender, _spender, _amount);
		return true;
	}
	/**
	* @dev Transfer tokens from one holder to the other holder.
	* @param _from The address from which the tokens will be transfered.
	* @param _to The address to which the tokens will be transfered.
	* @param _amount The amount of tokens to be transferred.
	* @return returns true on success or throw on failure
	*/
	function transferFrom(address _from, address _to, uint256 _amount) external returns (bool success) {
		require(allowed[_from][msg.sender] >= _amount);
		allowed[_from][msg.sender] -= _amount;
		return _transfer(_from, _to, _amount, "");
	}
}
function transferFrom(address _from, address _to, uint256 _amount) external returns (bool success) {
		require(allowed[_from][msg.sender] >= _amount);
		allowed[_from][msg.sender] -= _amount;
		return _transfer(_from, _to, _amount, "");
	}
/**
 	* @dev Transfer tokens from one holder to the other holder.
 	* @param _from The address from which the tokens will be transfered.
 	* @param _to The address to which the tokens will be transfered.
 	* @param _amount The amount of tokens to be transferred.
 	* @return returns true on success or throw on failure
 	*/