anchor.diff:   result^.SubMatches[Index]:=Position;
   end;
   
  -function TFLREThreadLocalStorage.NewThread(const Instruction:PFLREInstruction;const SubMatches:PFLRESubMatches):TFLREThread; {$ifdef caninline}inline;{$endif}
  -begin
  - result.Instruction:=Instruction;
  - result.SubMatches:=SubMatches;
  -end;
  -
  -procedure TFLREThreadLocalStorage.AddThread(const ThreadList:PFLREThreadList;Instruction:PFLREInstruction;SubMatches:PFLRESubMatches;const Position:longint);
  +procedure TFLREThreadLocalStorage.ParallelNFAAddThread(const ThreadList:PFLREThreadList;Instruction:PFLREInstruction;SubMatches:PFLRESubMatches;const Position:longint);
    function Satisfy(const NextFlags:longword;const Position:longint):boolean;
    begin
     result:=((NextFlags and sfEmptyAllFlags) and not GetSatisfyFlags(Position))=0;
  
positive.code: 
   inc(ThreadLocalStorage.Generation);
   if UnanchoredStart then begin
    ThreadLocalStorage.AddThread(CurrentThreadList,UnanchoredStartInstruction,SubMatches,StartPosition);
   end else begin
    ThreadLocalStorage.AddThread(CurrentThreadList,AnchoredStartInstruction,SubMatches,StartPosition);
   end;
  
   Matched:=nil;
  
negative.code:      if (CurrentPosition>=InputLength) or (byte(ansichar(CurrentChar))<>Instruction^.Value) then begin
        ThreadLocalStorage.SubMatchesRelease(SubMatches);
       end else begin
        ThreadLocalStorage.ParallelNFAAddThread(NewThreadList,Instruction^.Next,SubMatches,CurrentPosition+1);
       end;
      end;
      opCHAR:begin
       if (CurrentPosition>=InputLength) or not (CurrentChar in PFLRECharClass(pointer(ptruint(Instruction^.Value)))^) then begin
        ThreadLocalStorage.SubMatchesRelease(SubMatches);
       end else begin
        ThreadLocalStorage.ParallelNFAAddThread(NewThreadList,Instruction^.Next,SubMatches,CurrentPosition+1);
       end;
      end;
      opANY:begin
       if CurrentPosition>=InputLength then begin
        ThreadLocalStorage.SubMatchesRelease(SubMatches);
       end else begin
        ThreadLocalStorage.ParallelNFAAddThread(NewThreadList,Instruction^.Next,SubMatches,CurrentPosition+1);
       end;
      end;
      opMATCH:begin
  