docs: public static ArrayList<MtasTreeHit<?>> advanceMtasTree(int position,
        IndexInput in, long ref, long objectRefApproxOffset) throws IOException {
      ArrayList<MtasTreeHit<?>> list = new ArrayList<MtasTreeHit<?>>();
      ArrayList<MtasTreeItem> checkList = new ArrayList<MtasTreeItem>();
      AtomicBoolean isSinglePoint = new AtomicBoolean(false);
      AtomicBoolean isStoreAdditonalId = new AtomicBoolean(false);
      AtomicLong nodeRefApproxOffset = new AtomicLong(-1);
      checkList.add(getMtasTreeItem(ref, isSinglePoint, isStoreAdditonalId,
          nodeRefApproxOffset, in, objectRefApproxOffset));
      ArrayList<Long> history = new ArrayList<Long>();
      do {
        MtasTreeItem checkItem = checkList.remove(checkList.size() - 1);
        advanceMtasTree(checkItem, position, in, isSinglePoint,
            isStoreAdditonalId, objectRefApproxOffset, list, nodeRefApproxOffset,
            checkList);
        history.add(checkItem.ref);
        if (history.size() > 1000) {
          throw new IOException(
              "ADVANCE " + position + " " + checkList + "\n" + history);
        }
      } while (checkList.size() > 0);
      return list;
    }