anchor.diff:      FActualInfo.FoundPath.FullPath := True;
       // Alloc(Length * SizeOf(TPoint))
       NodeInfo := FActualInfo.FoundPath.Length * SizeOf(TPoint);
  -    with FActualInfo.FoundPath.Buffer do if (NodeInfo > FAllocatedSize) then Realloc(NodeInfo);
  +    if (NodeInfo > FActualInfo.FoundPath.Buffer.FAllocatedSize) then FActualInfo.FoundPath.Buffer.Realloc(NodeInfo);
       FillAttainablePath(BestStartPoint.Node, FinishNode);
     end else
     begin
       FActualInfo.FoundPath.FullPath := False;
       // Alloc(2 * SizeOf(TPoint))
       NodeInfo := 2 * SizeOf(TPoint);
  -    with FActualInfo.FoundPath.Buffer do if (NodeInfo > FAllocatedSize) then Realloc(NodeInfo);
  +    if (NodeInfo > FActualInfo.FoundPath.Buffer.FAllocatedSize) then FActualInfo.FoundPath.Buffer.Realloc(NodeInfo);
   
       S := FActualInfo.FoundPath.Buffer.Memory;
       S.X := BestStartPoint.X;
  
positive.code:   FLAG_SECTORS = (1 shl 4);
    FLAG_EXCLUDED = (1 shl 5);
    FLAG_WEIGHTS = (1 shl 6);
  
    CHANGED_FINISH_INTERVAL = 8;
  label
    path_found, path_not_found, fill_result;
  var
    i: NativeUInt;
    MapWidth, MapHeight: Cardinal;
  
negative.code:   FinishX, FinishY: Integer;
    S: PPoint;
    Flags, StartFlags: NativeUInt;
    HLine, HDiagonal: NativeInt;
    ResultPath: ^TTileMapPath;
  
    FullPath: Boolean;
  