// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/match/sfx-run.c
// Function: gt_runsuffixerator
int gt_runsuffixerator(bool doesa,
                       Suffixeratoroptions *so,
                       GenomediffInfo *gd_info,
                       GtLogger *logger,
                       GtError *err)
{
  GtTimer *sfxprogress = NULL;
  Outfileinfo outfileinfo;
  bool haserr = false;
  unsigned int prefixlength;
  Sfxstrategy sfxstrategy;
  GtEncseq *encseq = NULL;
  GtReadmode readmode = gt_index_options_readmode_value(so->idxopts);

  gt_error_check(err);

  so->outlcptab
    = so->genomediff ? true
                     : gt_index_options_outlcptab_value(so->idxopts);
  if (gt_showtime_enabled())
  {
    sfxprogress = gt_timer_new_with_progress_description("determining sequence "
                                        "length and number of special symbols");
    gt_timer_start(sfxprogress);
  }

  if (gt_str_length(so->inputindex) > 0)
  {
    GtEncseqLoader *el;
    el = gt_encseq_loader_new_from_options(so->loadopts, err);
    if (!gt_encseq_options_ssp_value(so->loadopts))
    {
      GtEncseqMetadata* emd = gt_encseq_metadata_new(gt_str_get(so->inputindex),
                                                     err);
      if (emd == NULL)
      {
        haserr = true;
      } else
      {
        GtEncseqAccessType at = gt_encseq_metadata_accesstype(emd);
        if (!gt_encseq_access_type_isviautables(at))
        {
          gt_encseq_loader_do_not_require_ssp_tab(el);
        }
      }
      gt_encseq_metadata_delete(emd);
    }
    if (!haserr) {
      gt_encseq_loader_set_logger(el, logger);
      /* as we only construct the des, sds, and ssptable, but do not
         need it later during the construction of the enhanced suffix
         array, we do not load it again: we just load the information
         stored in the .esq file. It would be better to use the
         in memory constructed encseq rather than the one mapped into
         memory. This would require to free the des, sds, and ssptable. */
      gt_encseq_loader_disable_autosupport(el);
      gt_encseq_loader_do_not_require_des_tab(el);
      gt_encseq_loader_do_not_require_sds_tab(el);
      gt_encseq_loader_do_not_require_ssp_tab(el);
      encseq = gt_encseq_loader_load(el, gt_str_get(so->inputindex), err);
    }
    gt_encseq_loader_delete(el);
    if (encseq == NULL)
    {
      haserr = true;
    }
  } else
  {
    GtEncseqEncoder *ee = NULL;
    ee = gt_encseq_encoder_new_from_options(so->encopts, err);
    /* '-plain' implies no description support */
    if (gt_encseq_options_plain_value(so->loadopts)) {
        gt_encseq_encoder_do_not_create_des_tab(ee);
        gt_encseq_encoder_do_not_create_sds_tab(ee);
    }
    if (ee == NULL)
      haserr = true;
    if (!haserr) {
      int rval;
      gt_encseq_encoder_set_timer(ee, sfxprogress);
      gt_encseq_encoder_set_logger(ee, logger);
      rval = gt_encseq_encoder_encode(ee, so->db, gt_str_get(so->indexname),
                                      err);
      if (rval != 0)
        haserr = true;
      if (!haserr) {
        GtEncseqLoader *el = gt_encseq_loader_new_from_options(so->loadopts,
                                                               err);
        /* as we only construct the des, sds, and ssptable, but do not
           need it later during the construction of the enhanced suffix
           array, we do not load it again: we just load the information
           stored in the .esq file. It would be better to use the
           in memory constructed encseq rather than the one mapped into
           memory. This would require to free the des, sds, and ssptable. */
        gt_encseq_loader_disable_autosupport(el);
        gt_encseq_loader_do_not_require_des_tab(el);
        gt_encseq_loader_do_not_require_sds_tab(el);
        gt_encseq_loader_do_not_require_ssp_tab(el);
        encseq = gt_encseq_loader_load(el, gt_str_get(so->indexname), err);
        if (!encseq)
          haserr = true;
        gt_encseq_loader_delete(el);
      }
    }
    if (encseq == NULL)
    {
      haserr = true;
    }
    gt_encseq_encoder_delete(ee);
  }
  if (!haserr)
  {
    gt_encseq_show_features(encseq,logger,false);
    if (readmode == GT_READMODE_COMPL ||
        readmode == GT_READMODE_REVCOMPL)
    {
      if (!gt_alphabet_is_dna(gt_encseq_alphabet(encseq)))
      {
        gt_error_set(err,"option -%s only can be used for DNA alphabets",
                          readmode == GT_READMODE_COMPL ? "cpl" : "rcl");
        haserr = true;
      }
    }
  }
  if (!haserr && gt_index_options_outkystab_value(so->idxopts)
              && !gt_index_options_outkyssort_value(so->idxopts))
  {
    if (gt_extractkeysfromdesfile(gt_str_get(so->indexname),
                                  false, logger, err) != 0)
    {
      haserr = true;
    }
  }
  prefixlength = gt_index_options_prefixlength_value(so->idxopts);
  sfxstrategy = gt_index_options_sfxstrategy_value(so->idxopts);
  if (!haserr)
  {
    if (gt_index_options_outsuftab_value(so->idxopts)
        || gt_index_options_outbwttab_value(so->idxopts)
        || so->outlcptab
        || gt_index_options_outbcktab_value(so->idxopts)
        || !doesa)
    {
      unsigned int numofchars = gt_alphabet_num_of_chars(
                                          gt_encseq_alphabet(encseq));

      if (detpfxlen(&prefixlength,
                    so,
                    numofchars,
                    gt_encseq_total_length(encseq),
                    sfxstrategy.spmopt_minlength == 0 ? true : false,
                    logger,
                    err) != 0)
      {
        haserr = true;
      }
    } else
    {
      if (readmode != GT_READMODE_FORWARD)
      {
        gt_error_set(err,"option '-dir %s' only makes sense in combination "
                          "with at least one of the options -suf, -lcp, or "
                          "-bwt",
                          gt_readmode_show(readmode));
        haserr = true;
      }
    }
  }
  outfileinfo.outfpsuftab = NULL;
  outfileinfo.outfpbwttab = NULL;
  outfileinfo.outlcpinfo = NULL;
  outfileinfo.outfpbcktab = NULL;
  outfileinfo.numberofallsortedsuffixes = 0;
  outfileinfo.longest.defined = false;
  outfileinfo.longest.valueunsignedlong = 0;
  outfileinfo.bustate_shulen = NULL;
  outfileinfo.encseq = NULL;
  if (!haserr)
  {
    if (initoutfileinfo(&outfileinfo,prefixlength,encseq,so,
                        sfxstrategy.compressedoutput,gd_info,err) != 0)
    {
      haserr = true;
    }
  }
  if (!haserr)
  {
    if (gt_index_options_outsuftab_value(so->idxopts)
        || gt_index_options_outbwttab_value(so->idxopts)
        || so->outlcptab
        || !doesa)
    {
      if (doesa)
      {
        if (suffixeratorwithoutput(
                               &outfileinfo,
                               encseq,
                               readmode,
                               prefixlength,
                               gt_index_options_numofparts_value(so->idxopts),
                               gt_index_options_maximumspace_value(so->idxopts),
                               gt_index_options_swallow_tail_value(so->idxopts),
                               &sfxstrategy,
                               sfxprogress,
                               so->showprogress,
                               logger,
                               err) != 0)
        {
          haserr = true;
        }
      } else
      {
#ifndef S_SPLINT_S
        sfxstrategy.outsuftabonfile = false;
        if (run_packedindexconstruction(logger,
                                        sfxprogress,
                                        so->showprogress,
                                        so,
                                        prefixlength,
                                        encseq,
                                        &sfxstrategy,
                                        err) != 0)
        {
          haserr = true;
        }
#endif
      }
    }
  }
  if (!haserr && outfileinfo.bustate_shulen != NULL &&
      gt_sfx_multiesa2shulengthdist_last(outfileinfo.bustate_shulen,err) != 0)
  {
    haserr = true;
  }
  gt_fa_fclose(outfileinfo.outfpsuftab);
  gt_fa_fclose(outfileinfo.outfpbwttab);
  gt_fa_fclose(outfileinfo.outfpbcktab);
  if (!haserr)
  {
    GtUword numoflargelcpvalues, maxbranchdepth;
    double averagelcp;

    if (outfileinfo.outlcpinfo == NULL)
    {
      numoflargelcpvalues = maxbranchdepth = 0;
      averagelcp = 0.0;
    } else
    {
      numoflargelcpvalues
        = gt_Outlcpinfo_numoflargelcpvalues(outfileinfo.outlcpinfo);
      maxbranchdepth = gt_Outlcpinfo_maxbranchdepth(outfileinfo.outlcpinfo);
      averagelcp = gt_Outlcpinfo_lcptabsum(outfileinfo.outlcpinfo)/
                   outfileinfo.numberofallsortedsuffixes;
    }
    if (gt_outprjfile(gt_str_get(so->indexname),
                      readmode,
                      encseq,
                      outfileinfo.numberofallsortedsuffixes,
                      prefixlength,
                      numoflargelcpvalues,
                      averagelcp,
                      maxbranchdepth,
                      &outfileinfo.longest,
                      err) != 0)
    {
      haserr = true;
    }
  }
  gt_Outlcpinfo_delete(outfileinfo.outlcpinfo);
  gt_sfx_multiesashulengthdist_delete(outfileinfo.bustate_shulen,gd_info);
  gt_encseq_delete(encseq);
  encseq = NULL;
  if (!haserr
        && gt_index_options_outkystab_value(so->idxopts)
        && gt_index_options_outkyssort_value(so->idxopts))
  {
    if (gt_extractkeysfromdesfile(gt_str_get(so->indexname),
                                  true,
                                  logger, err) != 0)
    {
      haserr = true;
    }
  }
  if (sfxprogress != NULL)
  {
    gt_timer_show_progress_final(sfxprogress, stdout);
    gt_timer_delete(sfxprogress);
  }
  return haserr ? -1 : 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movq %r8, %r14
movq %rcx, 0x28(%rsp)
movq %rdx, 0x98(%rsp)
movq %rsi, %r12
movl %edi, 0x14(%rsp)
movq 0x18(%rsi), %rdi
callq 0x1bea4f
movl %eax, 0x1c(%rsp)
testq %r14, %r14
je 0x1f9b5a
movq %r14, %rdi
callq 0x101a9a
testb %al, %al
jne 0x1fa8fd
movb $0x1, %al
cmpb $0x0, 0x2(%r12)
jne 0x1f9b6e
movq 0x18(%r12), %rdi
callq 0x1be99e
movb %al, 0x3(%r12)
callq 0x11ed94
testb %al, %al
je 0x1f9b97
leaq 0x1c88c4(%rip), %rdi    # 0x3c2447
callq 0x1226d6
movq %rax, 0x38(%rsp)
movq %rax, %rdi
callq 0x122733
jmp 0x1f9ba0
movq $0x0, 0x38(%rsp)
movq 0x28(%r12), %rdi
callq 0x120d4c
testq %rax, %rax
movq %r14, 0x20(%rsp)
movq %r12, 0x8(%rsp)
je 0x1f9be2
movq 0x10(%r12), %rdi
movq %r14, %rsi
callq 0xf6952
movq %rax, %rbx
movq 0x10(%r12), %rdi
callq 0x1016a3
testb %al, %al
je 0x1f9c83
xorl %ebp, %ebp
jmp 0x1f9d66
movq 0x8(%r12), %rdi
movq %r14, %rsi
callq 0xf44eb
movq %rax, %r14
movq 0x10(%r12), %rdi
callq 0x1015f7
testb %al, %al
je 0x1f9c10
movq %r14, %rdi
callq 0xf48b0
movq %r14, %rdi
callq 0xf48ec
xorl %r12d, %r12d
testq %r14, %r14
sete %bpl
je 0x1f9cc6
movq %r14, %rdi
movq 0x38(%rsp), %rsi
callq 0xf486e
movq %r14, %rdi
movq 0x28(%rsp), %rsi
callq 0xf49aa
movq 0x8(%rsp), %r15
movq 0x20(%r15), %rdi
movq 0x30(%r15), %rbx
callq 0x120d23
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
movq 0x20(%rsp), %r13
movq %r13, %rcx
callq 0xf49ba
testl %eax, %eax
movb %bpl, %r12b
movl $0x1, %eax
cmovnel %eax, %r12d
movl %r12d, %ebp
testb %r12b, %r12b
je 0x1f9cd0
movq %r15, %r12
xorl %r15d, %r15d
jmp 0x1f9d38
movq 0x28(%r12), %rdi
callq 0x120d23
movq %rax, %rdi
movq %r14, %rsi
callq 0x1000e4
movq %rax, %r14
testq %rax, %rax
je 0x1f9d56
movq %r14, %rdi
callq 0x100dde
movl %eax, %edi
callq 0xffdc9
testb %al, %al
jne 0x1f9cbf
movq %rbx, %rdi
callq 0xf6a1a
xorl %ebp, %ebp
jmp 0x1f9d59
xorl %r15d, %r15d
movq 0x8(%rsp), %r12
jmp 0x1f9d38
movq 0x10(%r15), %rdi
movq %r13, %rsi
movl $0x1, %r12d
callq 0xf6952
movq %rax, %rbx
movq %rax, %rdi
callq 0xf69cc
movq %rbx, %rdi
callq 0xf69ed
movq %rbx, %rdi
callq 0xf6a49
movq %rbx, %rdi
callq 0xf6a1a
movq 0x20(%r15), %rdi
callq 0x120d23
movq %rbx, %rdi
movq %rax, %rsi
movq %r13, %rdx
callq 0xf374b
movq %rax, %r13
testq %rax, %rax
movzbl %bpl, %ebp
cmovel %r12d, %ebp
movq %rbx, %rdi
callq 0xf424d
movq %r15, %r12
movq %r13, %r15
testq %r15, %r15
movzbl %bpl, %eax
movl $0x1, %ebp
cmovnel %eax, %ebp
movq %r14, %rdi
callq 0xf483d
movq 0x20(%rsp), %r14
jmp 0x1f9dcf
movb $0x1, %bpl
movq %r14, %rdi
callq 0x100e07
movq 0x20(%rsp), %r14
testb %bpl, %bpl
je 0x1f9d70
xorl %r15d, %r15d
jmp 0x1f9db8
movq %rbx, %rdi
movq 0x28(%rsp), %rsi
callq 0xf6add
movq %rbx, %rdi
callq 0xf69cc
movq %rbx, %rdi
callq 0xf69ed
movq %rbx, %rdi
callq 0xf6a49
movq %rbx, %rdi
callq 0xf6a1a
movq 0x28(%r12), %rdi
callq 0x120d23
movq %rbx, %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0xf374b
movq %rax, %r15
movq %rbx, %rdi
callq 0xf424d
testq %r15, %r15
movzbl %bpl, %eax
movl $0x1, %ebp
cmovnel %eax, %ebp
testb %bpl, %bpl
jne 0x1f9e2e
movq %r15, %rdi
movq 0x28(%rsp), %rsi
xorl %edx, %edx
callq 0xf2091
movl 0x1c(%rsp), %eax
andl $-0x2, %eax
cmpl $0x2, %eax
jne 0x1f9e2e
movq %r15, %rdi
callq 0xf02da
movq %rax, %rdi
callq 0xd3c75
testb %al, %al
jne 0x1f9e2e
cmpl $0x2, 0x1c(%rsp)
leaq 0x17ed92(%rip), %rax    # 0x378ba1
leaq 0x17ed87(%rip), %rdx    # 0x378b9d
cmoveq %rax, %rdx
leaq 0x1c8660(%rip), %rsi    # 0x3c2481
movq %r14, %rdi
xorl %eax, %eax
callq 0x1019cf
movb $0x1, %bpl
testb %bpl, %bpl
jne 0x1f9e79
movq 0x18(%r12), %rdi
callq 0x1bea40
testb %al, %al
je 0x1f9e79
movq 0x18(%r12), %rdi
callq 0x1bea31
testb %al, %al
jne 0x1f9e79
movq 0x20(%r12), %rdi
callq 0x120d23
movq %rax, %rdi
xorl %esi, %esi
movq 0x28(%rsp), %rdx
movq %r14, %rcx
callq 0x1b90d4
testl %eax, %eax
movzbl %bpl, %eax
movl $0x1, %ebp
cmovel %eax, %ebp
movq 0x18(%r12), %rdi
callq 0x1be9e2
movl %eax, %r13d
movq 0x18(%r12), %rsi
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
callq 0x1bea5e
movq 0x30(%rbx), %rax
movq %rax, 0x100(%rsp)
movupd (%rbx), %xmm0
movupd 0x10(%rbx), %xmm1
movupd 0x20(%rbx), %xmm2
movapd %xmm2, 0xf0(%rsp)
movapd %xmm1, 0xe0(%rsp)
movapd %xmm0, 0xd0(%rsp)
testb %bpl, %bpl
movq %r15, 0x30(%rsp)
jne 0x1fa00a
movq 0x18(%r12), %rdi
callq 0x1be9c0
testb %al, %al
jne 0x1f9f1b
movq 0x18(%r12), %rdi
callq 0x1be97c
testb %al, %al
jne 0x1f9f1b
cmpb $0x0, 0x3(%r12)
jne 0x1f9f1b
movq 0x18(%r12), %rdi
callq 0x1be95a
movl 0x14(%rsp), %ecx
xorb $0x1, %cl
orb %al, %cl
cmpb $0x1, %cl
jne 0x1fa8cb
movq %r15, %rdi
callq 0xf02da
movq %rax, %rdi
callq 0xd3713
movl %eax, %ebx
movq %r15, %rdi
callq 0xec1d8
movq %rax, %r14
movl 0xf8(%rsp), %r15d
xorl %r12d, %r12d
testl %r15d, %r15d
sete %r12b
movq 0x8(%rsp), %rax
movq 0x18(%rax), %rsi
leaq 0x40(%rsp), %r13
movq %r13, %rdi
callq 0x1bea5e
xorl %eax, %eax
cmpl $0x0, 0x28(%r13)
sete %al
leaq 0x1c849f(%rip), %rcx    # 0x3c2410
movsd (%rcx,%rax,8), %xmm0
movl %ebx, %edi
movq %r14, %rsi
movl %r12d, %edx
movq 0x8(%rsp), %r12
callq 0x1ec4ec
movl %eax, %r13d
movq 0x18(%r12), %rdi
callq 0x1be9e2
testl %eax, %eax
je 0x1f9fea
movl %r13d, 0x18(%rsp)
xorl %r13d, %r13d
testl %r15d, %r15d
sete %r13b
movq 0x18(%r12), %rdi
callq 0x1be9e2
movl %eax, %r12d
movzbl 0x6d(%rsp), %edx
shll $0x2, %edx
movl %ebx, %edi
movq %r14, %rsi
movl %r13d, %ecx
callq 0x1ec5a5
movl %eax, %ebx
movl %eax, %edi
movl %r12d, %esi
movq 0x20(%rsp), %r14
movq %r14, %rdx
callq 0x1ec6e5
testl %eax, %eax
je 0x1fa00f
movl %r12d, %eax
movb $0x1, %bpl
jmp 0x1fa022
leaq 0x1c8559(%rip), %rsi    # 0x3c254a
movq 0x28(%rsp), %rdi
movl %r13d, %edx
xorl %eax, %eax
callq 0x10906e
movq 0x20(%rsp), %r14
movq 0x30(%rsp), %r15
movl %r13d, %eax
jmp 0x1fa02c
movq 0x28(%rsp), %rdi
movl %ebx, %esi
movl 0x18(%rsp), %edx
callq 0x1ec72b
movl %r12d, %eax
movq 0x8(%rsp), %r12
movq 0x30(%rsp), %r15
xorpd %xmm0, %xmm0
movupd %xmm0, 0x59(%rsp)
movapd %xmm0, 0x50(%rsp)
movapd %xmm0, 0x40(%rsp)
movapd %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
testb %bpl, %bpl
movl %eax, 0x18(%rsp)
jne 0x1fa2ad
movb 0x106(%rsp), %r13b
cmpb $0x1, 0x3(%r12)
jne 0x1fa0b8
movq 0x20(%r12), %rdi
callq 0x120d23
testq %rax, %rax
jne 0x1fa08c
cmpb $0x0, 0x2(%r12)
je 0x1fa907
cmpb $0x1, 0x2(%r12)
jne 0x1fa0ac
movq %r15, %rdi
movq 0x98(%rsp), %rsi
callq 0x1af4c4
movq %rax, 0x80(%rsp)
cmpb $0x0, 0x2(%r12)
je 0x1fa0c5
xorl %ebx, %ebx
jmp 0x1fa0d2
movq $0x0, 0x78(%rsp)
xorl %ebx, %ebx
jmp 0x1fa142
movq 0x20(%r12), %rdi
callq 0x120d23
movq %rax, %rbx
movq %r15, %rdi
callq 0xf02b7
movl %eax, %r14d
movq 0x18(%r12), %rdi
callq 0x1bea04
movq %r12, %r15
movl %eax, %r12d
movq 0x18(%r15), %rdi
callq 0x1bea8c
leaq 0x8c9(%rip), %rcx       # 0x1fa9c6
xorl %r9d, %r9d
cmpb $0x0, 0x2(%r15)
movq 0x30(%rsp), %r15
cmovneq %rcx, %r9
movzbl %r12b, %ecx
movzbl %al, %r8d
movq %rbx, %rdi
movl %r14d, %esi
movl 0x18(%rsp), %edx
movq 0x20(%rsp), %r14
pushq %r14
pushq 0x88(%rsp)
callq 0x1f5b71
addq $0x10, %rsp
movq %rax, 0x78(%rsp)
testq %rax, %rax
sete %bl
testb %bl, %bl
je 0x1fa14d
movq 0x8(%rsp), %r12
jmp 0x1fa1b1
movq 0x8(%rsp), %r12
movq 0x18(%r12), %rdi
callq 0x1be9c0
testb %al, %al
je 0x1fa1b1
movq 0x20(%r12), %rdi
callq 0x120d23
leaq 0x168912(%rip), %rcx    # 0x362a83
leaq 0x1963d9(%rip), %rsi    # 0x390551
testb %r13b, %r13b
cmovneq %rcx, %rsi
leaq 0x164987(%rip), %rdx    # 0x35eb0d
leaq 0x1c82a6(%rip), %rcx    # 0x3c2433
movq %rax, %rdi
movl $0x99, %r8d
movq %r14, %r9
callq 0x101dff
movq %rax, 0x40(%rsp)
testq %rax, %rax
movzbl %bl, %eax
movl $0x1, %ebx
cmovnel %eax, %ebx
testb %bl, %bl
jne 0x1fa206
movq 0x18(%r12), %rdi
callq 0x1be97c
testb %al, %al
je 0x1fa206
movq 0x20(%r12), %rdi
callq 0x120d23
leaq 0x1b3682(%rip), %rsi    # 0x3ad856
leaq 0x164932(%rip), %rdx    # 0x35eb0d
leaq 0x1c8251(%rip), %rcx    # 0x3c2433
movq %rax, %rdi
movl $0x9c, %r8d
movq %r14, %r9
callq 0x101dff
movq %rax, 0x48(%rsp)
testq %rax, %rax
movzbl %bl, %eax
movl $0x1, %ebx
cmovnel %eax, %ebx
testb %bl, %bl
jne 0x1fa25b
movq 0x18(%r12), %rdi
callq 0x1be95a
testb %al, %al
je 0x1fa25b
movq 0x20(%r12), %rdi
callq 0x120d23
leaq 0x1adb79(%rip), %rsi    # 0x3a7da2
leaq 0x1648dd(%rip), %rdx    # 0x35eb0d
leaq 0x1c81fc(%rip), %rcx    # 0x3c2433
movq %rax, %rdi
movl $0x9f, %r8d
movq %r14, %r9
callq 0x101dff
movq %rax, 0x50(%rsp)
testq %rax, %rax
movzbl %bl, %eax
movl $0x1, %ebx
cmovnel %eax, %ebx
movq 0x18(%r12), %rdi
callq 0x1be9c0
movq %r15, %rcx
testb %al, %al
jne 0x1fa29a
movq 0x18(%r12), %rdi
callq 0x1be97c
movq %r15, %rcx
testb %al, %al
jne 0x1fa29a
cmpb $0x0, 0x3(%r12)
movq %r15, %rcx
jne 0x1fa29a
movq 0x18(%r12), %rdi
callq 0x1be95a
xorl %ecx, %ecx
testb %al, %al
cmovneq %r15, %rcx
movq %rcx, 0x60(%rsp)
testb %bl, %bl
movzbl %bpl, %eax
movl $0x1, %ebp
cmovel %eax, %ebp
testb %bpl, %bpl
jne 0x1fa70d
movq 0x18(%r12), %rdi
callq 0x1be9c0
testb %al, %al
jne 0x1fa2d6
movq 0x18(%r12), %rdi
callq 0x1be97c
testb %al, %al
je 0x1fa4da
cmpb $0x0, 0x14(%rsp)
je 0x1fa393
movq 0x18(%r12), %rdi
callq 0x1bea23
movl %eax, %ebx
movq 0x18(%r12), %rdi
callq 0x1bea13
movq %rax, %r14
movq 0x18(%r12), %rdi
callq 0x1bea8c
movb %al, 0x14(%rsp)
movzbl 0x1(%r12), %eax
movq 0x78(%rsp), %r9
leaq 0xd0(%rsp), %r10
movq %r15, %rdi
movl 0x1c(%rsp), %esi
movl 0x18(%rsp), %edx
movl %ebx, %ecx
movq %r14, %r8
movq 0x20(%rsp), %r14
pushq %r14
pushq 0x30(%rsp)
pushq %rax
pushq 0x50(%rsp)
pushq %r10
pushq 0x78(%rsp)
callq 0x200c1c
addq $0x30, %rsp
movq %rax, %r12
testq %rax, %rax
je 0x1fa4f6
movb $0x0, 0x7(%rsp)
cmpb $0x1, 0x106(%rsp)
jne 0x1fa506
movq %r15, %rdi
callq 0xec1d8
movq %rax, %rdi
callq 0x10af48
movq 0x40(%rsp), %rdi
movzwl %ax, %esi
callq 0xd8b38
movq %rax, 0x90(%rsp)
jmp 0x1fa512
movb $0x0, 0x105(%rsp)
movq %r15, %r14
movb 0x1(%r12), %r15b
movq 0x18(%r12), %rsi
leaq 0x110(%rsp), %rbx
movq %rbx, %rdi
callq 0x1bea9b
movq %r14, %rdi
callq 0xf02da
movq %rax, %rdi
callq 0xd3713
movupd (%rbx), %xmm0
movupd 0x10(%rbx), %xmm1
movapd %xmm0, 0xa0(%rsp)
movapd %xmm1, 0xb0(%rsp)
movq 0x20(%rbx), %rcx
movq %rcx, 0xc0(%rsp)
cmpl $0xb, %eax
jb 0x1fa409
cmpl $0x4, 0xa8(%rsp)
jb 0x1fa409
movl $0x3, 0xa8(%rsp)
movl 0xa8(%rsp), %edx
movl 0xac(%rsp), %ecx
movl 0xb4(%rsp), %r8d
leaq 0x1c81fc(%rip), %rsi    # 0x3c2622
movq 0x28(%rsp), %rbx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x10906e
movq 0x18(%r12), %rdi
callq 0x1bea4f
movl %eax, 0x14(%rsp)
movq 0x18(%r12), %rdi
callq 0x1bea23
movl %eax, %r14d
movq 0x18(%r12), %rdi
callq 0x1bea13
movq %rax, %r12
movq 0x30(%rsp), %r13
movq %r13, %rdi
callq 0xec1d8
incq %rax
subq $0x8, %rsp
movzbl %r15b, %r10d
movq %r13, %r15
leaq 0xd8(%rsp), %r8
movl 0x1c(%rsp), %edi
movl 0x20(%rsp), %esi
movl %r14d, %edx
movq %r12, %rcx
movq %r13, %r9
movq 0x28(%rsp), %r14
pushq %r14
pushq %rbx
pushq %rax
pushq %r10
pushq 0x60(%rsp)
callq 0x1a78a0
addq $0x30, %rsp
testq %rax, %rax
je 0x1fa4fe
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0x1a1840
testq %rax, %rax
je 0x1fa6fd
movq %rax, %rdi
callq 0x1a430c
jmp 0x1fa700
cmpb $0x0, 0x14(%rsp)
je 0x1fa2d6
cmpb $0x0, 0x3(%r12)
je 0x1fa70d
jmp 0x1fa2d6
movb $0x1, %r14b
jmp 0x1fa663
movb $0x1, %bpl
jmp 0x1fa6f6
movq $0x0, 0x90(%rsp)
leaq 0x110(%rsp), %rdi
leaq 0x7(%rsp), %rsi
movq %r12, %rdx
callq 0x2022f4
testq %rax, %rax
je 0x1fa649
movq %rax, %rbx
leaq 0xa0(%rsp), %r13
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x1fa57b
movb 0x7(%rsp), %al
andb 0x14(%rsp), %al
jne 0x1fa57b
movq 0x110(%rsp), %rdx
cmpb $0x1, 0x106(%rsp)
jne 0x1fa573
movq %rbx, %rdi
movq 0x90(%rsp), %rsi
callq 0x2063ae
jmp 0x1fa57b
movq %rbx, %rsi
callq 0x206377
movq 0x110(%rsp), %r15
testq %r14, %r14
je 0x1fa598
movq %r14, %rdi
callq 0x101a9a
testb %al, %al
jne 0x1fa8f8
cmpq $0x0, 0x48(%rsp)
je 0x1fa616
movb $0x0, 0xa0(%rsp)
testq %r15, %r15
je 0x1fa611
xorl %r14d, %r14d
movq %rbx, %rdi
movq %r14, %rsi
callq 0x205eeb
testq %rax, %rax
je 0x1fa5e5
cmpq $0x0, 0x48(%rsp)
je 0x1fa5ed
movq 0x60(%rsp), %rdi
decq %rax
movq %rax, %rsi
movl 0x1c(%rsp), %edx
callq 0xec1f8
movb %al, 0xa0(%rsp)
jmp 0x1fa5ed
movb $-0x2, 0xa0(%rsp)
movq 0x48(%rsp), %rcx
testq %rcx, %rcx
je 0x1fa609
movl $0x1, %esi
movl $0x1, %edx
movq %r13, %rdi
callq 0x125658
incq %r14
cmpq %r14, %r15
jne 0x1fa5b0
movq 0x20(%rsp), %r14
movq 0x110(%rsp), %rax
addq %rax, 0x58(%rsp)
leaq 0x110(%rsp), %rdi
leaq 0x7(%rsp), %rsi
movq %r12, %rdx
callq 0x2022f4
movq %rax, %rbx
testq %rax, %rax
movq 0x30(%rsp), %r15
jne 0x1fa53b
cmpb $0x1, 0x106(%rsp)
jne 0x1fa660
movq 0x90(%rsp), %rdi
callq 0xd8f35
xorl %r14d, %r14d
testb %r14b, %r14b
je 0x1fa678
movb $0x0, 0x68(%rsp)
movq $0x0, 0x70(%rsp)
jmp 0x1fa6ce
movb $0x1, 0x68(%rsp)
movq %r12, %rdi
callq 0x202d23
movq %rax, %rbx
movq %rax, 0x70(%rsp)
movq %r15, %rdi
callq 0xec1d8
cmpq %rax, %rbx
jae 0x1fa902
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x1fa6ce
movq %r12, %rsi
movq 0x20(%rsp), %rdx
callq 0x202cb4
testl %eax, %eax
movzbl %r14b, %eax
movl $0x1, %r14d
cmovel %eax, %r14d
movq $0x0, 0x50(%rsp)
movq %r12, %rdi
movq 0x20(%rsp), %rbx
movq %rbx, %rsi
callq 0x200058
testb $0x1, %r14b
movq %rbx, %r14
movzbl %bpl, %ebp
movl $0x1, %ecx
cmovnel %ecx, %ebp
testl %eax, %eax
cmovnel %ecx, %ebp
movq 0x8(%rsp), %r12
jmp 0x1fa70d
movb $0x1, %bpl
movq 0x8(%rsp), %r12
movq %rbx, %rdi
callq 0x1a7ef1
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
sete %al
orb %bpl, %al
jne 0x1fa736
movq %r14, %rsi
callq 0x1afb13
testl %eax, %eax
movzbl %bpl, %eax
movl $0x1, %ebp
cmovel %eax, %ebp
movq 0x40(%rsp), %rdi
callq 0x101e80
movq 0x48(%rsp), %rdi
callq 0x101e80
movq 0x50(%rsp), %rdi
callq 0x101e80
testb %bpl, %bpl
jne 0x1fa81a
leaq 0x68(%rsp), %r15
movq 0x10(%r15), %rdi
testq %rdi, %rdi
je 0x1fa7b7
callq 0x1f61da
movq %rax, %rbx
movq 0x78(%rsp), %rdi
callq 0x1f6201
movq %rax, %r14
movq 0x78(%rsp), %rdi
callq 0x1f61eb
movsd 0x58(%rsp), %xmm2
unpcklps 0x156149(%rip), %xmm2   # xmm2 = xmm2[0],mem[0],xmm2[1],mem[1]
subpd 0x156151(%rip), %xmm2   # 0x3508f0
movapd %xmm2, %xmm1
unpckhpd %xmm2, %xmm1            # xmm1 = xmm1[1],xmm2[1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x8(%rsp)
jmp 0x1fa7c6
xorpd %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
xorl %ebx, %ebx
xorl %r14d, %r14d
movq 0x20(%r12), %rdi
callq 0x120d23
movq 0x58(%rsp), %rcx
subq $0x8, %rsp
movq %rax, %rdi
movl 0x24(%rsp), %esi
movq 0x38(%rsp), %rdx
movl 0x20(%rsp), %r8d
movq %rbx, %r9
movsd 0x10(%rsp), %xmm0
movq 0x28(%rsp), %rax
pushq %rax
pushq %r15
movq %rdx, %r15
pushq %r14
movq %rax, %r14
callq 0x334d10
addq $0x20, %rsp
testl %eax, %eax
movzbl %bpl, %eax
movl $0x1, %ebp
cmovel %eax, %ebp
movq 0x78(%rsp), %rdi
callq 0x1f5e75
movq 0x80(%rsp), %rdi
movq 0x98(%rsp), %rsi
callq 0x1afb33
movq %r15, %rdi
callq 0xee90c
testb %bpl, %bpl
jne 0x1fa88f
movq 0x18(%r12), %rdi
callq 0x1bea40
testb %al, %al
je 0x1fa88f
movq 0x18(%r12), %rdi
callq 0x1bea31
testb %al, %al
je 0x1fa88f
movq 0x20(%r12), %rdi
callq 0x120d23
movl $0x1, %ebx
movq %rax, %rdi
movl $0x1, %esi
movq 0x28(%rsp), %rdx
movq %r14, %rcx
callq 0x1b90d4
testl %eax, %eax
movzbl %bpl, %ebp
cmovnel %ebx, %ebp
movq 0x38(%rsp), %rbx
testq %rbx, %rbx
je 0x1fa8b3
movq 0x2c9648(%rip), %rax    # 0x4c3ee8
movq (%rax), %rsi
movq %rbx, %rdi
callq 0x122c67
movq %rbx, %rdi
callq 0x122d79
movzbl %bpl, %eax
negl %eax
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl 0x1c(%rsp), %edi
testl %edi, %edi
je 0x1fa00a
callq 0x118794
leaq 0x1c7bcc(%rip), %rsi    # 0x3c24af
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1019cf
movb $0x1, %bpl
jmp 0x1fa00a
callq 0x7bd72
callq 0x7bd02
callq 0x7bdab
callq 0x7bd3b