anchor.diff:    TPathMapNode = packed record
       SortValue: Cardinal; // path + heuristics to start point
       Path: Cardinal; // path from finish point to the cell
  -    Coordinates: TWPoint;
  +    Coordinates: TCPFPoint;
       Prev, Next: PPathMapNode;
       case Integer of
       0: (
  +         ParentAndFlags: Byte{Parent:3; WayDeltaId:2; Way:3};
            Mask: Byte;
  -         ParentAndFlags: Byte{Parent:3; WayDeltaId:2; Way:3};
            ParentMask: Byte;
            Tile: Byte;
          );
  
positive.code:     Current: record
        Node: PPathMapNode;
        Cell: PPathMapCell;
        Coordinates: TWPoint;
        Path: Cardinal;
      end;
    end;
  begin
    Store.Self := MapSelf;//Pointer({$ifdef CPFLIB}@Self{$else}Self{$endif});
    Store.HexagonalFlag := NativeUInt(TPathMapPtr(MapSelf).FKind = mkHexagonal) shl 17;
    //Store.Info := TPathMapPtr(Store.Self).FInfo;
    CopyInfo(Store.Info, TPathMapPtr(MapSelf).FInfo);
  
    // finding loop from Finish to Start
    Node := FinishNode;
    goto current_initialize;
    repeat
      // child list
      ChildList := Pointer(NativeUInt(CHILD_ARRAYS_OFFSETS[Byte(NodeInfo shr 8)]));
      Inc(NativeUInt(ChildList), NativeUInt(@CHILD_ARRAYS));
  
      // reinitialize NodeInfo:
      //   - mask
      //   - stored childs counter
      //   - bit hexagonal << 1
      //   - tile
      NodeInfo := ((NodeInfo and (NodeInfo shr 16)) and Integer($ff0000ff)) or Store.HexagonalFlag;
  
      // each child cell loop
      goto nextchild;
  
negative.code: 
  
  type
    TYXSmallPoint = record
      y: SmallInt;
      x: SmallInt;
    end;
  
    TChildArray = array[0..7] of Word;
    PChildArray = ^TChildArray;
  
  const
    _0 = (1 shl 0);
    _1 = (1 shl 1);
    _2 = (1 shl 2);
    _3 = (1 shl 3);
    _4 = (1 shl 4);
    _5 = (1 shl 5);
    _6 = (1 shl 6);
    _7 = (1 shl 7);
  
    POINT_OFFSETS: array[0..7] of TYXSmallPoint = (
      {0} (y: -1; x: -1),
      {1} (y: -1; x:  0),
      {2} (y: -1; x: +1),
      {3} (y:  0; x: +1),
      {4} (y: +1; x: +1),
      {5} (y: +1; x:  0),
      {6} (y: +1; x: -1),
      {7} (y:  0; x: -1)
    );
  
    POINT_OFFSETS_INVERT: array[0..7] of TYXSmallPoint = (
      {0 --> 4} (y: +1; x: +1),
      {1 --> 5} (y: +1; x:  0),
      {2 --> 6} (y: +1; x: -1),
      {3 --> 7} (y:  0; x: -1),
      {4 --> 0} (y: -1; x: -1),
      {5 --> 1} (y: -1; x:  0),
      {6 --> 2} (y: -1; x: +1),
      {7 --> 3} (y:  0; x: +1)
    );
  
    CHILD_ARRAYS: array[0..15{Parent*2 + FLAG_CLOCKWISE}] of TChildArray = (
  