anchor.diff:   end;
    result:=-1;
   end;
  +{$ifend}
   
   function PtrPosPatternSBNDMQ2(PatternLength:longint;const Text:PFLRERawByteChar;TextLength:longint;const PatternBitMasks:TFLRECharPatternBitMasks;Position:longint=0):longint;
  +{$if defined(cpux86_64) and defined(Windows) and not defined(fpc)}assembler; register;
  +asm
  + // ecx = PatternLength
  + // rdx = Text
  + // r8d = TextLength
  + // r9 = PatternBitMasks
  + // r11d = Position
  + // eax = result
  + // esi = CheckPosition
  + // edi = State
  + lea rsp,qword ptr [rsp-32]
  + mov qword ptr [rbp-24],rbx
  + mov qword ptr [rbp-16],rdi
  + mov qword ptr [rbp-8],rsi
  + mov r11d,dword ptr [rbp+48]
  +
  + // inc(Position,PatternLength-2);
  + lea eax,dword ptr [ecx-2]
  + add r11d,eax
  +
  + // dec(TextLength):
  + sub r8d,1
  +
  + // while Position<TextLength do begin
  + jmp @Loop0Start
  +
  + .align 8
  +@Loop0:
  +
  + // State:=(PatternBitMasks[Text[Position+1]] shr 1) and PatternBitMasks[Text[Position]];
  + movsxd r10,r11d
  + movzx ebx,byte ptr [rdx+r10*1+1]
  + mov ebx,dword ptr [r9+rbx*4]
  + shr ebx,1
  + movzx r10d,byte ptr [rdx+r10*1]
  + mov r10d,dword ptr [r9+r10*4]
  + and r10d,ebx
  + mov edi,r10d
  +
  + // if State<>0 then begin
  + test edi,edi
  + je @NextPosition
  +
  + // CheckPosition:=Position-(PatternLength-1);
  + lea ebx,dword ptr [ecx-1]
  + mov r10d,r11d
  + sub r10d,ebx
  + mov esi,r10d
  +
  + .align 8
  +@Loop1:
  +
  + // dec(Position);
  + sub r11d,1
  +
  + // if Position<0 then begin
  + js @Loop1Break
  +//cmp r11d,0
  +//jl @Loop1Break
  +
  + // State:=(State shr 1) and PatternBitMasks[Text[Position]];
  + movsxd r10,r11d
  + movzx ebx,byte ptr [rdx+r10*1]
  + mov r10d,edi
  + shr r10d,1
  + mov ebx,dword ptr [r9+rbx*4]
  + and r10d,ebx
  + mov edi,r10d
  +
  + // until State=0;
  + test edi,edi
  + jne @Loop1
  +@Loop1Break:
  +
  + // if Position=CheckPosition then begin
  + cmp r11d,esi
  + jne @NextPosition
  +
  + // result:=CheckPosition+1;
  + lea r10d,dword ptr [esi+1]
  + mov eax,r10d
  +
  + // exit;
  + jmp @Done
  +
  +@NextPosition:
  +
  + // inc(Position,PatternLength-1);
  + lea r10d,dword ptr [ecx-1]
  + add r11d,r10d
  +
  +@Loop0Start:
  + cmp r11d,r8d
  + jl @Loop0
  +
  + // result:=-1;
  + mov eax,-1
  +
  +@Done:
  +
  + // end;
  + mov rbx,qword ptr [rbp-24]
  + mov rdi,qword ptr [rbp-16]
  + mov rsi,qword ptr [rbp-8]
  +end;
  +{$else}
   var CheckPosition:longint;
       State:longword;
   begin
  
positive.code: 
  const FLREVersion=$00000004;
  
        FLREVersionString='1.00.2016.02.05.08.51.0000';
  
        FLREMaxPrefixCharClasses=32;
  
  
negative.code:  end;
   result:=-1;
  end;
  {$ifend}
  
  function FLREPtrCopy(const Src:PFLRERawByteChar;const From,Len:longint):TFLRERawByteString;
  begin
  