// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/match/ft-front-prune.c
// Function: front_prune_edist_inplace
GtUword front_prune_edist_inplace(
                         bool rightextension,
                         GtAllocatedMemory *frontspace,
                         GtFtPolished_point *best_polished_point,
                         GtFrontTrace *front_trace,
                         const GtFtPolishing_info *pol_info,
                         GtTrimmingStrategy trimstrategy,
                         GtUword max_history,
                         GtUword minmatchpercentage,
                         GtUword maxalignedlendifference,
                         bool showfrontinfo,
                         GtUword seedlength,
                         GtFTsequenceResources *ufsr,
                         GtUword ustart,
                         GtUword ulen,
                         GtUword vseqstartpos,
                         GtFTsequenceResources *vfsr,
                         GtUword vstart,
                         GtUword vlen,
                         bool cam_generic,
                         GtFtTrimstat *trimstat)
{
  const GtUword sumseqlength = ulen + vlen,
                minsizeforshift = sumseqlength/1000;
  /* so the space for allocating the fronts is
     sizeof (GtFtFrontvalue) * ((m+n)/1000 + maxvalid), where maxvalid is a
     small constant. */
  GtUword distance, trimleft = 0, valid = 1UL, maxvalid = 0, sumvalid = 0;
  GtFtFrontvalue *validbasefront;
  bool diedout = false;
  GtFtSequenceObject useq, vseq;
  /* This transformation allows to compute the /100  by >> 7 */
  const GtUword minmatchpercentage128
    = (minmatchpercentage * 128)/100 +
      (((minmatchpercentage * 128) % 100 == 0) ? 0 : 1);
  const uint64_t max_history_mask
    = max_history == 64 ? (~((uint64_t) 0))
                        : ((((uint64_t) 1) << max_history) - 1);
  GtLongestCommonFunc ft_longest_common;

  ft_sequenceobject_init(&useq,
                         ufsr->extend_char_access,
                         ufsr->twobit_possible,
                         ufsr->encseq,
                         rightextension,
                         ufsr->readmode,
                         0,
                         ustart,
                         ulen,
                         ufsr->encseq_r,
                         ufsr->sequence_cache,
                         ufsr->bytesequence,
                         ufsr->totallength,
                         ufsr->full_totallength);
  ft_sequenceobject_init(&vseq,
                         vfsr->extend_char_access,
                         vfsr->twobit_possible,
                         vfsr->encseq,
                         rightextension,
                         vfsr->readmode,
                         vseqstartpos,
                         vstart,
                         vlen,
                         vfsr->encseq_r,
                         vfsr->sequence_cache,
                         vfsr->bytesequence,
                         vfsr->totallength,
                         vfsr->full_totallength);
  if (cam_generic)
  {
    ft_longest_common = ft_longest_common_all;
  } else
  {
    const bool haswildcards
      = (ufsr->haswildcards && vfsr->haswildcards) ? true : false;
    const int func_index
      = gt_sequenceobject_longest_func_index(&useq,&vseq,haswildcards);
    ft_longest_common = ft_longest_common_func_tab[func_index];
  }
  frontspace->offset = 0;
  for (distance = 0, valid = 1UL; /* Nothing */; distance++, valid += 2)
  {
    GtUword trim, maxalignedlen, minlenfrommaxdiff;

    gt_assert(valid <= GT_MULT2(distance) + 1);
    sumvalid += valid;
    if (maxvalid < valid)
    {
      maxvalid = valid;
    }
    validbasefront = frontspace_allocate(minsizeforshift,trimleft,valid,
                                         frontspace);
    if (distance == 0)
    {
      validbasefront->row = 0;
      if (seedlength >= sizeof (validbasefront->matchhistory_bits) * CHAR_BIT)
      {
        validbasefront->matchhistory_bits = ~((uint64_t) 0);
      } else
      {
        validbasefront->matchhistory_bits = (((uint64_t) 1) << seedlength) - 1;
      }
      validbasefront->matchhistory_size = GT_MIN(max_history,seedlength);
      validbasefront->backreference = 0; /* No back reference */
      validbasefront->max_mismatches = 0;
      front_prune_add_matches(ft_longest_common,validbasefront + distance,
                              validbasefront,max_history,&useq,&vseq,trimstat);
      maxalignedlen = GT_MULT2(validbasefront->row);
    } else
    {
      gt_assert(valid >= 3UL);
      frontspace_check((const GtFtFrontvalue *) frontspace->space,
                       ((const GtFtFrontvalue *) frontspace->space)
                        + frontspace->allocated - 1,
                       validbasefront + trimleft);
      frontspace_check((const GtFtFrontvalue *) frontspace->space,
                       ((const GtFtFrontvalue *) frontspace->space)
                         + frontspace->allocated - 1,
                       validbasefront + trimleft + valid - 1);
      if (valid == 3UL)
      {
        maxalignedlen = front_second_inplace(ft_longest_common,
                                             validbasefront + distance,
                                             validbasefront + trimleft,
                                             max_history,
                                             &useq,
                                             &vseq,
                                             trimstat);
      } else
      {
        maxalignedlen
          = front_next_inplace(ft_longest_common,
                               validbasefront + distance,
                               validbasefront + trimleft,
                               validbasefront + trimleft + valid - 1,
                               max_history,
                               &useq,
                               &vseq,
                               trimstat);
      }
    }
    gt_assert(valid > 0);
    minlenfrommaxdiff = maxalignedlen >= maxalignedlendifference
                          ? maxalignedlen - maxalignedlendifference
                          : 0;
    trim = trim_front(true,
                      distance,
                      ulen,
                      vlen,
                      minmatchpercentage128,
                      minlenfrommaxdiff,
                      trimstrategy,
                      best_polished_point,
                      validbasefront + distance,
                      validbasefront + trimleft,
                      validbasefront + trimleft + valid,
                      max_history_mask,
                      showfrontinfo);
    if (trim > 0)
    {
      trimleft += trim;
      gt_assert(valid >= trim);
      valid -= trim;
    }
    if (valid > 0)
    {
      trim = trim_front(false,
                        distance,
                        ulen,
                        vlen,
                        minmatchpercentage128,
                        minlenfrommaxdiff,
                        trimstrategy,
                        best_polished_point,
                        validbasefront + distance,
                        validbasefront + trimleft + valid - 1,
                        validbasefront + trimleft - 1,
                        max_history_mask,
                        showfrontinfo);
      gt_assert(trim < valid);
      if (trim > 0)
      {
        gt_assert(valid >= trim);
        valid -= trim;
      }
    }
    if (valid == 0)
    {
      diedout = true;
      break;
    }
    if (front_trace != NULL)
    {
      front_trace_add_gen(front_trace,trimleft,valid);
    }
    ft_update_trace_and_polished(best_polished_point,
                                 front_trace,
                                 pol_info,
                                 distance,
                                 trimleft,
                                 validbasefront + distance,
                                 validbasefront + trimleft,
                                 validbasefront + trimleft + valid - 1,
                                 showfrontinfo);
    if ((vlen > ulen && vlen - ulen <= distance) ||
        (vlen <= ulen && ulen - vlen <= distance))
    {
      if (distance + vlen - ulen >= trimleft &&
          distance + vlen - ulen <= trimleft + valid - 1 &&
          validbasefront[distance + vlen - ulen].row == ulen)
      {
        break;
      }
    }
    if (distance >= sumseqlength)
    {
      break;
    }
  }
  if (trimstat != NULL)
  {
    gt_ft_trimstat_add(trimstat,diedout,sumvalid,maxvalid,distance,
                       sizeof (GtFtFrontvalue) * frontspace->allocated);
  }
  return diedout ? sumseqlength + 1 : distance;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1f8, %rsp            # imm = 0x1F8
movq %r9, 0x100(%rsp)
movq %r8, 0xc0(%rsp)
movq %rcx, 0x120(%rsp)
movq %rdx, 0x128(%rsp)
movq %rsi, 0x80(%rsp)
movq 0x288(%rsp), %r13
movq 0x268(%rsp), %r10
movq 0x230(%rsp), %r8
movq 0x238(%rsp), %rcx
leaq (%r10,%r13), %rax
movq %rax, 0x78(%rsp)
shrq $0x3, %rax
movabsq $0x20c49ba5e353f7cf, %rdx # imm = 0x20C49BA5E353F7CF
mulq %rdx
movq %rdx, 0xd0(%rsp)
movabsq $-0x51eb851eb851eb80, %rsi # imm = 0xAE147AE147AE1480
imulq %rcx, %rsi
shlq $0x5, %rcx
movabsq $0x3fffffffffffffe0, %rax # imm = 0x3FFFFFFFFFFFFFE0
andq %rcx, %rax
movabsq $0x28f5c28f5c28f5c3, %rcx # imm = 0x28F5C28F5C28F5C3
mulq %rcx
shrq $0x2, %rdx
movq %rdx, 0x88(%rsp)
rorq $0x2, %rsi
movabsq $0x28f5c28f5c28f5c, %rax # imm = 0x28F5C28F5C28F5C
xorl %r14d, %r14d
cmpq %rax, %rsi
seta %r14b
movq $-0x1, %rax
movl %r8d, %ecx
shlq %cl, %rax
movl %edi, %ebx
movq $-0x1, %rcx
cmpq $0x40, %r8
notq %rax
cmoveq %rcx, %rax
movq %rax, 0xf8(%rsp)
movq 0x278(%rsp), %r15
movq 0x258(%rsp), %r12
movq 0x280(%rsp), %rbp
movl 0x34(%r12), %esi
movzbl 0x38(%r12), %edx
movl 0x30(%r12), %r9d
movq (%r12), %rcx
leaq 0x198(%rsp), %rdi
movl %ebx, %r8d
pushq 0x28(%r12)
pushq 0x20(%r12)
pushq 0x18(%r12)
pushq 0x8(%r12)
pushq 0x10(%r12)
pushq %r10
pushq 0x290(%rsp)
pushq $0x0
callq 0x31e313
addq $0x40, %rsp
movl 0x34(%r15), %esi
movzbl 0x38(%r15), %edx
movl 0x30(%r15), %r9d
movq (%r15), %rcx
leaq 0x138(%rsp), %rdi
movl %ebx, %r8d
pushq 0x28(%r15)
pushq 0x20(%r15)
pushq 0x18(%r15)
pushq 0x8(%r15)
pushq 0x10(%r15)
pushq %r13
pushq %rbp
pushq 0x2a8(%rsp)
callq 0x31e313
addq $0x40, %rsp
cmpb $0x0, 0x290(%rsp)
je 0x31d382
leaq 0x116f(%rip), %rax      # 0x31e4ef
jmp 0x31d3c0
xorl %ebp, %ebp
cmpb $0x1, 0x39(%r12)
jne 0x31d394
movzbl 0x39(%r15), %ebp
shll $0x4, %ebp
leaq 0x198(%rsp), %rdi
callq 0x31f234
movl %eax, %ebx
leaq 0x138(%rsp), %rdi
callq 0x31f234
leal (%rax,%rbx,4), %eax
orl %ebp, %eax
leaq 0x1a0354(%rip), %rcx    # 0x4bd710
movq (%rcx,%rax,8), %rax
movq %rax, 0x20(%rsp)
movq 0x298(%rsp), %r15
shrq $0x4, 0xd0(%rsp)
addq %r14, 0x88(%rsp)
movq $-0x1, %rdx
movq 0x250(%rsp), %rcx
shlq %cl, %rdx
cmpq $0x40, %rcx
notq %rdx
movq $-0x1, %rax
cmovaeq %rax, %rdx
movq %rdx, 0x108(%rsp)
movq 0x80(%rsp), %rbx
movq $0x0, 0x8(%rbx)
movq 0x230(%rsp), %rax
cmpq %rcx, %rax
cmovbq %rax, %rcx
movq %rcx, 0x110(%rsp)
movq 0x288(%rsp), %rax
movq %rax, %rdx
movq 0x268(%rsp), %rcx
subq %rcx, %rdx
movq %rdx, 0xe0(%rsp)
subq %rax, %rcx
movq %rcx, 0x118(%rsp)
movl $0x1, %r13d
movl $0x30, %eax
movq %rax, 0xd8(%rsp)
xorl %ebp, %ebp
xorl %r12d, %r12d
xorl %eax, %eax
movq $0x0, 0xc8(%rsp)
cmpq %r13, %rax
cmovbeq %r13, %rax
movq %rax, 0xe8(%rsp)
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rdx
movq %r12, %rax
subq %rcx, %rax
addq %r13, %rax
cmpq %rdx, %rax
jb 0x31d557
movq %rdx, %xmm0
movq 0x2a42a(%rip), %xmm2    # 0x3478e0
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
movapd 0x2a42e(%rip), %xmm3    # 0x3478f0
subpd %xmm3, %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
mulsd 0x2a83e(%rip), %xmm1    # 0x347d18
movq %rax, %xmm0
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
subpd %xmm3, %xmm0
movapd %xmm0, %xmm2
unpckhpd %xmm0, %xmm2            # xmm2 = xmm2[1],xmm0[1]
addsd %xmm0, %xmm2
maxsd %xmm2, %xmm1
addsd 0xc65e1(%rip), %xmm1    # 0x3e3ae0
cvttsd2si %xmm1, %rdx
movq %rdx, %rsi
sarq $0x3f, %rsi
subsd 0x2a80d(%rip), %xmm1    # 0x347d20
cvttsd2si %xmm1, %rcx
andq %rsi, %rcx
orq %rdx, %rcx
movq %rcx, 0x10(%rbx)
cmpq %rcx, %rax
jae 0x31e30e
movq (%rbx), %rdi
shlq $0x3, %rcx
leaq (%rcx,%rcx,2), %rsi
leaq 0xc65f5(%rip), %rdx     # 0x3e3b32
movl $0x237, %ecx            # imm = 0x237
callq 0x104461
movq %rax, (%rbx)
testq %rax, %rax
je 0x31e309
movq 0x8(%rbx), %rcx
movq %r12, %rax
subq %rcx, %rax
jb 0x31e2eb
movq 0xd0(%rsp), %rdx
cmpq %rdx, %r13
cmovaq %r13, %rdx
movq (%rbx), %rdi
leaq (%r12,%r12,2), %rsi
cmpq %rdx, %rax
movq %rsi, 0x130(%rsp)
jbe 0x31d5b0
leaq (%rdi,%rsi,8), %rax
negq %rcx
leaq (%rcx,%rcx,2), %rcx
leaq (%rax,%rcx,8), %rsi
leaq (,%r13,8), %rax
leaq (%rax,%rax,2), %rdx
callq 0x17660
movq %r12, 0x8(%rbx)
movq (%rbx), %rdi
movq %r12, %rcx
negq %rcx
leaq (%rcx,%rcx,2), %rax
leaq (%rdi,%rax,8), %rax
testq %rbp, %rbp
movq %rax, 0x18(%rsp)
movq %rbp, 0x28(%rsp)
movq %r13, 0x50(%rsp)
movq %r12, 0xf0(%rsp)
je 0x31d965
cmpq $0x2, %r13
jbe 0x31e2fa
movq %r13, %r14
movq 0x10(%rbx), %rax
leaq (%rax,%rax,2), %rax
leaq (%rdi,%rax,8), %rsi
addq $-0x18, %rsi
leaq (,%r12,8), %rax
leaq (%rax,%rax,2), %r15
movq 0x18(%rsp), %r13
leaq (%r15,%r13), %r12
movq %r12, %rdx
callq 0x31e55b
movq (%rbx), %rdi
movq 0x10(%rbx), %rax
leaq (%rax,%rax,2), %rax
leaq (%rdi,%rax,8), %rsi
addq $-0x18, %rsi
leaq (%r14,%r14,2), %rbx
leaq (%r12,%rbx,8), %rdx
addq $-0x18, %rdx
movq %rdx, 0x38(%rsp)
callq 0x31e55b
leaq (,%rbp,8), %rax
leaq (%rax,%rax,2), %rdi
negq %rdi
leaq (,%rbp,2), %rax
addq %rbp, %rax
leaq (,%rax,8), %rax
addq %r13, %rax
movq %rax, 0x48(%rsp)
cmpq $0x3, %r14
jne 0x31da33
movq 0x10(%r12), %rax
movq %rax, 0x40(%r12)
movupd (%r12), %xmm0
movupd %xmm0, 0x30(%r12)
movupd %xmm0, 0x18(%r12)
movq %rax, 0x28(%r12)
movl 0x8(%r12), %eax
incl %eax
movl %eax, 0x8(%r12)
movb $0x4, 0x11(%r12)
movzbl 0x10(%r12), %ecx
cmpq 0x230(%rsp), %rcx
jae 0x31d6be
incb %cl
movb %cl, 0x10(%r12)
shlq (%r12)
movl %eax, %esi
addq %r15, %rdi
sarq $0x3, %rdi
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rdi
movq %rdi, 0x30(%rsp)
leaq (%rdi,%rsi), %rcx
leaq 0x198(%rsp), %rdi
leaq 0x138(%rsp), %rdx
callq *0x20(%rsp)
movq %rax, %rcx
movl %ecx, 0xc(%r12)
testl %ecx, %ecx
movq 0x298(%rsp), %r15
movq 0x48(%rsp), %r13
je 0x31d76a
movl %ecx, %eax
movq $-0x1, %rdx
shlq %cl, %rdx
movq 0x230(%rsp), %rsi
cmpq %rsi, %rax
notq %rdx
movq $-0x1, %rax
cmovaeq %rax, %rdx
movq (%r12), %rax
shlq %cl, %rax
orq %rdx, %rax
movq %rax, (%r12)
movzbl 0x10(%r12), %eax
cmpq %rsi, %rax
jae 0x31d765
movl %ecx, %edx
addl %eax, %edx
movq 0x230(%rsp), %rax
cmpq %rax, %rdx
cmovaeq %rax, %rdx
movb %dl, 0x10(%r12)
addl %ecx, 0x8(%r12)
testq %r15, %r15
je 0x31d779
movq %r15, %rdi
movl %ecx, %esi
callq 0x1afe39
movl 0x8(%r12), %ebx
movl 0x20(%r12), %eax
incl %eax
movl %eax, 0x20(%r12)
movb $0x1, 0x29(%r12)
incl 0x2c(%r12)
movzbl 0x28(%r12), %ecx
cmpq 0x230(%rsp), %rcx
jae 0x31d7ac
incb %cl
movb %cl, 0x28(%r12)
shlq 0x18(%r12)
leaq 0x18(%r12), %r14
movl %eax, %esi
subq %r13, %r14
sarq $0x3, %r14
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %r14
leaq (%r14,%rsi), %rcx
leaq 0x198(%rsp), %rdi
leaq 0x138(%rsp), %rdx
callq *0x20(%rsp)
movq %rax, %rcx
movl %ecx, 0x24(%r12)
testl %ecx, %ecx
je 0x31d84e
movl %ecx, %eax
movq $-0x1, %rdx
shlq %cl, %rdx
movq 0x230(%rsp), %rsi
cmpq %rsi, %rax
notq %rdx
movq $-0x1, %rax
cmovaeq %rax, %rdx
movq 0x18(%r12), %rax
shlq %cl, %rax
orq %rdx, %rax
movq %rax, 0x18(%r12)
movzbl 0x28(%r12), %eax
cmpq %rsi, %rax
jae 0x31d849
movl %ecx, %edx
addl %eax, %edx
movq 0x230(%rsp), %rax
cmpq %rax, %rdx
cmovaeq %rax, %rdx
movb %dl, 0x28(%r12)
addl %ecx, 0x20(%r12)
testq %r15, %r15
je 0x31d85d
movq %r15, %rdi
movl %ecx, %esi
callq 0x1afe39
movl 0x20(%r12), %r15d
movb $0x2, 0x41(%r12)
movzbl 0x40(%r12), %eax
cmpq 0x230(%rsp), %rax
jae 0x31d87f
incb %al
movb %al, 0x40(%r12)
shlq 0x30(%r12)
leaq 0x30(%r12), %rbp
movl 0x38(%r12), %esi
subq %r13, %rbp
sarq $0x3, %rbp
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rbp
leaq (%rsi,%rbp), %rcx
leaq 0x198(%rsp), %rdi
leaq 0x138(%rsp), %rdx
callq *0x20(%rsp)
movq %rax, %rcx
movl %ecx, 0x3c(%r12)
testl %ecx, %ecx
je 0x31d924
movl %ecx, %eax
movq $-0x1, %rdx
shlq %cl, %rdx
movq 0x230(%rsp), %rsi
cmpq %rsi, %rax
notq %rdx
movq $-0x1, %rax
cmovaeq %rax, %rdx
movq 0x30(%r12), %rax
shlq %cl, %rax
orq %rdx, %rax
movq %rax, 0x30(%r12)
movzbl 0x40(%r12), %eax
cmpq %rsi, %rax
jae 0x31d91f
movl %ecx, %edx
addl %eax, %edx
movq 0x230(%rsp), %rax
cmpq %rax, %rdx
cmovaeq %rax, %rdx
movb %dl, 0x40(%r12)
addl %ecx, 0x38(%r12)
movq 0x298(%rsp), %rdi
testq %rdi, %rdi
je 0x31d938
movl %ecx, %esi
callq 0x1afe39
addl %r15d, %r15d
addq %r15, %r14
addl %ebx, %ebx
movq 0x30(%rsp), %rcx
addq %rbx, %rcx
cmpq %r14, %rcx
cmovbeq %r14, %rcx
movl 0x38(%r12), %eax
addl %eax, %eax
addq %rax, %rbp
cmpq %rbp, %rcx
cmovaq %rcx, %rbp
jmp 0x31dd10
xorl %ecx, %ecx
movl %ecx, 0x8(%rax)
movq 0x108(%rsp), %rax
movq 0x18(%rsp), %rdx
movq %rax, (%rdx)
movq 0x110(%rsp), %rax
movq 0x18(%rsp), %rdx
movb %al, 0x10(%rdx)
movq 0x18(%rsp), %rax
movb $0x0, 0x11(%rax)
movq 0x18(%rsp), %rax
movl %ecx, 0x14(%rax)
leaq 0x198(%rsp), %rdi
xorl %esi, %esi
leaq 0x138(%rsp), %rdx
xorl %ecx, %ecx
callq *0x20(%rsp)
movq %rax, %rcx
movq 0x18(%rsp), %rdi
movl %ecx, 0xc(%rdi)
testl %ecx, %ecx
je 0x31da15
movl %ecx, %eax
movq $-0x1, %rdx
shlq %cl, %rdx
movq 0x230(%rsp), %rsi
cmpq %rsi, %rax
notq %rdx
movq $-0x1, %rax
cmovaeq %rax, %rdx
movq (%rdi), %rax
shlq %cl, %rax
orq %rdx, %rax
movq %rax, (%rdi)
movzbl 0x10(%rdi), %eax
cmpq %rsi, %rax
jae 0x31da12
movl %ecx, %edx
addl %eax, %edx
movq 0x230(%rsp), %rax
cmpq %rax, %rdx
cmovaeq %rax, %rdx
movb %dl, 0x10(%rdi)
addl %ecx, 0x8(%rdi)
testq %r15, %r15
je 0x31da29
movq %r15, %rdi
movl %ecx, %esi
callq 0x1afe39
movq 0x18(%rsp), %rdi
movl 0x8(%rdi), %ebp
addl %ebp, %ebp
jmp 0x31e00e
movq %rbx, 0xa0(%rsp)
movq (%r12), %rax
movl 0x8(%r12), %ecx
movl 0xc(%r12), %edx
movl %edx, 0x14(%rsp)
movzbl 0x10(%r12), %edx
movzwl 0x12(%r12), %esi
movw %si, 0x10(%rsp)
movl 0x14(%r12), %esi
movq %rsi, 0x40(%rsp)
movq %rcx, 0x70(%rsp)
leal 0x1(%rcx), %esi
cmpq 0x230(%rsp), %rdx
movq %rdx, 0x60(%rsp)
adcb $0x0, %dl
movq %rax, 0x68(%rsp)
leaq (%rax,%rax), %rbx
movq %rbx, (%r12)
movl %esi, 0x8(%r12)
movq %rdx, 0xb8(%rsp)
movb %dl, 0x10(%r12)
movb $0x4, 0x11(%r12)
addq %r15, %rdi
sarq $0x3, %rdi
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rdi
movq %rdi, 0x30(%rsp)
leaq (%rdi,%rsi), %rcx
leaq 0x198(%rsp), %rdi
movq %rsi, 0x98(%rsp)
leaq 0x138(%rsp), %rdx
callq *0x20(%rsp)
movq %rax, %rcx
movl %ecx, 0xc(%r12)
testl %ecx, %ecx
movq %r15, %r14
movq 0x298(%rsp), %rdi
je 0x31db51
movl %ecx, %eax
movq $-0x1, %rdx
shlq %cl, %rdx
movq 0x230(%rsp), %rsi
cmpq %rsi, %rax
notq %rdx
movq $-0x1, %rax
cmovaeq %rax, %rdx
movq (%r12), %rax
shlq %cl, %rax
orq %rdx, %rax
movq %rax, (%r12)
movzbl 0x10(%r12), %eax
cmpq %rsi, %rax
jae 0x31db4c
movl %ecx, %edx
addl %eax, %edx
movq 0x230(%rsp), %rax
cmpq %rax, %rdx
cmovaeq %rax, %rdx
movb %dl, 0x10(%r12)
addl %ecx, 0x8(%r12)
testq %rdi, %rdi
je 0x31db5d
movl %ecx, %esi
callq 0x1afe39
movl 0x8(%r12), %eax
movq %rax, 0x90(%rsp)
movq 0x18(%r12), %rax
movl 0x20(%r12), %r13d
movl 0x24(%r12), %edi
movb 0x28(%r12), %r8b
movzwl 0x2a(%r12), %r9d
movl 0x2c(%r12), %r10d
leal 0x1(%r13), %edx
movq 0x98(%rsp), %rsi
cmpl %edx, %esi
movq 0x70(%rsp), %r15
movq %r10, 0x58(%rsp)
movq %rax, 0xa8(%rsp)
movl %edi, 0xb4(%rsp)
movb %r8b, 0xf(%rsp)
movw %r9w, 0x12(%rsp)
jae 0x31dbdd
movzbl %r8b, %r11d
cmpq 0x230(%rsp), %r11
adcb $0x0, %r11b
leaq (%rax,%rax), %rbx
movl %edx, %esi
movb $0x4, %cl
movl %r10d, %eax
movl %r9d, %r8d
jmp 0x31dc08
movq 0x40(%rsp), %rax
incl %eax
movb $0x1, %cl
cmpl %r13d, %r15d
jne 0x31dbf4
cmpl %r10d, %eax
cmovbel %r10d, %eax
movb $0x5, %cl
movzwl 0x10(%rsp), %r8d
movl 0x14(%rsp), %edi
movl %esi, %edx
movq 0xb8(%rsp), %r11
leaq 0x18(%r12), %rbp
movq %rbx, 0x18(%r12)
movl %edx, 0x20(%r12)
movl %edi, 0x24(%r12)
movb %r11b, 0x28(%r12)
movb %cl, 0x29(%r12)
movw %r8w, 0x2a(%r12)
movl %eax, 0x2c(%r12)
subq 0x48(%rsp), %rbp
sarq $0x3, %rbp
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rbp
leaq (%rsi,%rbp), %rcx
leaq 0x198(%rsp), %rdi
leaq 0x138(%rsp), %rdx
callq *0x20(%rsp)
movq %rax, %rcx
movl %ecx, 0x24(%r12)
testl %ecx, %ecx
movq 0xa0(%rsp), %rbx
je 0x31dcd1
movl %ecx, %eax
movq $-0x1, %rdx
shlq %cl, %rdx
movq 0x230(%rsp), %rsi
cmpq %rsi, %rax
notq %rdx
movq $-0x1, %rax
cmovaeq %rax, %rdx
movq 0x18(%r12), %rax
shlq %cl, %rax
orq %rdx, %rax
movq %rax, 0x18(%r12)
movzbl 0x28(%r12), %eax
cmpq %rsi, %rax
jae 0x31dccc
movl %ecx, %edx
addl %eax, %edx
movq 0x230(%rsp), %rax
cmpq %rax, %rdx
cmovaeq %rax, %rdx
movb %dl, 0x28(%r12)
addl %ecx, 0x20(%r12)
movq 0x298(%rsp), %rdi
testq %rdi, %rdi
je 0x31dce5
movl %ecx, %esi
callq 0x1afe39
movq 0x90(%rsp), %rax
addl %eax, %eax
movq 0x30(%rsp), %rcx
addq %rax, %rcx
movl 0x20(%r12), %eax
addl %eax, %eax
addq %rax, %rbp
cmpq %rbp, %rcx
cmovaq %rcx, %rbp
cmpq $0x3, 0x50(%rsp)
jge 0x31dd1a
movq 0x50(%rsp), %r15
jmp 0x31e01c
leaq (%r12,%rbx,8), %rax
addq $0x30, %r12
leaq -0x30(%rax), %rcx
movq %rcx, 0x98(%rsp)
addq $-0x48, %rax
movq %rax, 0xa0(%rsp)
addq 0xd8(%rsp), %r14
movl 0xb4(%rsp), %r11d
movb 0xf(%rsp), %r9b
movzwl 0x12(%rsp), %edx
movb $0x2, %al
cmpq 0x98(%rsp), %r12
movb %r9b, 0xf(%rsp)
movw %dx, 0x12(%rsp)
jbe 0x31dd8a
movq 0x40(%rsp), %rcx
movzwl 0x10(%rsp), %edx
movq 0x60(%rsp), %rsi
movl %esi, %r9d
movl 0x14(%rsp), %esi
movl %r15d, %r10d
movq 0x68(%rsp), %rdi
jmp 0x31dde0
leal 0x1(%r13), %r10d
cmpl %r10d, %r15d
jae 0x31ddaa
movq 0x58(%rsp), %rax
leal 0x1(%rax), %ecx
movb $0x1, %al
movl %r11d, %esi
movq 0xa8(%rsp), %rdi
jmp 0x31dde0
movq 0x40(%rsp), %rcx
movzwl 0x10(%rsp), %edx
movq 0x60(%rsp), %rsi
movl %esi, %r9d
movl 0x14(%rsp), %esi
movl %r15d, %r10d
movq 0x68(%rsp), %rdi
jne 0x31dde0
movq 0x58(%rsp), %rax
leal 0x1(%rax), %ecx
movq 0x40(%rsp), %rax
cmpl %ecx, %eax
cmoval %eax, %ecx
movb $0x3, %al
jmp 0x31dd6f
cmpq 0xa0(%rsp), %r12
ja 0x31de2d
movl 0x8(%r12), %r8d
incl %r8d
cmpl %r8d, %r10d
jae 0x31de14
movq (%r12), %rdi
movl 0xc(%r12), %esi
movb 0x10(%r12), %r9b
movzwl 0x12(%r12), %edx
movl 0x14(%r12), %ecx
movb $0x4, %al
jmp 0x31de30
movl %r11d, %ebx
leal 0x4(%rax), %r11d
cmpl %r8d, %r10d
movzbl %al, %r8d
movzbl %r11b, %eax
movl %ebx, %r11d
cmovnel %r8d, %eax
movl %r10d, %r8d
movzbl %r9b, %r9d
cmpq 0x230(%rsp), %r9
adcb $0x0, %r9b
cmpq 0x38(%rsp), %r12
jae 0x31dee4
movq 0xa8(%rsp), %r10
movq %r10, 0x68(%rsp)
movq (%r12), %r10
movq %rax, 0x90(%rsp)
movq %rbp, %rax
movl %ecx, %ebp
movl %esi, %ecx
movl %edx, %esi
movl %r11d, %edx
movl %r13d, %r11d
movq %r11, 0x70(%rsp)
movl 0x8(%r12), %r11d
movl 0xc(%r12), %ebx
movl %ebx, 0x48(%rsp)
movb 0x10(%r12), %bl
movb %bl, 0x30(%rsp)
movzwl 0x12(%r12), %r15d
movq 0x58(%rsp), %rbx
movq %rbx, 0x40(%rsp)
movq %r14, %r13
movl 0x14(%r12), %r14d
movzwl 0x12(%rsp), %ebx
movw %bx, 0x10(%rsp)
movb 0xf(%rsp), %bl
movq %rbx, 0x60(%rsp)
movl %edx, 0x14(%rsp)
movl %esi, %edx
movl %ecx, %esi
movl %ebp, %ecx
movq %rax, %rbp
movq 0x90(%rsp), %rax
movq %r14, 0x58(%rsp)
movq %r13, %r14
movl %r11d, %ebx
movq %r10, 0xa8(%rsp)
jmp 0x31df01
movq %r13, %rbx
movq %r15, 0x70(%rsp)
movzwl 0x12(%rsp), %r15d
movb 0xf(%rsp), %r10b
movb %r10b, 0x30(%rsp)
movl %r11d, 0x48(%rsp)
addq %rdi, %rdi
movq %rdi, (%r12)
movl %r8d, 0x8(%r12)
movl %esi, 0xc(%r12)
movb %r9b, 0x10(%r12)
movb %al, 0x11(%r12)
movw %dx, 0x12(%r12)
movl %ecx, 0x14(%r12)
movl %r8d, %esi
movq %r14, %r13
sarq $0x3, %r14
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %r14
leaq (%r14,%rsi), %rcx
leaq 0x198(%rsp), %rdi
leaq 0x138(%rsp), %rdx
callq *0x20(%rsp)
movq %rax, %rcx
movl %ecx, 0xc(%r12)
testl %ecx, %ecx
je 0x31dfbe
movl %ecx, %eax
movq $-0x1, %rdx
shlq %cl, %rdx
movq 0x230(%rsp), %rsi
cmpq %rsi, %rax
notq %rdx
movq $-0x1, %rax
cmovaeq %rax, %rdx
movq (%r12), %rax
shlq %cl, %rax
orq %rdx, %rax
movq %rax, (%r12)
movzbl 0x10(%r12), %eax
cmpq %rsi, %rax
jae 0x31dfb9
movl %ecx, %edx
addl %eax, %edx
movq 0x230(%rsp), %rax
cmpq %rax, %rdx
cmovaeq %rax, %rdx
movb %dl, 0x10(%r12)
addl %ecx, 0x8(%r12)
movq 0x298(%rsp), %rdi
testq %rdi, %rdi
je 0x31dfd2
movl %ecx, %esi
callq 0x1afe39
movl 0x8(%r12), %eax
addl %eax, %eax
addq %rax, %r14
cmpq %r14, %rbp
cmovbeq %r14, %rbp
addq $0x18, %r12
movq %r13, %r14
addq $0x18, %r14
movl 0x48(%rsp), %r11d
movb 0x30(%rsp), %r9b
movl %r15d, %edx
cmpq 0x38(%rsp), %r12
movq 0x70(%rsp), %r15
movq %rbx, %r13
jbe 0x31dd54
movq 0x50(%rsp), %r15
testq %r15, %r15
je 0x31e304
addq %r15, 0xc8(%rsp)
subq 0x240(%rsp), %rbp
movl $0x0, %r12d
cmovaeq %rbp, %r12
movq 0x28(%rsp), %rsi
leaq (%rsi,%rsi,2), %rax
movq 0x18(%rsp), %rcx
leaq (%rcx,%rax,8), %r11
movq 0x130(%rsp), %rax
leaq (%rcx,%rax,8), %rax
leaq (%r15,%r15,2), %rcx
leaq (%rax,%rcx,8), %r10
movl $0x1, %edi
movq 0x268(%rsp), %rdx
movq 0x288(%rsp), %rcx
movq 0x88(%rsp), %r8
movq %r12, %r9
pushq 0xf8(%rsp)
pushq %r10
pushq %rax
movq %r11, 0x50(%rsp)
pushq %r11
movq 0x148(%rsp), %rbp
pushq %rbp
pushq 0x128(%rsp)
callq 0x31e56c
addq $0x30, %rsp
testq %rax, %rax
je 0x31e0ca
cmpq %rax, %r15
jb 0x31e2ff
subq %rax, %r15
je 0x31e27e
movq 0xf0(%rsp), %rcx
addq %rax, %rcx
jmp 0x31e0d2
movq 0xf0(%rsp), %rcx
movq %rcx, %rbx
leaq (%rcx,%rcx,2), %rax
movq 0x18(%rsp), %rdx
leaq (%rdx,%rax,8), %r14
leaq (%r15,%r15,2), %rcx
leaq (%r14,%rcx,8), %r10
addq $-0x18, %r10
leaq (%rdx,%rax,8), %rax
addq $-0x18, %rax
xorl %edi, %edi
movq 0x28(%rsp), %rsi
movq 0x268(%rsp), %rdx
movq 0x288(%rsp), %rcx
movq 0x88(%rsp), %r8
movq %r12, %r9
pushq 0xf8(%rsp)
pushq %rax
pushq %r10
pushq 0x50(%rsp)
pushq %rbp
pushq 0x128(%rsp)
callq 0x31e56c
addq $0x30, %rsp
cmpq %rax, %r15
jbe 0x31e2f0
testq %rax, %rax
movq 0x120(%rsp), %r12
movq %r15, %rdx
je 0x31e159
subq %rax, %rdx
je 0x31e27e
leaq (%rdx,%rdx,2), %r15
testq %r12, %r12
je 0x31e193
movq %r12, %rdi
movq %rbx, %rsi
movq %rdx, %r13
callq 0x31a14b
leaq (%r14,%r15,8), %rax
addq $-0x18, %rax
movq %rbp, %rdi
movq %r12, %rsi
movq %rbx, %r12
movq 0xc0(%rsp), %rdx
movq 0x28(%rsp), %rbp
movq %rbp, %rcx
jmp 0x31e1b6
movq %rdx, %r13
leaq (%r14,%r15,8), %rax
addq $-0x18, %rax
movq %rbp, %rdi
xorl %esi, %esi
movq 0xc0(%rsp), %rdx
movq 0x28(%rsp), %rbp
movq %rbp, %rcx
movq %rbx, %r12
movq %rbx, %r8
movq 0x38(%rsp), %r9
pushq %rax
pushq %r14
callq 0x31e758
addq $0x10, %rsp
movq 0x268(%rsp), %rax
cmpq %rax, 0x288(%rsp)
seta %al
cmpq %rbp, 0xe0(%rsp)
setbe %dl
cmpq %rbp, 0x118(%rsp)
seta %cl
testb %dl, %al
movq 0x298(%rsp), %r15
jne 0x31e203
orb %cl, %al
jne 0x31e21f
movq 0xe0(%rsp), %rax
addq %rbp, %rax
cmpq %r12, %rax
jb 0x31e21f
leaq (%r12,%r13), %rcx
decq %rcx
cmpq %rcx, %rax
jbe 0x31e25c
cmpq 0x78(%rsp), %rbp
jae 0x31e28f
addq $0x2, %r13
leaq 0x3(,%rbp,2), %rax
incq %rbp
addq $-0x18, 0xd8(%rsp)
cmpq %rax, %r13
movq 0xe8(%rsp), %rax
movq 0x80(%rsp), %rbx
jbe 0x31d480
jmp 0x31e2f5
xorl %ebx, %ebx
cmpq 0x78(%rsp), %rbp
jae 0x31e291
leaq (%rax,%rax,2), %rax
movq 0x18(%rsp), %rcx
movl 0x8(%rcx,%rax,8), %eax
cmpq 0x268(%rsp), %rax
jne 0x31e226
jmp 0x31e291
movb $0x1, %bl
movq 0x298(%rsp), %r15
movq 0x28(%rsp), %rbp
jmp 0x31e291
xorl %ebx, %ebx
testq %r15, %r15
je 0x31e2c8
movq 0x80(%rsp), %rax
movq 0x10(%rax), %rax
shlq $0x3, %rax
leaq (%rax,%rax,2), %r9
movzbl %bl, %esi
movq %r15, %rdi
movq 0xc8(%rsp), %rdx
movq 0xe8(%rsp), %rcx
movq %rbp, %r8
callq 0x1afc0d
movq 0x78(%rsp), %rax
incq %rax
testb %bl, %bl
cmovneq %rax, %rbp
movq %rbp, %rax
addq $0x1f8, %rsp            # imm = 0x1F8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x933f2
callq 0x93347
callq 0x93380
callq 0x932d5
callq 0x9330e
callq 0x933b9
callq 0x9329c
callq 0x93263