See #17798
pendingStringTable.forEach((value, key) => {
      operations[i++] = key.length;
      const encodedKey = utfEncodeString(key);
      for (let j = 0; j < encodedKey.length; j++) {
        operations[i + j] = encodedKey[j];
      }
      i += key.length;
    });
    if (numUnmountIDs > 0) {
       A
      operations[i++] = TREE_OPERATION_REMOVE;
       T
      operations[i++] = numUnmountIDs;
       F
       T
       S
      for (let j = pendingRealUnmountedIDs.length - 1; j >= 0; j--) {
        operations[i++] = pendingRealUnmountedIDs[j];
      }
       Fill in the simulated unmounts (hidden Suspense subtrees) in their order.
       (We want children to go before parents.)
       They go *after* the real unmounts because we know for sure they won't be
       children of already pushed "real" IDs. If they were, we wouldn't be able
       to discover them during the traversal, as they would have been deleted.
      for (let j = 0; j < pendingSimulatedUnmountedIDs.length; j++) {
        operations[i + j] = pendingSimulatedUnmountedIDs[j];
      }
      i += pendingSimulatedUnmountedIDs.length;
       T
      if (pendingUnmountedRootID !== null) {