class java.math.BitSieve
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: java.math.BitSieve
  super_class: java.lang.Object
{
  private long[] bits;
    descriptor: [J
    flags: (0x0002) ACC_PRIVATE

  private int length;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private static java.math.BitSieve smallSieve;
    descriptor: Ljava/math/BitSieve;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 62
            new java.math.BitSieve
            dup
            invokespecial java.math.BitSieve.<init>:()V
            putstatic java.math.BitSieve.smallSieve:Ljava/math/BitSieve;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // java.math.BitSieve this
         0: .line 75
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 76
            aload 0 /* this */
            sipush 9600
            putfield java.math.BitSieve.length:I
         2: .line 77
            aload 0 /* this */
            aload 0 /* this */
            getfield java.math.BitSieve.length:I
            iconst_1
            isub
            invokestatic java.math.BitSieve.unitIndex:(I)I
            iconst_1
            iadd
            newarray 11
            putfield java.math.BitSieve.bits:[J
         3: .line 80
            aload 0 /* this */
            iconst_0
            invokevirtual java.math.BitSieve.set:(I)V
         4: .line 81
            iconst_1
            istore 1 /* nextIndex */
        start local 1 // int nextIndex
         5: .line 82
            iconst_3
            istore 2 /* nextPrime */
        start local 2 // int nextPrime
         6: .line 86
      StackMap locals: java.math.BitSieve int int
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield java.math.BitSieve.length:I
            iload 1 /* nextIndex */
            iload 2 /* nextPrime */
            iadd
            iload 2 /* nextPrime */
            invokevirtual java.math.BitSieve.sieveSingle:(III)V
         7: .line 87
            aload 0 /* this */
            aload 0 /* this */
            getfield java.math.BitSieve.length:I
            iload 1 /* nextIndex */
            iconst_1
            iadd
            invokevirtual java.math.BitSieve.sieveSearch:(II)I
            istore 1 /* nextIndex */
         8: .line 88
            iconst_2
            iload 1 /* nextIndex */
            imul
            iconst_1
            iadd
            istore 2 /* nextPrime */
         9: .line 89
            iload 1 /* nextIndex */
            ifle 11
            iload 2 /* nextPrime */
            aload 0 /* this */
            getfield java.math.BitSieve.length:I
        10: .line 85
            if_icmplt 6
        11: .line 90
      StackMap locals:
      StackMap stack:
            return
        end local 2 // int nextPrime
        end local 1 // int nextIndex
        end local 0 // java.math.BitSieve this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   12     0       this  Ljava/math/BitSieve;
            5   12     1  nextIndex  I
            6   12     2  nextPrime  I

  void <init>(java.math.BigInteger, int);
    descriptor: (Ljava/math/BigInteger;I)V
    flags: (0x0000) 
    Code:
      stack=4, locals=8, args_size=3
        start local 0 // java.math.BitSieve this
        start local 1 // java.math.BigInteger base
        start local 2 // int searchLen
         0: .line 97
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 105
            aload 0 /* this */
            iload 2 /* searchLen */
            iconst_1
            isub
            invokestatic java.math.BitSieve.unitIndex:(I)I
            iconst_1
            iadd
            newarray 11
            putfield java.math.BitSieve.bits:[J
         2: .line 106
            aload 0 /* this */
            iload 2 /* searchLen */
            putfield java.math.BitSieve.length:I
         3: .line 107
            iconst_0
            istore 3 /* start */
        start local 3 // int start
         4: .line 109
            getstatic java.math.BitSieve.smallSieve:Ljava/math/BitSieve;
            getstatic java.math.BitSieve.smallSieve:Ljava/math/BitSieve;
            getfield java.math.BitSieve.length:I
            iload 3 /* start */
            invokevirtual java.math.BitSieve.sieveSearch:(II)I
            istore 4 /* step */
        start local 4 // int step
         5: .line 110
            iload 4 /* step */
            iconst_2
            imul
            iconst_1
            iadd
            istore 5 /* convertedStep */
        start local 5 // int convertedStep
         6: .line 113
            new java.math.MutableBigInteger
            dup
            aload 1 /* base */
            invokespecial java.math.MutableBigInteger.<init>:(Ljava/math/BigInteger;)V
            astore 6 /* b */
        start local 6 // java.math.MutableBigInteger b
         7: .line 114
            new java.math.MutableBigInteger
            dup
            invokespecial java.math.MutableBigInteger.<init>:()V
            astore 7 /* q */
        start local 7 // java.math.MutableBigInteger q
         8: .line 117
      StackMap locals: java.math.BitSieve java.math.BigInteger int int int int java.math.MutableBigInteger java.math.MutableBigInteger
      StackMap stack:
            aload 6 /* b */
            iload 5 /* convertedStep */
            aload 7 /* q */
            invokevirtual java.math.MutableBigInteger.divideOneWord:(ILjava/math/MutableBigInteger;)I
            istore 3 /* start */
         9: .line 120
            iload 5 /* convertedStep */
            iload 3 /* start */
            isub
            istore 3 /* start */
        10: .line 121
            iload 3 /* start */
            iconst_2
            irem
            ifne 12
        11: .line 122
            iload 3 /* start */
            iload 5 /* convertedStep */
            iadd
            istore 3 /* start */
        12: .line 123
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 2 /* searchLen */
            iload 3 /* start */
            iconst_1
            isub
            iconst_2
            idiv
            iload 5 /* convertedStep */
            invokevirtual java.math.BitSieve.sieveSingle:(III)V
        13: .line 126
            getstatic java.math.BitSieve.smallSieve:Ljava/math/BitSieve;
            getstatic java.math.BitSieve.smallSieve:Ljava/math/BitSieve;
            getfield java.math.BitSieve.length:I
            iload 4 /* step */
            iconst_1
            iadd
            invokevirtual java.math.BitSieve.sieveSearch:(II)I
            istore 4 /* step */
        14: .line 127
            iload 4 /* step */
            iconst_2
            imul
            iconst_1
            iadd
            istore 5 /* convertedStep */
        15: .line 128
            iload 4 /* step */
        16: .line 115
            ifgt 8
        17: .line 129
            return
        end local 7 // java.math.MutableBigInteger q
        end local 6 // java.math.MutableBigInteger b
        end local 5 // int convertedStep
        end local 4 // int step
        end local 3 // int start
        end local 2 // int searchLen
        end local 1 // java.math.BigInteger base
        end local 0 // java.math.BitSieve this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   18     0           this  Ljava/math/BitSieve;
            0   18     1           base  Ljava/math/BigInteger;
            0   18     2      searchLen  I
            4   18     3          start  I
            5   18     4           step  I
            6   18     5  convertedStep  I
            7   18     6              b  Ljava/math/MutableBigInteger;
            8   18     7              q  Ljava/math/MutableBigInteger;
    MethodParameters:
           Name  Flags
      base       
      searchLen  

  private static int unitIndex(int);
    descriptor: (I)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // int bitIndex
         0: .line 135
            iload 0 /* bitIndex */
            bipush 6
            iushr
            ireturn
        end local 0 // int bitIndex
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  bitIndex  I
    MethodParameters:
          Name  Flags
      bitIndex  

  private static long bit(int);
    descriptor: (I)J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // int bitIndex
         0: .line 142
            lconst_1
            iload 0 /* bitIndex */
            bipush 63
            iand
            lshl
            lreturn
        end local 0 // int bitIndex
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0  bitIndex  I
    MethodParameters:
          Name  Flags
      bitIndex  

  private boolean get(int);
    descriptor: (I)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // java.math.BitSieve this
        start local 1 // int bitIndex
         0: .line 149
            iload 1 /* bitIndex */
            invokestatic java.math.BitSieve.unitIndex:(I)I
            istore 2 /* unitIndex */
        start local 2 // int unitIndex
         1: .line 150
            aload 0 /* this */
            getfield java.math.BitSieve.bits:[J
            iload 2 /* unitIndex */
            laload
            iload 1 /* bitIndex */
            invokestatic java.math.BitSieve.bit:(I)J
            land
            lconst_0
            lcmp
            ifeq 2
            iconst_1
            ireturn
      StackMap locals: int
      StackMap stack:
         2: iconst_0
            ireturn
        end local 2 // int unitIndex
        end local 1 // int bitIndex
        end local 0 // java.math.BitSieve this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0       this  Ljava/math/BitSieve;
            0    3     1   bitIndex  I
            1    3     2  unitIndex  I
    MethodParameters:
          Name  Flags
      bitIndex  

  private void set(int);
    descriptor: (I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // java.math.BitSieve this
        start local 1 // int bitIndex
         0: .line 157
            iload 1 /* bitIndex */
            invokestatic java.math.BitSieve.unitIndex:(I)I
            istore 2 /* unitIndex */
        start local 2 // int unitIndex
         1: .line 158
            aload 0 /* this */
            getfield java.math.BitSieve.bits:[J
            iload 2 /* unitIndex */
            dup2
            laload
            iload 1 /* bitIndex */
            invokestatic java.math.BitSieve.bit:(I)J
            lor
            lastore
         2: .line 159
            return
        end local 2 // int unitIndex
        end local 1 // int bitIndex
        end local 0 // java.math.BitSieve this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    3     0       this  Ljava/math/BitSieve;
            0    3     1   bitIndex  I
            1    3     2  unitIndex  I
    MethodParameters:
          Name  Flags
      bitIndex  

  private int sieveSearch(int, int);
    descriptor: (II)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // java.math.BitSieve this
        start local 1 // int limit
        start local 2 // int start
         0: .line 167
            iload 2 /* start */
            iload 1 /* limit */
            if_icmplt 2
         1: .line 168
            iconst_m1
            ireturn
         2: .line 170
      StackMap locals:
      StackMap stack:
            iload 2 /* start */
            istore 3 /* index */
        start local 3 // int index
         3: .line 172
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            iload 3 /* index */
            invokevirtual java.math.BitSieve.get:(I)Z
            ifne 5
         4: .line 173
            iload 3 /* index */
            ireturn
         5: .line 174
      StackMap locals:
      StackMap stack:
            iinc 3 /* index */ 1
         6: .line 175
            iload 3 /* index */
            iload 1 /* limit */
            iconst_1
            isub
         7: .line 171
            if_icmplt 3
         8: .line 176
            iconst_m1
            ireturn
        end local 3 // int index
        end local 2 // int start
        end local 1 // int limit
        end local 0 // java.math.BitSieve this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    9     0   this  Ljava/math/BitSieve;
            0    9     1  limit  I
            0    9     2  start  I
            3    9     3  index  I
    MethodParameters:
       Name  Flags
      limit  
      start  

  private void sieveSingle(int, int, int);
    descriptor: (III)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // java.math.BitSieve this
        start local 1 // int limit
        start local 2 // int start
        start local 3 // int step
         0: .line 185
            goto 3
         1: .line 186
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 2 /* start */
            invokevirtual java.math.BitSieve.set:(I)V
         2: .line 187
            iload 2 /* start */
            iload 3 /* step */
            iadd
            istore 2 /* start */
         3: .line 185
      StackMap locals:
      StackMap stack:
            iload 2 /* start */
            iload 1 /* limit */
            if_icmplt 1
         4: .line 189
            return
        end local 3 // int step
        end local 2 // int start
        end local 1 // int limit
        end local 0 // java.math.BitSieve this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    5     0   this  Ljava/math/BitSieve;
            0    5     1  limit  I
            0    5     2  start  I
            0    5     3   step  I
    MethodParameters:
       Name  Flags
      limit  
      start  
      step   

  java.math.BigInteger retrieve(java.math.BigInteger, int, java.util.Random);
    descriptor: (Ljava/math/BigInteger;ILjava/util/Random;)Ljava/math/BigInteger;
    flags: (0x0000) 
    Code:
      stack=4, locals=10, args_size=4
        start local 0 // java.math.BitSieve this
        start local 1 // java.math.BigInteger initValue
        start local 2 // int certainty
        start local 3 // java.util.Random random
         0: .line 196
            iconst_1
            istore 4 /* offset */
        start local 4 // int offset
         1: .line 197
            iconst_0
            istore 5 /* i */
        start local 5 // int i
         2: goto 17
         3: .line 198
      StackMap locals: int int
      StackMap stack:
            aload 0 /* this */
            getfield java.math.BitSieve.bits:[J
            iload 5 /* i */
            laload
            ldc -1
            lxor
            lstore 6 /* nextLong */
        start local 6 // long nextLong
         4: .line 199
            iconst_0
            istore 8 /* j */
        start local 8 // int j
         5: goto 15
         6: .line 200
      StackMap locals: long int
      StackMap stack:
            lload 6 /* nextLong */
            lconst_1
            land
            lconst_1
            lcmp
            ifne 12
         7: .line 201
            aload 1 /* initValue */
         8: .line 202
            iload 4 /* offset */
            i2l
            invokestatic java.math.BigInteger.valueOf:(J)Ljava/math/BigInteger;
         9: .line 201
            invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 9 /* candidate */
        start local 9 // java.math.BigInteger candidate
        10: .line 203
            aload 9 /* candidate */
            iload 2 /* certainty */
            aload 3 /* random */
            invokevirtual java.math.BigInteger.primeToCertainty:(ILjava/util/Random;)Z
            ifeq 12
        11: .line 204
            aload 9 /* candidate */
            areturn
        end local 9 // java.math.BigInteger candidate
        12: .line 206
      StackMap locals:
      StackMap stack:
            lload 6 /* nextLong */
            iconst_1
            lushr
            lstore 6 /* nextLong */
        13: .line 207
            iinc 4 /* offset */ 2
        14: .line 199
            iinc 8 /* j */ 1
      StackMap locals:
      StackMap stack:
        15: iload 8 /* j */
            bipush 64
            if_icmplt 6
        end local 8 // int j
        end local 6 // long nextLong
        16: .line 197
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        17: iload 5 /* i */
            aload 0 /* this */
            getfield java.math.BitSieve.bits:[J
            arraylength
            if_icmplt 3
        end local 5 // int i
        18: .line 210
            aconst_null
            areturn
        end local 4 // int offset
        end local 3 // java.util.Random random
        end local 2 // int certainty
        end local 1 // java.math.BigInteger initValue
        end local 0 // java.math.BitSieve this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   19     0       this  Ljava/math/BitSieve;
            0   19     1  initValue  Ljava/math/BigInteger;
            0   19     2  certainty  I
            0   19     3     random  Ljava/util/Random;
            1   19     4     offset  I
            2   18     5          i  I
            4   16     6   nextLong  J
            5   16     8          j  I
           10   12     9  candidate  Ljava/math/BigInteger;
    MethodParameters:
           Name  Flags
      initValue  
      certainty  
      random     
}
SourceFile: "BitSieve.java"