anchor.diff:    TIteratorMovement = (imLeft, imNext, imRight);
     PKeyValuePairBacktrackNode = ^TKeyValuePairBacktrackNode;
     TKeyValuePairBacktrackNode = record
  +    NodeParent : PPKeyValuePairNode;
       Node : PKeyValuePairNode;
       NextMove : TIteratorMovement;
       Next : PKeyValuePairBacktrackNode;
  
positive.code:     if KVPNode = nil then
        continue;
      NewBacktrackNode(AIterator, KVPNode);
      NextLeafTreeNode(AIterator);
      Assert(AIterator.CurNode <> nil, 'AIterator.CurNode must be <> nil after call to NextLeafTreeNode() when KVPNode was <> nil');
      Result := @AIterator.CurNode^.KVP;
      exit;
    end;
    Result := nil;
  end;
  
  procedure THashTrie.NextLeafTreeNode(var AIterator: THashTrieIterator;
      AFreeNodes: Boolean = False);
  var
    kvp : PKeyValuePair;
    procedure MoveUp;
    var
      BacktrackNode : PKeyValuePairBacktrackNode;
    begin
      BacktrackNode := AIterator.BackTrack;
      AIterator.CurNode := BacktrackNode^.Node;
      AIterator.BackTrack := BacktrackNode^.Next;
      trieAllocators.Dealloc(BacktrackNode);
    end;
  
negative.code:       end;
      end;
    if AFreeNodes and (AIterator.CurNode <> nil) then
      FreeKVPTreeNode(AIterator.CurNode);
  end;
  
  procedure THashTrie.RemoveKVPTreeNode(ParentNodePtr: PPKeyValuePairNode; Node:
      PKeyValuePairNode);
  var
    SmallestNode, SmallestNodeParent : PKeyValuePairNode;
  