class UInt256 implements UInt256Value<UInt256> {

  @Override
  public UInt256 multiplyMod(UInt256 value, UInt256 modulus) {
    if (modulus.isZero()) {
      throw new ArithmeticException("multiplyMod with zero modulus");
    }
    if (isZero() || value.isZero()) {
      return ZERO;
    }
    if (value.equals(UInt256.ONE)) {
      return mod(modulus);
    }
    return UInt256.valueOf(toBigInteger().multiply(value.toBigInteger()).mod(modulus.toBigInteger()));
  }

  private  UInt256(Bytes32 bytes);
  private  UInt256(long value);
  private  UInt256(int[] ints);

}