code: static UUID getNextHash(UUID hash) {
          if (hash == null) {
              // No hash given. By definition, the first hash is the "next" one".
              hash = MIN_HASH;
          } else if (hash.compareTo(MAX_HASH) >= 0) {
              // Given hash already equals or exceeds the max value. There is no successor.
              return null;
          }
  
          long msb = hash.getMostSignificantBits();
          long lsb = hash.getLeastSignificantBits();
          if (lsb == Long.MAX_VALUE) {
              msb++; // This won't overflow since we've checked that state is not end (i.e., id != MAX).
              lsb = Long.MIN_VALUE;
          } else {
              lsb++;
          }
  
          return new UUID(msb, lsb);
      }
docs: Generates a new Key Hash that is immediately after the given one. We define Key Hash H2 to be immediately after
  Key Hash h1 if there doesn't exist Key Hash H3 such that H1&lt;H3&lt;H2. The ordering is performed using {@link UUID#compareTo}.
  
  @return The successor Key Hash, or null if no more successors are available (if {@link IteratorState#isEnd} returns true).