@Override
public Amount fromParser(BinaryParser parser, Integer hint) {
BigDecimal value;
byte[] mantissa = parser.read(8);
byte b1 = mantissa[0], b2 = mantissa[1];
boolean isIOU = (b1 & 0x80) != 0;
boolean isPositive = (b1 & 0x40) != 0;
int sign = isPositive ? 1 : -1;
if (isIOU) {
mantissa[0] = 0;
Currency curr = Currency.translate.fromParser(parser);
AccountID issuer = AccountID.translate.fromParser(parser);
int exponent = ((b1 & 0x3F) << 2) + ((b2 & 0xff) >> 6) - 97;
mantissa[1] &= 0x3F;
value = new BigDecimal(new BigInteger(sign, mantissa), -exponent);
return new Amount(value, curr, issuer, false);
} else {
mantissa[0] &= 0x3F;
value = xrpFromDropsMantissa(mantissa, sign);
return new Amount(value);
}
}