anchor.diff:  class procedure TConverters.ReadUInt32AsBytesLE(AInput: UInt32;
     const AOutput: THashLibByteArray; AIndex: Int32);
   begin
  +{$IFDEF HASHLIB_LITTLE_ENDIAN}
  +{$IFDEF HASHLIB_REQUIRES_PROPER_ALIGNMENT}
  +  System.Move(AInput, AOutput[AIndex], System.SizeOf(UInt32));
  +{$ELSE}
  +  PCardinal(PByte(AOutput) + AIndex)^ := AInput;
  +{$ENDIF HASHLIB_REQUIRES_PROPER_ALIGNMENT}
  +{$ELSE}
     AOutput[AIndex] := Byte(AInput);
     AOutput[AIndex + 1] := Byte(AInput shr 8);
     AOutput[AIndex + 2] := Byte(AInput shr 16);
     AOutput[AIndex + 3] := Byte(AInput shr 24);
  +{$ENDIF HASHLIB_LITTLE_ENDIAN}
   end;
   
   class procedure TConverters.ReadUInt32AsBytesBE(AInput: UInt32;
     const AOutput: THashLibByteArray; AIndex: Int32);
   begin
  +{$IFDEF HASHLIB_LITTLE_ENDIAN}
     AOutput[AIndex] := Byte(AInput shr 24);
     AOutput[AIndex + 1] := Byte(AInput shr 16);
     AOutput[AIndex + 2] := Byte(AInput shr 8);
     AOutput[AIndex + 3] := Byte(AInput);
  +{$ELSE}
  +{$IFDEF HASHLIB_REQUIRES_PROPER_ALIGNMENT}
  +  System.Move(AInput, AOutput[AIndex], System.SizeOf(UInt32));
  +{$ELSE}
  +  PCardinal(PByte(AOutput) + AIndex)^ := AInput;
  +{$ENDIF HASHLIB_REQUIRES_PROPER_ALIGNMENT}
  +{$ENDIF HASHLIB_LITTLE_ENDIAN}
   end;
   
   class procedure TConverters.ReadUInt64AsBytesLE(AInput: UInt64;
     const AOutput: THashLibByteArray; AIndex: Int32);
   begin
  +{$IFDEF HASHLIB_LITTLE_ENDIAN}
  +{$IFDEF HASHLIB_REQUIRES_PROPER_ALIGNMENT}
  +  System.Move(AInput, AOutput[AIndex], System.SizeOf(UInt64));
  +{$ELSE}
  +  PUInt64(PByte(AOutput) + AIndex)^ := AInput;
  +{$ENDIF HASHLIB_REQUIRES_PROPER_ALIGNMENT}
  +{$ELSE}
     AOutput[AIndex] := Byte(AInput);
     AOutput[AIndex + 1] := Byte(AInput shr 8);
     AOutput[AIndex + 2] := Byte(AInput shr 16);
  
positive.code: class function TConverters.ReadPCardinalAsUInt32LE(AInput: PCardinal): UInt32;
  begin
    result := le2me_32(ReadPCardinalAsUInt32(AInput));
    // while this below is slower, it's portable
    // result := (UInt32(AInput[AIndex])) or (UInt32(AInput[AIndex + 1]) shl 8) or
    // (UInt32(AInput[AIndex + 2]) shl 16) or (UInt32(AInput[AIndex + 3]) shl 24);
  end;
  
  class function TConverters.ReadPUInt64AsUInt64LE(AInput: PUInt64): UInt64;
  begin
    result := le2me_64(ReadPUInt64AsUInt64(AInput));
    // while this below is slower, it's portable
    // result := (UInt64(AInput[AIndex])) or (UInt64(AInput[AIndex + 1]) shl 8) or
    // (UInt64(AInput[AIndex + 2]) shl 16) or (UInt64(AInput[AIndex + 3]) shl 24)
  
negative.code:       static; inline;
  
      class function ReadPUInt64AsUInt64LE(AInput: PUInt64): UInt64;
        static; inline;
  
      class function ReadPCardinalAsUInt32BE(AInput: PCardinal): UInt32;
        static; inline;
  
      class function ReadPUInt64AsUInt64BE(AInput: PUInt64): UInt64;
        static; inline;
  
      class function ReadBytesAsUInt32LE(AInput: PByte; AIndex: Int32): UInt32;
  