static long getVaruint64(PositionedByteRange src, boolean comp) {
    assert src.getRemaining() >= lengthVaruint64(src, comp);
    final long ret;
    Order ord = comp ? DESCENDING : ASCENDING;
    byte x = src.get();
    final int a0 = ord.apply(x) & 0xff, a1, a2, a3, a4, a5, a6, a7, a8;
    if (-1 == unsignedCmp(a0, 241)) {
      return a0;
    }
    x = src.get();
    a1 = ord.apply(x) & 0xff;
    if (-1 == unsignedCmp(a0, 249)) {
      return (a0 - 241L) * 256 + a1 + 240;
    }
    x = src.get();
    a2 = ord.apply(x) & 0xff;
    if (a0 == 249) {
      return 2288L + 256 * a1 + a2;
    }
    x = src.get();
    a3 = ord.apply(x) & 0xff;
    if (a0 == 250) {
      return ((long) a1 << 16L) | (a2 << 8) | a3;
    }
    x = src.get();
    a4 = ord.apply(x) & 0xff;
    ret = (((long) a1) << 24) | (a2 << 16) | (a3 << 8) | a4;
    if (a0 == 251) {
      return ret;
    }
    x = src.get();
    a5 = ord.apply(x) & 0xff;
    if (a0 == 252) {
      return (ret << 8) | a5;
    }
    x = src.get();
    a6 = ord.apply(x) & 0xff;
    if (a0 == 253) {
      return (ret << 16) | (a5 << 8) | a6;
    }
    x = src.get();
    a7 = ord.apply(x) & 0xff;
    if (a0 == 254) {
      return (ret << 24) | (a5 << 16) | (a6 << 8) | a7;
    }
    x = src.get();
    a8 = ord.apply(x) & 0xff;
    return (ret << 32) | (((long) a5) << 24) | (a6 << 16) | (a7 << 8) | a8;
  }
Decode a sequence of bytes in {@code src} as a varuint64. Compliment the encoded value when
{@code comp} is true.
@return the decoded value.
hbase-common/src/main/java/org/apache/hadoop/hbase/util/OrderedBytes.java