// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/match/radixsort_str.c
// Function: gt_radixsort_str_eqlen
void gt_radixsort_str_eqlen(GtRadixsortstringinfo *rsi,
                            GtUword *suffixes,
                            GtLcpvalues *lcpvalues,
                            GtUword subbucketleft,
                            GtUword depth,
                            GtUword sortmaxdepth,
                            GtUword width)
{
  GtUword idx, previousbucketsize,
                *bucketindex; /* overlay with sizesofbuckets */
  GtRadixsortStrBucketInfo bucket;

  gt_assert(width <= rsi->maxwidth &&
            (sortmaxdepth == 0 ||
            (depth <= sortmaxdepth && sortmaxdepth <= rsi->equallengthplus1)));

  bucket.suffixes = suffixes;
  bucket.width = width;
  bucket.depth = depth;
  bucket.lcp = depth;
  gt_assert(GT_STACK_ISEMPTY(&rsi->stack));
  GT_STACK_PUSH(&rsi->stack, bucket);

  bucketindex = rsi->sizesofbuckets;
  while (!GT_STACK_ISEMPTY(&rsi->stack))
  {
    gt_radixsort_str_bucketnum_t prevbucketnum
      = GT_RADIXSORT_STR_SPECIAL_BUCKET; /* = undefined */
    bucket = GT_STACK_POP(&rsi->stack);
    memset(rsi->sizesofbuckets, 0, rsi->bytesinsizesofbuckets);

    /* Loop A */
    for (idx = 0; idx < bucket.width; idx++)
    {
      rsi->oracle[idx] = gt_radixsort_str_get_code(rsi->twobitencoding,
                                                   bucket.suffixes[idx],
                                                   bucket.depth,
                                                   rsi->equallengthplus1,
                                                   rsi->realtotallength);
    }
    for (idx = 0; idx < bucket.width; idx++)
    {
      rsi->sizesofbuckets[rsi->oracle[idx]]++;
    }
    previousbucketsize = rsi->sizesofbuckets[0];
    bucketindex[0] = 0;
    for (idx = 1UL; idx < (GtUword) GT_RADIXSORT_STR_NOFBUCKETS; idx++)
    {
      GtUword tmp;

      tmp = bucketindex[idx-1] + previousbucketsize;
      previousbucketsize = rsi->sizesofbuckets[idx];
      bucketindex[idx] = tmp;
    }

    /* Loop B */
    gt_assert(width > 1UL);
    if (bucket.suffixes[0] > bucket.suffixes[1])
    {
      for (idx = bucket.width; idx > 0; /* Nothing */)
      {
        idx--;
        rsi->sorted[bucketindex[rsi->oracle[idx]]++] = bucket.suffixes[idx];
      }
    } else
    {
      for (idx = 0; idx < bucket.width; idx++)
      {
        rsi->sorted[bucketindex[rsi->oracle[idx]]++] = bucket.suffixes[idx];
      }
    }

    memcpy(bucket.suffixes, rsi->sorted, sizeof (*rsi->sorted) * bucket.width);

    if (bucket.depth < rsi->equallengthplus1)
    {
      gt_radixsort_str_bucketnum_t bucketnum;
      GtRadixsortStrBucketInfo subbucket;

      subbucket.suffixes = bucket.suffixes;
      subbucket.depth = bucket.depth + GT_RADIXSORT_STR_KMERSIZE;
      subbucket.lcp = bucket.lcp;
      for (bucketnum = 0;
           bucketnum < (gt_radixsort_str_bucketnum_t)
                       GT_RADIXSORT_STR_NOFBUCKETS;
           bucketnum++)
      {
        subbucket.width
          = bucketnum > 0 ? (bucketindex[bucketnum] - bucketindex[bucketnum-1])
                          : bucketindex[bucketnum];
        if (subbucket.width > 0)
        {
          GtUword offset
            = (GtUword) (subbucket.suffixes - suffixes);
          if (lcpvalues != NULL)
          {
            if (prevbucketnum != GT_RADIXSORT_STR_SPECIAL_BUCKET)
            {
              subbucket.lcp = bucket.depth +
                              gt_radixsort_str_codeslcp(rsi,prevbucketnum,
                                                        bucketnum);
            }
            if (offset > 0)
            {
              gt_lcptab_update(lcpvalues,subbucketleft,offset,
                               sortmaxdepth == 0
                                 ? subbucket.lcp
                                 : GT_MIN(subbucket.lcp,sortmaxdepth));
            }
          }
          if (GT_RADIXSORT_STR_HAS_OVERFLOW(bucketnum))
          {
            if (subbucket.width > 1UL)
            {
              gt_direct_qsort_ulong (6UL, false, subbucket.suffixes,
                                     subbucket.width);
            }
            if (lcpvalues != NULL)
            {
              GtUword j,
                            lcpvalue = bucket.depth
                                       + GT_RADIXSORT_STR_KMERSIZE
                                       - GT_RADIXSORT_STR_OVERFLOW(bucketnum);

              if (sortmaxdepth > 0 && lcpvalue > sortmaxdepth)
              {
                lcpvalue = sortmaxdepth;
              }
              for (j = 1UL; j < subbucket.width; j++)
              {
                gt_lcptab_update(lcpvalues,subbucketleft,offset+j,lcpvalue);
              }
            }
          } else
          {
            if (subbucket.width > 1UL)
            {
              if (sortmaxdepth == 0 || subbucket.depth <= sortmaxdepth)
              {
                const GtUword radixsort_str_insertion_sort_max = 31UL;

                if (subbucket.width <= radixsort_str_insertion_sort_max)
                {
                  gt_radixsort_str_insertionsort(rsi,
                                                 subbucket.suffixes,
                                                 subbucketleft + offset,
                                                 subbucket.width,
                                                 subbucket.depth,
                                                 lcpvalues,
                                                 sortmaxdepth);
                } else
                {
                  GT_STACK_PUSH(&rsi->stack, subbucket);
                }
              } else
              {
                if (lcpvalues != NULL)
                {
                  GtUword j;
                  for (j = 1UL; j < subbucket.width; j++)
                  {
                    gt_lcptab_update(lcpvalues,subbucketleft,offset+j,
                                     sortmaxdepth);
                  }
                }
              }
            }
          }
          subbucket.suffixes += subbucket.width;
          gt_assert(subbucket.suffixes <= bucket.suffixes + bucket.width);
          prevbucketnum = bucketnum;
        }
      }
      gt_assert(bucket.suffixes + bucket.width == subbucket.suffixes);
    }
  }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rcx, 0x20(%rsp)
movq %rsi, 0x48(%rsp)
movq 0xd0(%rsp), %rax
cmpq %rax, 0x20(%rdi)
jb 0x3213ad
movq %r9, %r15
movq %r8, %r14
movq %rdx, %rbx
movq %rdi, %r13
testq %r9, %r9
je 0x32095a
cmpq %r15, %r14
ja 0x3213ad
cmpq %r15, 0x10(%r13)
jb 0x3213ad
cmpq $0x0, 0x58(%r13)
jne 0x3213b2
cmpq $0x0, 0x48(%r13)
movq %rbx, 0x28(%rsp)
je 0x320978
xorl %eax, %eax
jmp 0x320a1c
movq 0x68(%r13), %rsi
shlq $0x5, %rsi
cmpq $0x0, 0x60(%r13)
je 0x320990
movq 0x8070(%r13), %rdi
jmp 0x320992
xorl %edi, %edi
leaq 0xc3bc1(%rip), %rdx     # 0x3e455a
movl $0x175, %ecx            # imm = 0x175
callq 0x104461
movq %rax, 0x8070(%r13)
movq 0x48(%r13), %rdx
cmpq 0x60(%r13), %rdx
jne 0x3209c4
leaq 0x70(%r13), %rsi
shlq $0x5, %rdx
movq %rax, %rdi
callq 0x17660
movq %r15, %r12
cmpq $0x0, 0x8078(%r13)
movq 0x68(%r13), %rax
je 0x320a0c
testq %rax, %rax
je 0x320a0a
xorl %ebx, %ebx
xorl %r15d, %r15d
movq 0x48(%r13), %rdi
shlq $0x5, %rdi
addq 0x8070(%r13), %rdi
addq %rbx, %rdi
callq *0x8078(%r13)
incq %r15
movq 0x68(%r13), %rax
addq $0x20, %rbx
cmpq %rax, %r15
jb 0x3209df
jmp 0x320a0c
xorl %eax, %eax
addq %rax, 0x48(%r13)
movq 0x58(%r13), %rax
movq %r12, %r15
movq 0x28(%rsp), %rbx
movq 0x8070(%r13), %rcx
leaq 0x1(%rax), %rdx
movq %rdx, 0x58(%r13)
shlq $0x5, %rax
movq 0x48(%rsp), %rdx
movq %rdx, (%rcx,%rax)
movq 0xd0(%rsp), %rdx
movq %rdx, 0x8(%rcx,%rax)
movq %r14, 0x10(%rcx,%rax)
movq %r14, 0x18(%rcx,%rax)
movq 0x58(%r13), %rax
cmpq %rax, 0x50(%r13)
jae 0x320a5d
movq %rax, 0x50(%r13)
testq %rax, %rax
je 0x321350
movq 0x28(%r13), %r12
leaq 0x70(%r13), %rcx
movq %rcx, 0x88(%rsp)
movq 0x20(%rsp), %rcx
incq %rcx
movq %rcx, 0x58(%rsp)
movq %r12, 0x68(%rsp)
movq 0x8070(%r13), %rcx
decq %rax
movq %rax, 0x58(%r13)
shlq $0x5, %rax
movq (%rcx,%rax), %rbp
movq 0x8(%rcx,%rax), %r14
movq 0x10(%rcx,%rax), %rdx
movq %rdx, 0x38(%rsp)
movq 0x18(%rcx,%rax), %rax
movq %rax, 0x40(%rsp)
movq 0x8(%r13), %rdx
movq 0x28(%r13), %rdi
xorl %esi, %esi
callq 0x173a0
testq %r14, %r14
je 0x320b27
xorl %ebx, %ebx
movq %r14, %r12
movq 0x38(%rsp), %r14
movq (%rbp,%rbx,8), %rsi
movq (%r13), %rdi
movq 0x10(%r13), %rcx
movq 0x18(%r13), %r8
movq %r14, %rdx
callq 0x3213b7
movq 0x38(%r13), %rcx
movw %ax, (%rcx,%rbx,2)
incq %rbx
cmpq %rbx, %r12
jne 0x320ad5
movq 0x28(%r13), %rax
movq 0x38(%r13), %rcx
xorl %edx, %edx
movq %r12, %r14
movzwl (%rcx,%rdx,2), %esi
incq (%rax,%rsi,8)
incq %rdx
cmpq %rdx, %r14
jne 0x320b0b
movq 0x28(%rsp), %rbx
movq 0x68(%rsp), %r12
jmp 0x320b2b
movq 0x28(%r13), %rax
movq (%rax), %rcx
movq $0x0, (%r12)
movl $0x1, %edx
xorl %esi, %esi
addq %rcx, %rsi
movq (%rax,%rdx,8), %rcx
movq %rsi, (%r12,%rdx,8)
incq %rdx
cmpq $0x401, %rdx            # imm = 0x401
jne 0x320b3d
cmpq $0x1, 0xd0(%rsp)
jbe 0x3213a3
movq (%rbp), %rax
movq 0x30(%r13), %rsi
cmpq 0x8(%rbp), %rax
jbe 0x320ba5
testq %r14, %r14
je 0x320bd1
movq 0x38(%r13), %rax
movq %r14, %rcx
movq -0x8(%rbp,%rcx,8), %rdx
movzwl -0x2(%rax,%rcx,2), %edi
leaq -0x1(%rcx), %r8
movq (%r12,%rdi,8), %rcx
leaq 0x1(%rcx), %r9
movq %r9, (%r12,%rdi,8)
movq %rdx, (%rsi,%rcx,8)
movq %r8, %rcx
testq %r8, %r8
jne 0x320b7d
jmp 0x320bd1
testq %r14, %r14
je 0x320bd1
movq 0x38(%r13), %rax
xorl %ecx, %ecx
movq (%rbp,%rcx,8), %rdx
movzwl (%rax,%rcx,2), %edi
movq (%r12,%rdi,8), %r8
leaq 0x1(%r8), %r9
movq %r9, (%r12,%rdi,8)
movq %rdx, (%rsi,%r8,8)
incq %rcx
cmpq %rcx, %r14
jne 0x320bb0
leaq (,%r14,8), %rdx
movq %rbp, %rdi
callq 0x17660
movq 0x38(%rsp), %rax
cmpq 0x10(%r13), %rax
jae 0x321343
testq %r15, %r15
movq %rax, %rcx
setne %al
addq $0x4, %rcx
movq %rcx, 0x50(%rsp)
cmpq %r15, %rcx
seta %cl
andb %al, %cl
movb %cl, 0xf(%rsp)
leaq (,%r14,8), %rax
addq %rbp, %rax
movq %rax, 0x60(%rsp)
movw $0x400, %ax             # imm = 0x400
xorl %esi, %esi
testq %rsi, %rsi
je 0x320c41
cmpq $0x401, %rsi            # imm = 0x401
je 0x32133c
movq (%r12,%rsi,8), %r14
subq -0x8(%r12,%rsi,8), %r14
jmp 0x320c45
movq (%r12), %r14
testq %r14, %r14
je 0x321334
movq %rbp, %rcx
subq 0x48(%rsp), %rcx
sarq $0x3, %rcx
movq %rcx, 0x10(%rsp)
testq %rbx, %rbx
je 0x320d57
movzwl %ax, %ecx
cmpl $0x400, %ecx            # imm = 0x400
movq 0x40(%rsp), %rcx
je 0x320cb9
cmpq $0x400, %rsi            # imm = 0x400
jne 0x320c85
xorl %ecx, %ecx
jmp 0x320cb4
movq 0x40(%r13), %rcx
movl %eax, %edx
xorl %esi, %edx
movzwl %dx, %edx
shrl $0x2, %edx
movzbl (%rcx,%rdx), %ecx
andl $0x3, %eax
movl %esi, %edx
andl $0x3, %edx
cmpw %dx, %ax
cmoval %eax, %edx
movl $0x4, %eax
subl %edx, %eax
cmpl %eax, %ecx
cmovbl %ecx, %eax
movq %rax, %rcx
addq 0x38(%rsp), %rcx
cmpq 0x48(%rsp), %rbp
movq %rcx, 0x40(%rsp)
je 0x320d57
cmpq %r15, %rcx
movq %r15, %rax
cmovbq %rcx, %rax
testq %r15, %r15
cmoveq %rcx, %rax
movq 0x8(%rbx), %rdx
testq %rdx, %rdx
je 0x321399
movq 0x20(%rsp), %rcx
movq 0x10(%rsp), %rdi
addq %rdi, %rcx
addq 0x20(%rbx), %rcx
cmpq 0x10(%rbx), %rcx
jae 0x321399
movq %rsi, %r8
movq (%rbx), %rsi
testq %rsi, %rsi
je 0x320d22
movabsq $-0x8000000000000000, %rdi # imm = 0x8000000000000000
shrq %cl, %rdi
shrq $0x6, %rcx
orq %rdi, (%rsi,%rcx,8)
movq %rax, %rcx
shrq $0x20, %rcx
jne 0x32139e
movq %r8, %rsi
movq 0x20(%rbx), %rcx
leaq (%rdx,%rcx,4), %rcx
movq 0x20(%rsp), %rdx
leaq (%rcx,%rdx,4), %rcx
movq 0x10(%rsp), %rdx
movl %eax, (%rcx,%rdx,4)
cmpq $0xff, %rax
jb 0x320d57
incq 0x18(%rbx)
testb $0x3, %sil
sete %al
movq %rsi, 0x70(%rsp)
cmpq $0x400, %rsi            # imm = 0x400
setne %cl
testb %al, %cl
jne 0x320e4e
cmpq $0x1, %r14
je 0x321321
movl $0x6, %edi
xorl %esi, %esi
movq %rbp, %rdx
movq %r14, %rcx
callq 0x10bff4
testq %rbx, %rbx
je 0x321321
movq 0x70(%rsp), %rcx
movl %ecx, %eax
andl $0x3, %eax
cmpq $0x400, %rcx            # imm = 0x400
movl $0x4, %ecx
cmoveq %rcx, %rax
movq 0x50(%rsp), %rcx
subq %rax, %rcx
cmpq %r15, %rcx
movq %r15, %rax
cmovbq %rcx, %rax
testq %r15, %r15
cmoveq %rcx, %rax
movq 0x8(%rbx), %rdx
testq %rdx, %rdx
je 0x321380
movq 0x20(%rbx), %rcx
leaq -0x1(%r14), %rsi
movq 0x10(%rsp), %rdi
addq 0x58(%rsp), %rdi
addq %rdi, %rcx
cmpq 0x10(%rbx), %rcx
jae 0x321380
movq %rdi, %r9
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x320e19
movabsq $-0x8000000000000000, %r8 # imm = 0x8000000000000000
shrq %cl, %r8
shrq $0x6, %rcx
orq %r8, (%rdi,%rcx,8)
movq %rax, %rcx
shrq $0x20, %rcx
jne 0x321385
movq 0x20(%rbx), %rcx
leaq (%rdx,%rcx,4), %rdi
movl %eax, (%rdi,%r9,4)
cmpq $0xff, %rax
jb 0x320e3e
incq 0x18(%rbx)
movq %r9, %rdi
incq %rdi
decq %rsi
jne 0x320dec
jmp 0x321321
cmpq $0x1, %r14
je 0x321321
cmpb $0x0, 0xf(%rsp)
je 0x320eee
testq %rbx, %rbx
je 0x321321
movq 0x8(%rbx), %rax
testq %rax, %rax
je 0x32138a
movq 0x20(%rbx), %rcx
leaq -0x1(%r14), %rdx
movq 0x10(%rsp), %rsi
addq 0x58(%rsp), %rsi
addq %rsi, %rcx
cmpq 0x10(%rbx), %rcx
jae 0x32138a
movq %rsi, %r8
movq (%rbx), %rsi
testq %rsi, %rsi
je 0x320eb8
movabsq $-0x8000000000000000, %rdi # imm = 0x8000000000000000
shrq %cl, %rdi
shrq $0x6, %rcx
orq %rdi, (%rsi,%rcx,8)
movq %r15, %rcx
shrq $0x20, %rcx
jne 0x32138f
movq 0x20(%rbx), %rcx
leaq (%rax,%rcx,4), %rsi
movl %r15d, (%rsi,%r8,4)
cmpq $0xff, %r15
jb 0x320ede
incq 0x18(%rbx)
movq %r8, %rsi
incq %rsi
decq %rdx
jne 0x320e8b
jmp 0x321321
cmpq $0x1f, %r14
ja 0x32122a
movq 0x10(%rsp), %rax
addq 0x20(%rsp), %rax
movl $0x1, %ecx
movq %rbp, 0x90(%rsp)
movq %rax, 0x10(%rsp)
movq %rcx, 0x78(%rsp)
movq -0x8(%rbp,%rcx,8), %rax
movq %rcx, 0x18(%rsp)
movq (%rbp,%rcx,8), %rcx
xorl %esi, %esi
movq %rax, 0x30(%rsp)
movq %rcx, 0x80(%rsp)
cmpq %rcx, %rax
movl $0x0, %ebx
sbbl %ebx, %ebx
orl $0x1, %ebx
movq 0x50(%rsp), %rbp
testq %r15, %r15
je 0x320f57
cmpq %r15, %rbp
ja 0x32103e
testl %esi, %esi
jne 0x32103e
movq %r14, %r12
movq %r15, %r14
movq (%r13), %rdi
movq 0x10(%r13), %rcx
movq 0x18(%r13), %r8
movq 0x30(%rsp), %rsi
movq %rbp, %rdx
callq 0x3213b7
movl %eax, %r15d
movq (%r13), %rdi
movq 0x10(%r13), %rcx
movq 0x18(%r13), %r8
movq 0x80(%rsp), %rsi
movq %rbp, %rdx
callq 0x3213b7
movzwl %r15w, %ecx
xorl %edx, %edx
cmpl $0x400, %ecx            # imm = 0x400
je 0x320fe6
movzwl %ax, %esi
cmpl $0x400, %esi            # imm = 0x400
je 0x320fe6
movq 0x40(%r13), %rdx
movl %eax, %esi
xorl %r15d, %esi
movzwl %si, %esi
shrl $0x2, %esi
movzbl (%rdx,%rsi), %esi
movl %r15d, %edx
andl $0x3, %edx
movl %eax, %edi
andl $0x3, %edi
cmpw %di, %dx
cmoval %edx, %edi
movl $0x4, %edx
subl %edi, %edx
cmpl %edx, %esi
cmovbl %esi, %edx
movzwl %dx, %esi
addq %rsi, %rbp
cmpw %ax, %r15w
jne 0x32101f
testb $0x3, %r15b
setne %al
cmpl $0x400, %ecx            # imm = 0x400
sete %cl
orb %al, %cl
movl %ebx, %esi
movq %r14, %r15
jne 0x32102c
xorl %esi, %esi
cmpw $0x4, %dx
movq %r12, %r14
je 0x320f49
jmp 0x321362
movl $0x0, %esi
sbbl %esi, %esi
orl $0x1, %esi
movq %r14, %r15
cmpw $0x4, %dx
movq %r12, %r14
jb 0x320f49
jmp 0x321362
movq 0x28(%rsp), %rbx
testq %rbx, %rbx
je 0x3211de
movq 0x8(%rbx), %rdi
movq 0x18(%rsp), %rax
cmpq 0x78(%rsp), %rax
jae 0x3210ff
testl %esi, %esi
jle 0x3210ff
testq %rdi, %rdi
movq 0x18(%rsp), %rdx
je 0x32136c
movq 0x10(%rbx), %r9
movq 0x20(%rbx), %r8
movq 0x10(%rsp), %rax
addq %rdx, %rax
leaq (%rax,%r8), %rcx
cmpq %r9, %rcx
jae 0x32136c
incq %rdx
movq (%rbx), %r10
testq %r10, %r10
je 0x32112c
movabsq $-0x8000000000000000, %r11 # imm = 0x8000000000000000
shrq %cl, %r11
shrq $0x6, %rcx
testq %r11, (%r10,%rcx,8)
je 0x32137b
movq 0x10(%rsp), %r11
addq %r11, %rdx
addq %r8, %rdx
cmpq %r9, %rdx
jae 0x321376
leaq (%rdi,%r8,4), %rcx
leaq (%rcx,%r11,4), %rcx
movq 0x18(%rsp), %r12
movl (%rcx,%r12,4), %r9d
movabsq $-0x8000000000000000, %r8 # imm = 0x8000000000000000
movl %edx, %ecx
shrq %cl, %r8
shrq $0x6, %rdx
orq %r8, (%r10,%rdx,8)
movq 0x20(%rbx), %r8
jmp 0x321154
testq %rdi, %rdi
je 0x321367
cmpq %r15, %rbp
movq %r15, %rdx
cmovbq %rbp, %rdx
testq %r15, %r15
cmoveq %rbp, %rdx
movq 0x20(%rbx), %r8
movq 0x10(%rsp), %rax
movq 0x18(%rsp), %rcx
addq %rcx, %rax
jmp 0x32117f
movq 0x10(%rsp), %r10
addq %r10, %rdx
addq %r8, %rdx
cmpq %r9, %rdx
jae 0x321376
leaq (%rdi,%r8,4), %rcx
leaq (%rcx,%r10,4), %rcx
movq 0x18(%rsp), %r12
movl (%rcx,%r12,4), %r9d
movq %r10, %r11
leaq (%rdi,%r8,4), %rcx
leaq (%rcx,%r11,4), %rcx
movl %r9d, 0x4(%rcx,%r12,4)
cmpl $0xff, %r9d
jb 0x32116e
incq 0x18(%rbx)
cmpq %r15, %rbp
movq %r15, %rdx
cmovbq %rbp, %rdx
testq %r15, %r15
cmoveq %rbp, %rdx
addq %r8, %rax
cmpq 0x10(%rbx), %rax
jae 0x321367
movq (%rbx), %r8
testq %r8, %r8
je 0x3211ab
movabsq $-0x8000000000000000, %r9 # imm = 0x8000000000000000
movl %eax, %ecx
shrq %cl, %r9
shrq $0x6, %rax
orq %r9, (%r8,%rax,8)
movq %rdx, %rax
shrq $0x20, %rax
jne 0x321371
movq 0x20(%rbx), %rax
leaq (%rdi,%rax,4), %rax
movq 0x10(%rsp), %rcx
leaq (%rax,%rcx,4), %rax
movq 0x18(%rsp), %rcx
movl %edx, (%rax,%rcx,4)
cmpq $0xff, %rdx
jb 0x3211de
incq 0x18(%rbx)
testl %esi, %esi
movq 0x90(%rsp), %rbp
movq 0x18(%rsp), %rcx
js 0x32120f
movq 0x80(%rsp), %rax
movq %rax, -0x8(%rbp,%rcx,8)
movq 0x30(%rsp), %rax
movq %rax, (%rbp,%rcx,8)
decq %rcx
jne 0x320f19
movq 0x78(%rsp), %rcx
incq %rcx
cmpq %r14, %rcx
movq 0x68(%rsp), %r12
jne 0x320f14
jmp 0x321321
movq 0x58(%r13), %rsi
cmpq 0x48(%r13), %rsi
jne 0x3212e3
cmpq 0x60(%r13), %rsi
jne 0x321242
xorl %edi, %edi
jmp 0x321249
movq 0x8070(%r13), %rdi
movq %r14, 0x30(%rsp)
addq 0x68(%r13), %rsi
shlq $0x5, %rsi
leaq 0xc32fd(%rip), %rdx     # 0x3e455a
movl $0x1f8, %ecx            # imm = 0x1F8
callq 0x104461
movq %rax, 0x8070(%r13)
movq 0x48(%r13), %rdx
cmpq 0x60(%r13), %rdx
jne 0x32128c
shlq $0x5, %rdx
movq %rax, %rdi
movq 0x88(%rsp), %rsi
callq 0x17660
cmpq $0x0, 0x8078(%r13)
movq 0x68(%r13), %rax
je 0x3212d1
testq %rax, %rax
je 0x3212cf
xorl %ebx, %ebx
xorl %r14d, %r14d
movq 0x48(%r13), %rdi
shlq $0x5, %rdi
addq 0x8070(%r13), %rdi
addq %rbx, %rdi
callq *0x8078(%r13)
incq %r14
movq 0x68(%r13), %rax
addq $0x20, %rbx
cmpq %rax, %r14
jb 0x3212a4
jmp 0x3212d1
xorl %eax, %eax
addq %rax, 0x48(%r13)
movq 0x58(%r13), %rsi
movq 0x28(%rsp), %rbx
movq 0x30(%rsp), %r14
movq 0x8070(%r13), %rax
leaq 0x1(%rsi), %rcx
movq %rcx, 0x58(%r13)
shlq $0x5, %rsi
movq %rbp, (%rax,%rsi)
movq %r14, 0x8(%rax,%rsi)
movq 0x50(%rsp), %rcx
movq %rcx, 0x10(%rax,%rsi)
movq 0x40(%rsp), %rcx
movq %rcx, 0x18(%rax,%rsi)
movq 0x58(%r13), %rax
cmpq %rax, 0x50(%r13)
jae 0x321321
movq %rax, 0x50(%r13)
leaq (%rbp,%r14,8), %rbp
movq 0x70(%rsp), %rsi
movl %esi, %eax
cmpq 0x60(%rsp), %rbp
ja 0x321394
incq %rsi
jmp 0x320c24
cmpq %rbp, 0x60(%rsp)
jne 0x3213a8
movq 0x58(%r13), %rax
testq %rax, %rax
jne 0x320a88
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x9437f
callq 0x942da
callq 0x94348
callq 0x94311
callq 0x942a3
callq 0x9426c
callq 0x9445d
callq 0x94426
callq 0x943ef
callq 0x943b8
callq 0x94494
callq 0x94235
callq 0x941fe
callq 0x9418c
callq 0x941c5
callq 0x944cd
callq 0x94153