docs: private IntervalRBTreeNode<T> addRange(IntervalRBTreeNode<T> n, Integer left,
        Integer right, ArrayList<MtasTreeHit<T>> list) {
      IntervalRBTreeNode<T> localN = n;
      if (localN == null) {
        String key = left.toString() + "_" + right.toString();
        localN = new IntervalRBTreeNode<>(left, right, IntervalRBTreeNode.RED, 1);
        localN.addList(list);
        index.put(key, localN);
      } else {
        if (left <= localN.left) {
          localN.leftChild = addRange(localN.leftChild, left, right, list);
          updateMaxMin(localN, localN.leftChild);
        } else {
          localN.rightChild = addRange(localN.rightChild, left, right, list);
          updateMaxMin(localN, localN.rightChild);
        }
        if (isRed(localN.rightChild) && !isRed(localN.leftChild)) {
          localN = rotateLeft(localN);
        }
        if (isRed(localN.leftChild) && isRed(localN.leftChild.leftChild)) {
          localN = rotateRight(localN);
        }
        if (isRed(localN.leftChild) && isRed(localN.rightChild)) {
          flipColors(localN);
        }
        localN.n = size(localN.leftChild) + size(localN.rightChild) + 1;
      }
      return localN;
    }