public class org.apache.cassandra.utils.IntervalTree<C extends java.lang.Comparable<? super C>, D, I extends org.apache.cassandra.utils.Interval<C, D>> implements java.lang.Iterable<I>
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.cassandra.utils.IntervalTree
  super_class: java.lang.Object
{
  private static final org.slf4j.Logger logger;
    descriptor: Lorg/slf4j/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final org.apache.cassandra.utils.IntervalTree EMPTY_TREE;
    descriptor: Lorg/apache/cassandra/utils/IntervalTree;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final org.apache.cassandra.utils.IntervalTree<C, D, I>.IntervalNode head;
    descriptor: Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>.IntervalNode;

  private final int count;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 40
            ldc Lorg/apache/cassandra/utils/IntervalTree;
            invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/Class;)Lorg/slf4j/Logger;
            putstatic org.apache.cassandra.utils.IntervalTree.logger:Lorg/slf4j/Logger;
         1: .line 43
            new org.apache.cassandra.utils.IntervalTree
            dup
            aconst_null
            invokespecial org.apache.cassandra.utils.IntervalTree.<init>:(Ljava/util/Collection;)V
            putstatic org.apache.cassandra.utils.IntervalTree.EMPTY_TREE:Lorg/apache/cassandra/utils/IntervalTree;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  protected void <init>(java.util.Collection<I>);
    descriptor: (Ljava/util/Collection;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.apache.cassandra.utils.IntervalTree this
        start local 1 // java.util.Collection intervals
         0: .line 48
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 50
            aload 0 /* this */
            aload 1 /* intervals */
            ifnull 2
            aload 1 /* intervals */
            invokeinterface java.util.Collection.isEmpty:()Z
            ifeq 3
      StackMap locals: org.apache.cassandra.utils.IntervalTree java.util.Collection
      StackMap stack: org.apache.cassandra.utils.IntervalTree
         2: aconst_null
            goto 4
      StackMap locals:
      StackMap stack: org.apache.cassandra.utils.IntervalTree
         3: new org.apache.cassandra.utils.IntervalTree$IntervalNode
            dup
            aload 0 /* this */
            aload 1 /* intervals */
            invokespecial org.apache.cassandra.utils.IntervalTree$IntervalNode.<init>:(Lorg/apache/cassandra/utils/IntervalTree;Ljava/util/Collection;)V
      StackMap locals: org.apache.cassandra.utils.IntervalTree java.util.Collection
      StackMap stack: org.apache.cassandra.utils.IntervalTree org.apache.cassandra.utils.IntervalTree$IntervalNode
         4: putfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
         5: .line 51
            aload 0 /* this */
            aload 1 /* intervals */
            ifnonnull 6
            iconst_0
            goto 7
      StackMap locals:
      StackMap stack: org.apache.cassandra.utils.IntervalTree
         6: aload 1 /* intervals */
            invokeinterface java.util.Collection.size:()I
      StackMap locals: org.apache.cassandra.utils.IntervalTree java.util.Collection
      StackMap stack: org.apache.cassandra.utils.IntervalTree int
         7: putfield org.apache.cassandra.utils.IntervalTree.count:I
         8: .line 52
            return
        end local 1 // java.util.Collection intervals
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    9     0       this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;
            0    9     1  intervals  Ljava/util/Collection<TI;>;
    Signature: (Ljava/util/Collection<TI;>;)V
    MethodParameters:
           Name  Flags
      intervals  

  public static <C extends java.lang.Comparable<? super C>, D, I extends org.apache.cassandra.utils.Interval<C, D>> org.apache.cassandra.utils.IntervalTree<C, D, I> build(java.util.Collection<I>);
    descriptor: (Ljava/util/Collection;)Lorg/apache/cassandra/utils/IntervalTree;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.util.Collection intervals
         0: .line 56
            aload 0 /* intervals */
            ifnull 1
            aload 0 /* intervals */
            invokeinterface java.util.Collection.isEmpty:()Z
            ifeq 2
         1: .line 57
      StackMap locals:
      StackMap stack:
            invokestatic org.apache.cassandra.utils.IntervalTree.emptyTree:()Lorg/apache/cassandra/utils/IntervalTree;
            areturn
         2: .line 59
      StackMap locals:
      StackMap stack:
            new org.apache.cassandra.utils.IntervalTree
            dup
            aload 0 /* intervals */
            invokespecial org.apache.cassandra.utils.IntervalTree.<init>:(Ljava/util/Collection;)V
            areturn
        end local 0 // java.util.Collection intervals
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0  intervals  Ljava/util/Collection<TI;>;
    Signature: <C::Ljava/lang/Comparable<-TC;>;D:Ljava/lang/Object;I:Lorg/apache/cassandra/utils/Interval<TC;TD;>;>(Ljava/util/Collection<TI;>;)Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;
    MethodParameters:
           Name  Flags
      intervals  

  public static <C extends java.lang.Comparable<? super C>, D, I extends org.apache.cassandra.utils.Interval<C, D>> org.apache.cassandra.utils.IntervalTree$Serializer<C, D, I> serializer(org.apache.cassandra.io.ISerializer<C>, org.apache.cassandra.io.ISerializer<D>, java.lang.reflect.Constructor<I>);
    descriptor: (Lorg/apache/cassandra/io/ISerializer;Lorg/apache/cassandra/io/ISerializer;Ljava/lang/reflect/Constructor;)Lorg/apache/cassandra/utils/IntervalTree$Serializer;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.apache.cassandra.io.ISerializer pointSerializer
        start local 1 // org.apache.cassandra.io.ISerializer dataSerializer
        start local 2 // java.lang.reflect.Constructor constructor
         0: .line 64
            new org.apache.cassandra.utils.IntervalTree$Serializer
            dup
            aload 0 /* pointSerializer */
            aload 1 /* dataSerializer */
            aload 2 /* constructor */
            invokespecial org.apache.cassandra.utils.IntervalTree$Serializer.<init>:(Lorg/apache/cassandra/io/ISerializer;Lorg/apache/cassandra/io/ISerializer;Ljava/lang/reflect/Constructor;)V
            areturn
        end local 2 // java.lang.reflect.Constructor constructor
        end local 1 // org.apache.cassandra.io.ISerializer dataSerializer
        end local 0 // org.apache.cassandra.io.ISerializer pointSerializer
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    1     0  pointSerializer  Lorg/apache/cassandra/io/ISerializer<TC;>;
            0    1     1   dataSerializer  Lorg/apache/cassandra/io/ISerializer<TD;>;
            0    1     2      constructor  Ljava/lang/reflect/Constructor<TI;>;
    Signature: <C::Ljava/lang/Comparable<-TC;>;D:Ljava/lang/Object;I:Lorg/apache/cassandra/utils/Interval<TC;TD;>;>(Lorg/apache/cassandra/io/ISerializer<TC;>;Lorg/apache/cassandra/io/ISerializer<TD;>;Ljava/lang/reflect/Constructor<TI;>;)Lorg/apache/cassandra/utils/IntervalTree$Serializer<TC;TD;TI;>;
    MethodParameters:
                 Name  Flags
      pointSerializer  
      dataSerializer   
      constructor      

  public static <C extends java.lang.Comparable<? super C>, D, I extends org.apache.cassandra.utils.Interval<C, D>> org.apache.cassandra.utils.IntervalTree<C, D, I> emptyTree();
    descriptor: ()Lorg/apache/cassandra/utils/IntervalTree;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 70
            getstatic org.apache.cassandra.utils.IntervalTree.EMPTY_TREE:Lorg/apache/cassandra/utils/IntervalTree;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
    Signature: <C::Ljava/lang/Comparable<-TC;>;D:Ljava/lang/Object;I:Lorg/apache/cassandra/utils/Interval<TC;TD;>;>()Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;

  public int intervalCount();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.utils.IntervalTree this
         0: .line 75
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.count:I
            ireturn
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;

  public boolean isEmpty();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.cassandra.utils.IntervalTree this
         0: .line 80
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
            ifnonnull 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;

  public C max();
    descriptor: ()Ljava/lang/Comparable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.cassandra.utils.IntervalTree this
         0: .line 85
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
            ifnonnull 2
         1: .line 86
            new java.lang.IllegalStateException
            dup
            invokespecial java.lang.IllegalStateException.<init>:()V
            athrow
         2: .line 88
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
            getfield org.apache.cassandra.utils.IntervalTree$IntervalNode.high:Ljava/lang/Comparable;
            areturn
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;
    Signature: ()TC;

  public C min();
    descriptor: ()Ljava/lang/Comparable;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.cassandra.utils.IntervalTree this
         0: .line 93
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
            ifnonnull 2
         1: .line 94
            new java.lang.IllegalStateException
            dup
            invokespecial java.lang.IllegalStateException.<init>:()V
            athrow
         2: .line 96
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
            getfield org.apache.cassandra.utils.IntervalTree$IntervalNode.low:Ljava/lang/Comparable;
            areturn
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;
    Signature: ()TC;

  public java.util.List<D> search(org.apache.cassandra.utils.Interval<C, D>);
    descriptor: (Lorg/apache/cassandra/utils/Interval;)Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.apache.cassandra.utils.IntervalTree this
        start local 1 // org.apache.cassandra.utils.Interval searchInterval
         0: .line 101
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
            ifnonnull 2
         1: .line 102
            invokestatic java.util.Collections.emptyList:()Ljava/util/List;
            areturn
         2: .line 104
      StackMap locals:
      StackMap stack:
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* results */
        start local 2 // java.util.List results
         3: .line 105
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
            aload 1 /* searchInterval */
            aload 2 /* results */
            invokevirtual org.apache.cassandra.utils.IntervalTree$IntervalNode.searchInternal:(Lorg/apache/cassandra/utils/Interval;Ljava/util/List;)V
         4: .line 106
            aload 2 /* results */
            areturn
        end local 2 // java.util.List results
        end local 1 // org.apache.cassandra.utils.Interval searchInterval
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;
            0    5     1  searchInterval  Lorg/apache/cassandra/utils/Interval<TC;TD;>;
            3    5     2         results  Ljava/util/List<TD;>;
    Signature: (Lorg/apache/cassandra/utils/Interval<TC;TD;>;)Ljava/util/List<TD;>;
    MethodParameters:
                Name  Flags
      searchInterval  

  public java.util.List<D> search(C);
    descriptor: (Ljava/lang/Comparable;)Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.apache.cassandra.utils.IntervalTree this
        start local 1 // java.lang.Comparable point
         0: .line 111
            aload 0 /* this */
            aload 1 /* point */
            aload 1 /* point */
            aconst_null
            invokestatic org.apache.cassandra.utils.Interval.create:(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/cassandra/utils/Interval;
            invokevirtual org.apache.cassandra.utils.IntervalTree.search:(Lorg/apache/cassandra/utils/Interval;)Ljava/util/List;
            areturn
        end local 1 // java.lang.Comparable point
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;
            0    1     1  point  TC;
    Signature: (TC;)Ljava/util/List<TD;>;
    MethodParameters:
       Name  Flags
      point  

  public java.util.Iterator<I> iterator();
    descriptor: ()Ljava/util/Iterator;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // org.apache.cassandra.utils.IntervalTree this
         0: .line 116
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
            ifnonnull 2
         1: .line 117
            invokestatic java.util.Collections.emptyIterator:()Ljava/util/Iterator;
            areturn
         2: .line 119
      StackMap locals:
      StackMap stack:
            new org.apache.cassandra.utils.IntervalTree$TreeIterator
            dup
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.cassandra.utils.IntervalTree.head:Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;
            invokespecial org.apache.cassandra.utils.IntervalTree$TreeIterator.<init>:(Lorg/apache/cassandra/utils/IntervalTree;Lorg/apache/cassandra/utils/IntervalTree$IntervalNode;)V
            areturn
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;
    Signature: ()Ljava/util/Iterator<TI;>;

  public java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.cassandra.utils.IntervalTree this
         0: .line 125
            new java.lang.StringBuilder
            dup
            ldc "<"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ", "
            invokestatic com.google.common.base.Joiner.on:(Ljava/lang/String;)Lcom/google/common/base/Joiner;
            aload 0 /* this */
            invokevirtual com.google.common.base.Joiner.join:(Ljava/lang/Iterable;)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc ">"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;

  public boolean equals(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.apache.cassandra.utils.IntervalTree this
        start local 1 // java.lang.Object o
         0: .line 131
            aload 1 /* o */
            instanceof org.apache.cassandra.utils.IntervalTree
            ifne 2
         1: .line 132
            iconst_0
            ireturn
         2: .line 133
      StackMap locals:
      StackMap stack:
            aload 1 /* o */
            checkcast org.apache.cassandra.utils.IntervalTree
            astore 2 /* that */
        start local 2 // org.apache.cassandra.utils.IntervalTree that
         3: .line 134
            aload 0 /* this */
            invokevirtual org.apache.cassandra.utils.IntervalTree.iterator:()Ljava/util/Iterator;
            aload 2 /* that */
            invokevirtual org.apache.cassandra.utils.IntervalTree.iterator:()Ljava/util/Iterator;
            invokestatic com.google.common.collect.Iterators.elementsEqual:(Ljava/util/Iterator;Ljava/util/Iterator;)Z
            ireturn
        end local 2 // org.apache.cassandra.utils.IntervalTree that
        end local 1 // java.lang.Object o
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;
            0    4     1     o  Ljava/lang/Object;
            3    4     2  that  Lorg/apache/cassandra/utils/IntervalTree;
    MethodParameters:
      Name  Flags
      o     

  public final int hashCode();
    descriptor: ()I
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // org.apache.cassandra.utils.IntervalTree this
         0: .line 140
            iconst_0
            istore 1 /* result */
        start local 1 // int result
         1: .line 141
            aload 0 /* this */
            invokevirtual org.apache.cassandra.utils.IntervalTree.iterator:()Ljava/util/Iterator;
            astore 3
            goto 4
      StackMap locals: org.apache.cassandra.utils.IntervalTree int top java.util.Iterator
      StackMap stack:
         2: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.cassandra.utils.Interval
            astore 2 /* interval */
        start local 2 // org.apache.cassandra.utils.Interval interval
         3: .line 142
            bipush 31
            iload 1 /* result */
            imul
            aload 2 /* interval */
            invokevirtual org.apache.cassandra.utils.Interval.hashCode:()I
            iadd
            istore 1 /* result */
        end local 2 // org.apache.cassandra.utils.Interval interval
         4: .line 141
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 143
            iload 1 /* result */
            ireturn
        end local 1 // int result
        end local 0 // org.apache.cassandra.utils.IntervalTree this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lorg/apache/cassandra/utils/IntervalTree<TC;TD;TI;>;
            1    6     1    result  I
            3    4     2  interval  Lorg/apache/cassandra/utils/Interval<TC;TD;>;
}
Signature: <C::Ljava/lang/Comparable<-TC;>;D:Ljava/lang/Object;I:Lorg/apache/cassandra/utils/Interval<TC;TD;>;>Ljava/lang/Object;Ljava/lang/Iterable<TI;>;
SourceFile: "IntervalTree.java"
NestMembers:
  org.apache.cassandra.utils.IntervalTree$IntervalNode  org.apache.cassandra.utils.IntervalTree$Serializer  org.apache.cassandra.utils.IntervalTree$TreeIterator
InnerClasses:
  private IntervalNode = org.apache.cassandra.utils.IntervalTree$IntervalNode of org.apache.cassandra.utils.IntervalTree
  public Serializer = org.apache.cassandra.utils.IntervalTree$Serializer of org.apache.cassandra.utils.IntervalTree
  private TreeIterator = org.apache.cassandra.utils.IntervalTree$TreeIterator of org.apache.cassandra.utils.IntervalTree