anchor.diff:    var
       FCurrentCRC: UInt32;
   
  -    procedure LocalCRCCompute(const ACRCTable: THashLibUInt32Array;
  +    procedure LocalCRCCompute(const ACRCTable: THashLibMatrixUInt32Array;
         const AData: THashLibByteArray; AIndex, ALength: Int32);
   
       class function Init_CRC_Table(APolynomial: UInt32)
  -      : THashLibUInt32Array; static;
  +      : THashLibMatrixUInt32Array; static;
   
     public
   
  
positive.code:           * }
          // faster branchless variant
          LRes := (LRes shr 1) xor (-Int32(LRes and 1) and APolynomial);
          Result[(LJIdx * 256) + LIdx] := LRes;
          System.Inc(LKIdx);
        end;
      end;
    end;
  end;
  
  procedure TCRC32Fast.LocalCRCCompute(const ACRCTable: THashLibUInt32Array;
    const AData: THashLibByteArray; AIndex, ALength: Int32);
  var
    LCRC, LA, LB, LC, LD: UInt32;
    LCRCTable: THashLibUInt32Array;
  begin
    LCRC := not FCurrentCRC; // LCRC := System.High(UInt32) xor FCurrentCRC;
    LCRCTable := ACRCTable;
    while ALength >= 16 do
    begin
  
      LA := LCRCTable[(3 * 256) + AData[AIndex + 12]] xor LCRCTable
        [(2 * 256) + AData[AIndex + 13]] xor LCRCTable
        [(1 * 256) + AData[AIndex + 14]] xor LCRCTable
        [(0 * 256) + AData[AIndex + 15]];
  
      LB := LCRCTable[(7 * 256) + AData[AIndex + 8]] xor LCRCTable
        [(6 * 256) + AData[AIndex + 9]] xor LCRCTable
        [(5 * 256) + AData[AIndex + 10]] xor LCRCTable
        [(4 * 256) + AData[AIndex + 11]];
  
      LC := LCRCTable[(11 * 256) + AData[AIndex + 4]] xor LCRCTable
        [(10 * 256) + AData[AIndex + 5]] xor LCRCTable
        [(9 * 256) + AData[AIndex + 6]] xor LCRCTable
        [(8 * 256) + AData[AIndex + 7]];
  
      LD := LCRCTable[(15 * 256) + ((LCRC and $FF) xor AData[AIndex])
        ] xor LCRCTable[(14 * 256) + (((LCRC shr 8) and $FF) xor AData[AIndex + 1]
        )] xor LCRCTable[(13 * 256) + (((LCRC shr 16) and $FF) xor AData
        [AIndex + 2])] xor LCRCTable
        [(12 * 256) + ((LCRC shr 24) xor AData[AIndex + 3])];
  
      LCRC := LD xor LC xor LB xor LA;
      System.Inc(AIndex, 16);
      System.Dec(ALength, 16);
    end;
  
    System.Dec(ALength);
    while (ALength >= 0) do
    begin
      LCRC := LCRCTable[Byte(LCRC xor AData[AIndex])] xor (LCRC shr 8);
      System.Inc(AIndex);
      System.Dec(ALength);
    end;
  
  
negative.code:     CRC32_CASTAGNOLI_Polynomial = UInt32($82F63B78); // Polynomial Reversed
      class var
  
        FCRC32_CASTAGNOLI_Table: THashLibMatrixUInt32Array;
  
      class constructor CRC32_CASTAGNOLI();
  
  