anchor.diff:    begin
       TUInt64(Result).Lo := Value.FData[0];
       if (Value.FSize and SizeMask) > 1 then
  -      TUInt64(Result).Hi := Value.FData[1] and High(Integer)
  +      TUInt64(Result).Hi := Value.FData[1]
       else
         TUInt64(Result).Hi := 0;
       if Value.FSize < 0 then
         Result := -Result;
     end;
  +end;
  +
  +class operator BigInteger.Explicit(const Value: BigInteger): UInt64;
  +begin
  +  if Value.FData = nil then
  +    Result := 0
  +  else
  +  begin
  +    TUInt64(Result).Lo := Value.FData[0];
  +    if (Value.FSize and SizeMask) > 1 then
  +      TUInt64(Result).Hi := Value.FData[1]
  +    else
  +      TUInt64(Result).Hi := 0;
  +  end;
  +  if Value.FSize < 0 then
  +    Result := UInt64(-Int64(Result));
   end;
   
   function BigInteger.AsCardinal: Cardinal;
  
positive.code: 
      /// <summary>Explicitly (i.e. with a cast) converts the specified BigInteger to an Integer. If necessary, the
      ///   value of the BigInteger is truncated or sign-extended to fit in the result.</summary>
      class operator Explicit(const Value: BigInteger): Integer;
  
      /// <summary>Explicitly (i.e. with a cast) converts the specified BigInteger to a Cardinal. If necessary, the
      ///   value of the BigInteger is truncated to fit in the result.</summary>
      class operator Explicit(const Value: BigInteger): Cardinal;
  
      /// <summary>Explicitly (i.e. with a cast) converts the specified BigInteger to an Int64. If necessary, the
      ///   value of the BigInteger is truncated or sign-extended to fit in the result.</summary>
  
negative.code:     Result := UInt64(Self)
    else
      Error(ecConversion, 'UInt64');
  end;
  
  class function BigInteger.InternalCompare(Left, Right: PLimb; LSize, RSize: Integer): Integer;
  