// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/tools/gt_repfind.c
// Function: gt_repfind_runner
static int gt_repfind_runner(int argc,const char **argv, int parsed_args,
                             void *tool_arguments, GtError *err)
{
  bool haserr = false;
  GtMaxpairsoptions *arguments = (GtMaxpairsoptions *) tool_arguments;
  GtLogger *logger = NULL;
  GtXdropmatchinfo *xdropmatchinfo = NULL;
  GtGreedyextendmatchinfo *greedyextendmatchinfo = NULL;
  GtTimer *repfindtimer = NULL;
  GtExtendCharAccess cam_a = GT_EXTEND_CHAR_ACCESS_ANY,
                     cam_b = GT_EXTEND_CHAR_ACCESS_ANY;
  GtFtPolishing_info *pol_info = NULL;
  GtQuerymatchoutoptions *querymatchoutoptions;
  GtKarlinAltschulStat *karlin_altschul_stat = NULL;
  Gt_extend_querymatch_func eqmf = NULL;
  void *eqmf_data = NULL;
  int mode;
  const int modes[] = {GT_READMODE_FORWARD,
                       GT_READMODE_REVERSE,
                       GT_READMODE_REVCOMPL};
  const bool flags[] = {arguments->forward,
                        arguments->reverse,
                        arguments->reverse_complement};
  GtSeedExtendDisplayFlag *out_display_flag = NULL;
  GtFtTrimstat *trimstat = NULL;

  gt_error_check(err);
  logger = gt_logger_new(arguments->beverbose, GT_LOGGER_DEFLT_PREFIX, stdout);
  if (gt_showtime_enabled())
  {
    repfindtimer = gt_timer_new();
    gt_timer_start(repfindtimer);
  }
  if (parsed_args < argc)
  {
    gt_error_set(err,"superfluous arguments: \"%s\"",argv[argc-1]);
    haserr = true;
  }
  if (!haserr)
  {
    GtSeedExtendDisplaySetMode setmode;

    if (gt_option_is_set(arguments->refextendxdropoption) ||
        gt_option_is_set(arguments->refextendgreedyoption))
    {
      setmode = GT_SEED_EXTEND_DISPLAY_SET_STANDARD;
    } else
    {
      setmode = GT_SEED_EXTEND_DISPLAY_SET_EXACT;
    }
    out_display_flag = gt_querymatch_display_flag_new(arguments->display_args,
                                                      setmode,err);
    if (out_display_flag == NULL)
    {
      haserr = true;
    } else
    {
      gt_querymatch_Options_output(stdout,argc,argv,true,arguments->minidentity,
                                   arguments->historysize);
      gt_querymatch_Fields_output(stdout,out_display_flag);
    }
  }
  if (!haserr)
  {
    if (gt_querymatch_evalue_display(out_display_flag) ||
        gt_querymatch_bitscore_display(out_display_flag) ||
        arguments->evalue_threshold != DBL_MAX)
    {
      GtEncseqMetadata *emd
        = gt_encseq_metadata_new(gt_str_get(arguments->indexname),err);
      if (emd == NULL)
      {
        haserr = true;
      } else
      {
        karlin_altschul_stat = gt_karlin_altschul_stat_new_gapped(
                                     gt_encseq_metadata_total_length(emd),
                                     gt_encseq_metadata_num_of_sequences(emd),
                                     NULL);
        gt_encseq_metadata_delete(emd);
      }
    }
  }
  if (!haserr && gt_option_is_set(arguments->refextendxdropoption))
  {
    xdropmatchinfo
      = gt_xdrop_matchinfo_new(arguments->userdefinedleastlength,
                               gt_minidentity2errorpercentage(
                                            arguments->minidentity),
                               arguments->evalue_threshold,
                               arguments->xdropbelowscore,
                               arguments->extendxdrop);
    gt_assert(xdropmatchinfo != NULL);
  }
  if (!haserr)
  {
    if (gt_option_is_set(arguments->refextendgreedyoption) ||
        gt_querymatch_alignment_display(out_display_flag) ||
        gt_option_is_set(arguments->refextendxdropoption))
    {
      if (gt_greedy_extend_char_access(&cam_a,
                                       &cam_b,
                                       gt_str_get(arguments->cam_string),err)
         != 0)
      {
        haserr = true;
      }
    }
  }
  if (!haserr && gt_option_is_set(arguments->refextendgreedyoption))
  {
    GtUword errorpercentage = gt_minidentity2errorpercentage(
                                           arguments->minidentity);
    pol_info = polishing_info_new_with_bias(errorpercentage,
                                            GT_DEFAULT_MATCHSCORE_BIAS,
                                            arguments->historysize);
    greedyextendmatchinfo
      = gt_greedy_extend_matchinfo_new(arguments->maxalignedlendifference,
                                       arguments->historysize,
                                       arguments->perc_mat_history,
                                       arguments->userdefinedleastlength,
                                       errorpercentage,
                                       arguments->evalue_threshold,
                                       cam_a,
                                       cam_b,
                                       false,
                                       arguments->extendgreedy,
                                       pol_info);
    if (arguments->check_extend_symmetry)
    {
      gt_greedy_extend_matchinfo_check_extend_symmetry_set(
                                                greedyextendmatchinfo);
    }
    if (arguments->trimstat_on)
    {
      trimstat = gt_ft_trimstat_new();
      gt_greedy_extend_matchinfo_trimstat_set(greedyextendmatchinfo,trimstat);
    }
  }
  if (!haserr)
  {
    GtEncseq *encseq_for_desc = NULL;
    GtProcessinfo_and_querymatchspaceptr info_querymatch
      = Initializer_GtProcessinfo_and_querymatchspaceptr;
    info_querymatch.karlin_altschul_stat = karlin_altschul_stat;
    info_querymatch.out_display_flag = out_display_flag;
    if (gt_querymatch_alignment_display(out_display_flag) ||
        gt_querymatch_trace_display(out_display_flag) ||
        gt_querymatch_dtrace_display(out_display_flag) ||
        gt_querymatch_cigar_display(out_display_flag) ||
        gt_querymatch_cigarX_display(out_display_flag) ||
        (gt_option_is_set(arguments->refextendxdropoption) &&
         !arguments->noxpolish))
    {
      querymatchoutoptions
        = gt_querymatchoutoptions_new(out_display_flag,
                                      gt_str_get(arguments->indexname),err);
      if (querymatchoutoptions == NULL)
      {
        haserr = true;
      }
      if (!haserr && (gt_option_is_set(arguments->refextendxdropoption) ||
                      gt_option_is_set(arguments->refextendgreedyoption)))
      {
        const bool cam_generic = false;
        const bool weakends = false;
        const GtUword sensitivity
          = gt_option_is_set(arguments->refextendgreedyoption)
              ? arguments->extendgreedy
              : 100;
        gt_querymatchoutoptions_extend(querymatchoutoptions,
                                       gt_minidentity2errorpercentage(
                                               arguments->minidentity),
                                      arguments->evalue_threshold,
                                      arguments->maxalignedlendifference,
                                      arguments->historysize,
                                      arguments->perc_mat_history,
                                      cam_a,
                                      cam_b,
                                      cam_generic,
                                      weakends,
                                      sensitivity,
                                      GT_DEFAULT_MATCHSCORE_BIAS,
                                      true,
                                      out_display_flag);
      }
    } else
    {
      querymatchoutoptions = NULL;
    }
    if (!haserr)
    {
      info_querymatch.querymatchspaceptr = gt_querymatch_new();
      if (querymatchoutoptions != NULL)
      {
        gt_querymatch_outoptions_set(info_querymatch.querymatchspaceptr,
                                     querymatchoutoptions);
      }
      if (arguments->verify_alignment)
      {
        gt_querymatch_verify_alignment_set(info_querymatch.querymatchspaceptr);
      }
      if (gt_option_is_set(arguments->refextendxdropoption))
      {
        eqmf = gt_rf_xdrop_extend_querymatch_with_output;
        info_querymatch.processinfo = xdropmatchinfo;
        eqmf_data = (void *) &info_querymatch;
      } else
      {
        if (gt_option_is_set(arguments->refextendgreedyoption))
        {
          eqmf = gt_rf_greedy_extend_querymatch_with_output;
          info_querymatch.processinfo = greedyextendmatchinfo;
          eqmf_data = (void *) &info_querymatch;
        }
      }
      if (gt_querymatch_subjectid_display(out_display_flag))
      {
        GtEncseqLoader *encseq_loader = gt_encseq_loader_new();
        gt_encseq_loader_require_des_tab(encseq_loader);
        gt_encseq_loader_require_sds_tab(encseq_loader);
        encseq_for_desc
          = gt_encseq_loader_load(encseq_loader,
                                  gt_str_get(arguments->indexname),
                                  err);
        gt_encseq_loader_delete(encseq_loader);
        if (encseq_for_desc == NULL)
        {
          haserr = true;
        }
      }
    }
    if (!haserr && gt_str_array_size(arguments->query_files) == 0 &&
        gt_str_length(arguments->query_indexname) == 0)
    {
      if (arguments->samples > 0)
      {
        if (gt_testmaxpairs(gt_str_get(arguments->indexname),
                            arguments->samples,
                            arguments->seedlength,
                            (GtUword)
                            (100 * arguments->seedlength),
                            logger,
                            err) != 0)
        {
          haserr = true;
        }
      } else
      {
        if (!haserr && arguments->forward)
        {
          GtProcessmaxpairs processmaxpairs;
          void *processmaxpairsdata;

          if (arguments->searchspm)
          {
            processmaxpairs = gt_suffix_prefix_match_with_output;
            processmaxpairsdata = NULL;
          } else
          {
            if (gt_option_is_set(arguments->refextendxdropoption))
            {
              processmaxpairs = gt_generic_extend_selfmatch_xdrop_with_output;
              info_querymatch.processinfo = (void *) xdropmatchinfo;
            } else
            {
              if (gt_option_is_set(arguments->refextendgreedyoption))
              {
                processmaxpairs = gt_generic_simplegreedyselfmatchoutput;
                info_querymatch.processinfo = (void *) greedyextendmatchinfo;
              } else
              {
                processmaxpairs = gt_exact_selfmatch_with_output;
              }
            }
            processmaxpairsdata = (void *) &info_querymatch;
          }
          if (gt_callenummaxpairs(gt_str_get(arguments->indexname),
                                  arguments->seedlength,
                                  arguments->maxfreq,
                                  arguments->scanfile,
                                  processmaxpairs,
                                  processmaxpairsdata,
                                  logger,
                                  err) != 0)
          {
            haserr = true;
          }
        }
        if (!haserr)
        {
          /* only handle reverse and reverse_complement, as forward
             is handled as selfmatch-mode */
          for (mode = 1; !haserr && mode < 3; mode++)
          {
            if (flags[mode])
            {
              gt_querymatch_query_readmode_set(
                   info_querymatch.querymatchspaceptr,
                   modes[mode]);
              if (gt_callenumquerymatches(true,
                                          gt_str_get(arguments->indexname),
                                          NULL,
                                          NULL,
                                          modes[mode],
                                          arguments->seedlength,
                                          querymatchoutoptions,
                                          eqmf,
                                          eqmf_data,
                                          out_display_flag,
                                          logger,
                                          err) != 0)
              {
                haserr = true;
              }
            }
          }
        }
      }
    } else
    {
      for (mode = 0; !haserr && mode < 3; mode++)
      {
        if (flags[mode])
        {
          gt_querymatch_query_readmode_set(info_querymatch.querymatchspaceptr,
                                           modes[mode]);
          if (gt_callenumquerymatches(false,
                                  gt_str_get(arguments->indexname),
                                  arguments->query_files,
                                  arguments->query_indexname,
                                  modes[mode],
                                  arguments->seedlength,
                                  querymatchoutoptions,
                                  eqmf,
                                  eqmf_data,
                                  out_display_flag,
                                  logger,
                                  err) != 0)
          {
            haserr = true;
          }
        }
      }
    }
    gt_encseq_delete(encseq_for_desc);
    gt_querymatchoutoptions_delete(querymatchoutoptions);
    gt_querymatch_delete(info_querymatch.querymatchspaceptr);
  }
  gt_karlin_altschul_stat_delete(karlin_altschul_stat);
  gt_xdrop_matchinfo_delete(xdropmatchinfo);
  gt_greedy_extend_matchinfo_delete(greedyextendmatchinfo);
  gt_ft_trimstat_delete(trimstat);
  polishing_info_delete(pol_info);
  gt_logger_delete(logger);
  gt_querymatch_display_flag_delete(out_display_flag);
  if (repfindtimer != NULL)
  {
    char *keystring = gt_seed_extend_params_keystring(
                             gt_option_is_set(arguments->refextendgreedyoption),
                             gt_option_is_set(arguments->refextendxdropoption),
                             arguments->seedlength,
                             arguments->userdefinedleastlength,
                             arguments->minidentity,
                             arguments->maxalignedlendifference,
                             arguments->perc_mat_history,
                             arguments->extendgreedy,
                             arguments->extendxdrop,
                             arguments->xdropbelowscore);
    printf("# TIME repfind-%s",keystring);
    gt_free(keystring);
    gt_timer_show_formatted(repfindtimer," overall " GT_WD ".%02ld\n",stdout);
    gt_timer_delete(repfindtimer);
  }
  return haserr ? -1 : 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x1c0, %rsp            # imm = 0x1C0
movl %edi, 0x1bc(%rsp)
movq %rsi, 0x1b0(%rsp)
movl %edx, 0x1ac(%rsp)
movq %rcx, 0x1a0(%rsp)
movq %r8, 0x198(%rsp)
movb $0x0, 0x197(%rsp)
movq 0x1a0(%rsp), %rax
movq %rax, 0x188(%rsp)
movq $0x0, 0x180(%rsp)
movq $0x0, 0x178(%rsp)
movq $0x0, 0x170(%rsp)
movq $0x0, 0x168(%rsp)
movl $0x3, 0x164(%rsp)
movl $0x3, 0x160(%rsp)
movq $0x0, 0x158(%rsp)
movq $0x0, 0x148(%rsp)
movq $0x0, 0x140(%rsp)
movq $0x0, 0x138(%rsp)
movq 0x4cdfdd(%rip), %rax    # 0x526904
movq %rax, 0x128(%rsp)
movl 0x4cdfd7(%rip), %eax    # 0x52690c
movl %eax, 0x130(%rsp)
movq 0x188(%rsp), %rax
movb 0x52(%rax), %al
andb $0x1, %al
movb %al, 0x125(%rsp)
movq 0x188(%rsp), %rax
movb 0x53(%rax), %al
andb $0x1, %al
movb %al, 0x126(%rsp)
movq 0x188(%rsp), %rax
movb 0x54(%rax), %al
andb $0x1, %al
movb %al, 0x127(%rsp)
movq $0x0, 0x118(%rsp)
movq $0x0, 0x110(%rsp)
cmpq $0x0, 0x198(%rsp)
je 0x589e6
movq 0x198(%rsp), %rdi
callq 0xd8a60
testb $0x1, %al
jne 0x589ae
jmp 0x589e6
movq 0x5e35eb(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4bd654(%rip), %rsi    # 0x516013
leaq 0x4bd7f9(%rip), %rdx    # 0x5161bf
leaq 0x4cdd65(%rip), %rcx    # 0x526732
leaq 0x4cd6b4(%rip), %r8     # 0x526088
movl $0x311, %r9d            # imm = 0x311
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x589e8
movq 0x188(%rsp), %rax
movb 0x51(%rax), %al
movq 0x5e353e(%rip), %rcx    # 0x63bf38
movq (%rcx), %rdx
leaq 0x4beee8(%rip), %rsi    # 0x5178ec
andb $0x1, %al
movzbl %al, %edi
callq 0xe7870
movq %rax, 0x180(%rsp)
callq 0x11aa90
testb $0x1, %al
jne 0x58a21
jmp 0x58a3b
callq 0x121340
movq %rax, 0x168(%rsp)
movq 0x168(%rsp), %rdi
callq 0x1213f0
movl 0x1ac(%rsp), %eax
cmpl 0x1bc(%rsp), %eax
jge 0x58a82
movq 0x198(%rsp), %rdi
movq 0x1b0(%rsp), %rax
movl 0x1bc(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdx
leaq 0x4cdcd1(%rip), %rsi    # 0x526744
movb $0x0, %al
callq 0xd88c0
movb $0x1, 0x197(%rsp)
testb $0x1, 0x197(%rsp)
jne 0x58b6e
movq 0x188(%rsp), %rax
movq 0x98(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x58ac2
movq 0x188(%rsp), %rax
movq 0xa0(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x58ac2
jmp 0x58acf
movl $0x1, 0x10c(%rsp)
jmp 0x58ada
movl $0x2, 0x10c(%rsp)
movq 0x188(%rsp), %rax
movq 0xb0(%rax), %rdi
movl 0x10c(%rsp), %esi
movq 0x198(%rsp), %rdx
callq 0x265d50
movq %rax, 0x118(%rsp)
cmpq $0x0, 0x118(%rsp)
jne 0x58b1a
movb $0x1, 0x197(%rsp)
jmp 0x58b6c
movq 0x5e3417(%rip), %rax    # 0x63bf38
movq (%rax), %rdi
movl 0x1bc(%rsp), %esi
movq 0x1b0(%rsp), %rdx
movq 0x188(%rsp), %rax
movq 0x38(%rax), %r8
movq 0x188(%rsp), %rax
movq 0x28(%rax), %r9
movl $0x1, %ecx
callq 0x2669d0
movq 0x5e33dc(%rip), %rax    # 0x63bf38
movq (%rax), %rdi
movq 0x118(%rsp), %rsi
callq 0x266b00
jmp 0x58b6e
testb $0x1, 0x197(%rsp)
jne 0x58c4a
movq 0x118(%rsp), %rdi
callq 0x265b50
testb $0x1, %al
jne 0x58bc3
movq 0x118(%rsp), %rdi
callq 0x265b70
testb $0x1, %al
jne 0x58bc3
movq 0x188(%rsp), %rax
movsd 0xb8(%rax), %xmm0
movsd 0x4c019a(%rip), %xmm1   # 0x518d50
ucomisd %xmm1, %xmm0
jne 0x58bc3
jp 0x58bc3
jmp 0x58c48
movq 0x188(%rsp), %rax
movq 0x60(%rax), %rdi
callq 0x11dee0
movq %rax, %rdi
movq 0x198(%rsp), %rsi
callq 0xd4e10
movq %rax, 0x100(%rsp)
cmpq $0x0, 0x100(%rsp)
jne 0x58c01
movb $0x1, 0x197(%rsp)
jmp 0x58c46
movq 0x100(%rsp), %rdi
callq 0xd66d0
movq %rax, 0x68(%rsp)
movq 0x100(%rsp), %rdi
callq 0xd6870
movq 0x68(%rsp), %rdi
movq %rax, %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0x25f0c0
movq %rax, 0x148(%rsp)
movq 0x100(%rsp), %rdi
callq 0xd6ae0
jmp 0x58c48
jmp 0x58c4a
testb $0x1, 0x197(%rsp)
jne 0x58d19
movq 0x188(%rsp), %rax
movq 0x98(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x58c75
jmp 0x58d19
movq 0x188(%rsp), %rax
movl (%rax), %eax
movq %rax, 0x60(%rsp)
movq 0x188(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0x2acc50
movq 0x60(%rsp), %rdi
movq %rax, %rsi
movq 0x188(%rsp), %rax
movsd 0xb8(%rax), %xmm0
movq 0x188(%rsp), %rax
movq 0x8(%rax), %rdx
movq 0x188(%rsp), %rax
movq 0x18(%rax), %rcx
callq 0x2ab1f0
movq %rax, 0x178(%rsp)
cmpq $0x0, 0x178(%rsp)
jne 0x58d15
movq 0x5e32bc(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4bd325(%rip), %rsi    # 0x516013
leaq 0x4cda6b(%rip), %rdx    # 0x526760
leaq 0x4cda36(%rip), %rcx    # 0x526732
leaq 0x4cd385(%rip), %r8     # 0x526088
movl $0x353, %r9d            # imm = 0x353
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x58d17
jmp 0x58d19
testb $0x1, 0x197(%rsp)
jne 0x58dac
movq 0x188(%rsp), %rax
movq 0xa0(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x58d6a
movq 0x118(%rsp), %rdi
callq 0x265cd0
testb $0x1, %al
jne 0x58d6a
movq 0x188(%rsp), %rax
movq 0x98(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x58d6a
jmp 0x58daa
movq 0x188(%rsp), %rax
movq 0x70(%rax), %rdi
callq 0x11dee0
movq %rax, %rdx
movq 0x198(%rsp), %rcx
leaq 0x164(%rsp), %rdi
leaq 0x160(%rsp), %rsi
callq 0x2ab530
cmpl $0x0, %eax
je 0x58da8
movb $0x1, 0x197(%rsp)
jmp 0x58daa
jmp 0x58dac
testb $0x1, 0x197(%rsp)
jne 0x58f1a
movq 0x188(%rsp), %rax
movq 0xa0(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x58dd7
jmp 0x58f1a
movq 0x188(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0x2acc50
movq %rax, 0xf8(%rsp)
movaps 0x4bfb39(%rip), %xmm1   # 0x518930
movq 0xf8(%rsp), %xmm0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x4bfb34(%rip), %xmm1   # 0x518940
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq 0x188(%rsp), %rax
movq 0x28(%rax), %rdi
movsd 0x4be411(%rip), %xmm1   # 0x517240
callq 0x24f330
movq %rax, 0x158(%rsp)
movq 0x188(%rsp), %rax
movq 0x40(%rax), %rdi
movq 0x188(%rsp), %rax
movq 0x28(%rax), %rsi
movq 0x188(%rsp), %rax
movq 0x30(%rax), %rdx
movq 0x188(%rsp), %rax
movl (%rax), %eax
movl %eax, %ecx
movq 0xf8(%rsp), %r8
movq 0x188(%rsp), %rax
movsd 0xb8(%rax), %xmm0
movl 0x164(%rsp), %r9d
movl 0x160(%rsp), %r11d
movq 0x188(%rsp), %rax
movq 0x48(%rax), %r10
movq 0x158(%rsp), %rax
xorl %ebx, %ebx
movl %r11d, (%rsp)
movl $0x0, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x2abe10
movq %rax, 0x170(%rsp)
movq 0x188(%rsp), %rax
testb $0x1, 0x56(%rax)
je 0x58ee8
movq 0x170(%rsp), %rdi
callq 0x2ac0e0
movq 0x188(%rsp), %rax
testb $0x1, 0x57(%rax)
je 0x58f18
callq 0x24fb00
movq %rax, 0x110(%rsp)
movq 0x170(%rsp), %rdi
movq 0x110(%rsp), %rsi
callq 0x2ac140
jmp 0x58f1a
testb $0x1, 0x197(%rsp)
jne 0x597aa
movq $0x0, 0xf0(%rsp)
leaq 0xa0(%rsp), %rdi
xorl %esi, %esi
movl $0x50, %edx
callq 0x19360
movq 0x148(%rsp), %rax
movq %rax, 0xb0(%rsp)
movq 0x118(%rsp), %rax
movq %rax, 0xb8(%rsp)
movq 0x118(%rsp), %rdi
callq 0x265cd0
testb $0x1, %al
jne 0x58fec
movq 0x118(%rsp), %rdi
callq 0x265830
testb $0x1, %al
jne 0x58fec
movq 0x118(%rsp), %rdi
callq 0x265850
testb $0x1, %al
jne 0x58fec
movq 0x118(%rsp), %rdi
callq 0x2657f0
testb $0x1, %al
jne 0x58fec
movq 0x118(%rsp), %rdi
callq 0x265810
testb $0x1, %al
jne 0x58fec
movq 0x188(%rsp), %rax
movq 0x98(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x58fda
jmp 0x59184
movq 0x188(%rsp), %rax
testb $0x1, 0x58(%rax)
jne 0x59184
movq 0x118(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x188(%rsp), %rax
movq 0x60(%rax), %rdi
callq 0x11dee0
movq 0x58(%rsp), %rdi
movq %rax, %rsi
movq 0x198(%rsp), %rdx
callq 0x263940
movq %rax, 0x150(%rsp)
cmpq $0x0, 0x150(%rsp)
jne 0x5903a
movb $0x1, 0x197(%rsp)
testb $0x1, 0x197(%rsp)
jne 0x59182
movq 0x188(%rsp), %rax
movq 0x98(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x5907d
movq 0x188(%rsp), %rax
movq 0xa0(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x5907d
jmp 0x59182
movb $0x0, 0x9f(%rsp)
movb $0x0, 0x9e(%rsp)
movq 0x188(%rsp), %rax
movq 0xa0(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x590a7
jmp 0x590ba
movq 0x188(%rsp), %rax
movq 0x48(%rax), %rax
movq %rax, 0x50(%rsp)
jmp 0x590c6
movl $0x64, %eax
movq %rax, 0x50(%rsp)
jmp 0x590c6
movq 0x50(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x150(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x188(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0x2acc50
movq 0x48(%rsp), %rdi
movq %rax, %rsi
movq 0x188(%rsp), %rax
movsd 0xb8(%rax), %xmm0
movq 0x188(%rsp), %rax
movq 0x40(%rax), %rdx
movq 0x188(%rsp), %rax
movq 0x28(%rax), %rcx
movq 0x188(%rsp), %rax
movq 0x30(%rax), %r8
movl 0x164(%rsp), %r9d
movl 0x160(%rsp), %r11d
movq 0x90(%rsp), %r10
movq 0x118(%rsp), %rax
xorl %ebx, %ebx
movsd 0x4be0e9(%rip), %xmm1   # 0x517240
movl %r11d, (%rsp)
movl $0x0, 0x8(%rsp)
movl $0x0, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movl $0x1, 0x20(%rsp)
movq %rax, 0x28(%rsp)
callq 0x263b90
jmp 0x59190
movq $0x0, 0x150(%rsp)
testb $0x1, 0x197(%rsp)
jne 0x59318
callq 0x267320
movq %rax, 0xa8(%rsp)
cmpq $0x0, 0x150(%rsp)
je 0x591cb
movq 0xa8(%rsp), %rdi
movq 0x150(%rsp), %rsi
callq 0x2675a0
movq 0x188(%rsp), %rax
testb $0x1, 0x59(%rax)
je 0x591e6
movq 0xa8(%rsp), %rdi
callq 0x2677c0
movq 0x188(%rsp), %rax
movq 0x98(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x59200
jmp 0x59231
leaq 0x254439(%rip), %rax    # 0x2ad640
movq %rax, 0x140(%rsp)
movq 0x178(%rsp), %rax
movq %rax, 0xa0(%rsp)
leaq 0xa0(%rsp), %rax
movq %rax, 0x138(%rsp)
jmp 0x5927c
movq 0x188(%rsp), %rax
movq 0xa0(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x5924b
jmp 0x5927a
leaq 0x2544be(%rip), %rax    # 0x2ad710
movq %rax, 0x140(%rsp)
movq 0x170(%rsp), %rax
movq %rax, 0xa0(%rsp)
leaq 0xa0(%rsp), %rax
movq %rax, 0x138(%rsp)
jmp 0x5927c
movq 0x118(%rsp), %rdi
callq 0x2658b0
testb $0x1, %al
jne 0x59292
jmp 0x59316
callq 0xb7a40
movq %rax, 0x88(%rsp)
movq 0x88(%rsp), %rdi
callq 0xba7d0
movq 0x88(%rsp), %rdi
callq 0xba9c0
movq 0x88(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x188(%rsp), %rax
movq 0x60(%rax), %rdi
callq 0x11dee0
movq 0x40(%rsp), %rdi
movq %rax, %rsi
movq 0x198(%rsp), %rdx
callq 0xb7aa0
movq %rax, 0xf0(%rsp)
movq 0x88(%rsp), %rdi
callq 0xb7e50
cmpq $0x0, 0xf0(%rsp)
jne 0x59314
movb $0x1, 0x197(%rsp)
jmp 0x59316
jmp 0x59318
testb $0x1, 0x197(%rsp)
jne 0x59655
movq 0x188(%rsp), %rax
movq 0x78(%rax), %rdi
callq 0x11fcc0
cmpq $0x0, %rax
jne 0x59655
movq 0x188(%rsp), %rax
movq 0x68(%rax), %rdi
callq 0x11dfa0
cmpq $0x0, %rax
jne 0x59655
movq 0x188(%rsp), %rax
cmpq $0x0, 0x10(%rax)
jbe 0x593cd
movq 0x188(%rsp), %rax
movq 0x60(%rax), %rdi
callq 0x11dee0
movq %rax, %rdi
movq 0x188(%rsp), %rax
movq 0x10(%rax), %rsi
movq 0x188(%rsp), %rax
movl 0x4(%rax), %edx
movq 0x188(%rsp), %rax
imull $0x64, 0x4(%rax), %eax
movl %eax, %eax
movl %eax, %ecx
movq 0x180(%rsp), %r8
movq 0x198(%rsp), %r9
callq 0x2f1680
cmpl $0x0, %eax
je 0x593c8
movb $0x1, 0x197(%rsp)
jmp 0x59650
testb $0x1, 0x197(%rsp)
jne 0x59522
movq 0x188(%rsp), %rax
testb $0x1, 0x52(%rax)
je 0x59522
movq 0x188(%rsp), %rax
testb $0x1, 0x55(%rax)
je 0x59418
leaq 0x53e(%rip), %rax       # 0x59940
movq %rax, 0x80(%rsp)
movq $0x0, 0x78(%rsp)
jmp 0x594ac
movq 0x188(%rsp), %rax
movq 0x98(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x59432
jmp 0x59453
leaq 0x767(%rip), %rax       # 0x59ba0
movq %rax, 0x80(%rsp)
movq 0x178(%rsp), %rax
movq %rax, 0xa0(%rsp)
jmp 0x5949f
movq 0x188(%rsp), %rax
movq 0xa0(%rax), %rdi
callq 0xf74a0
testb $0x1, %al
jne 0x5946d
jmp 0x5948e
leaq 0x7cc(%rip), %rax       # 0x59c40
movq %rax, 0x80(%rsp)
movq 0x170(%rsp), %rax
movq %rax, 0xa0(%rsp)
jmp 0x5949d
leaq 0x84b(%rip), %rax       # 0x59ce0
movq %rax, 0x80(%rsp)
jmp 0x5949f
leaq 0xa0(%rsp), %rax
movq %rax, 0x78(%rsp)
movq 0x188(%rsp), %rax
movq 0x60(%rax), %rdi
callq 0x11dee0
movq %rax, %rdi
movq 0x188(%rsp), %rax
movl 0x4(%rax), %esi
movq 0x188(%rsp), %rax
movq 0x20(%rax), %rdx
movq 0x188(%rsp), %rax
movb 0x50(%rax), %cl
movq 0x80(%rsp), %r8
movq 0x78(%rsp), %r9
movq 0x180(%rsp), %r10
movq 0x198(%rsp), %rax
andb $0x1, %cl
movzbl %cl, %ecx
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x236070
cmpl $0x0, %eax
je 0x59520
movb $0x1, 0x197(%rsp)
jmp 0x59522
testb $0x1, 0x197(%rsp)
jne 0x5964e
movl $0x1, 0x134(%rsp)
xorl %eax, %eax
testb $0x1, 0x197(%rsp)
movb %al, 0x3f(%rsp)
jne 0x5955a
cmpl $0x3, 0x134(%rsp)
setl %al
movb %al, 0x3f(%rsp)
movb 0x3f(%rsp), %al
testb $0x1, %al
jne 0x59567
jmp 0x5964c
movslq 0x134(%rsp), %rax
testb $0x1, 0x125(%rsp,%rax)
je 0x59634
movq 0xa8(%rsp), %rdi
movslq 0x134(%rsp), %rax
movl 0x128(%rsp,%rax,4), %esi
callq 0x2677a0
movq 0x188(%rsp), %rax
movq 0x60(%rax), %rdi
callq 0x11dee0
movq %rax, %rsi
movslq 0x134(%rsp), %rax
movl 0x128(%rsp,%rax,4), %r8d
movq 0x188(%rsp), %rax
movl 0x4(%rax), %r9d
movq 0x150(%rsp), %r15
movq 0x140(%rsp), %r14
movq 0x138(%rsp), %rbx
movq 0x118(%rsp), %r11
movq 0x180(%rsp), %r10
movq 0x198(%rsp), %rax
movl $0x1, %edi
xorl %ecx, %ecx
movq %rcx, %rdx
movq %r15, (%rsp)
movq %r14, 0x8(%rsp)
movq %rbx, 0x10(%rsp)
movq %r11, 0x18(%rsp)
movq %r10, 0x20(%rsp)
movq %rax, 0x28(%rsp)
callq 0x5a150
cmpl $0x0, %eax
je 0x59632
movb $0x1, 0x197(%rsp)
jmp 0x59634
jmp 0x59636
movl 0x134(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x134(%rsp)
jmp 0x5953b
jmp 0x5964e
jmp 0x59650
jmp 0x59783
movl $0x0, 0x134(%rsp)
xorl %eax, %eax
testb $0x1, 0x197(%rsp)
movb %al, 0x3e(%rsp)
jne 0x5967f
cmpl $0x3, 0x134(%rsp)
setl %al
movb %al, 0x3e(%rsp)
movb 0x3e(%rsp), %al
testb $0x1, %al
jne 0x5968c
jmp 0x59781
movslq 0x134(%rsp), %rax
testb $0x1, 0x125(%rsp,%rax)
je 0x59769
movq 0xa8(%rsp), %rdi
movslq 0x134(%rsp), %rax
movl 0x128(%rsp,%rax,4), %esi
callq 0x2677a0
movq 0x188(%rsp), %rax
movq 0x60(%rax), %rdi
callq 0x11dee0
movq %rax, %rsi
movq 0x188(%rsp), %rax
movq 0x78(%rax), %rdx
movq 0x188(%rsp), %rax
movq 0x68(%rax), %rcx
movslq 0x134(%rsp), %rax
movl 0x128(%rsp,%rax,4), %r8d
movq 0x188(%rsp), %rax
movl 0x4(%rax), %r9d
movq 0x150(%rsp), %r15
movq 0x140(%rsp), %r14
movq 0x138(%rsp), %rbx
movq 0x118(%rsp), %r11
movq 0x180(%rsp), %r10
movq 0x198(%rsp), %rax
xorl %edi, %edi
movq %r15, (%rsp)
movq %r14, 0x8(%rsp)
movq %rbx, 0x10(%rsp)
movq %r11, 0x18(%rsp)
movq %r10, 0x20(%rsp)
movq %rax, 0x28(%rsp)
callq 0x5a150
cmpl $0x0, %eax
je 0x59767
movb $0x1, 0x197(%rsp)
jmp 0x59769
jmp 0x5976b
movl 0x134(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x134(%rsp)
jmp 0x59660
jmp 0x59783
movq 0xf0(%rsp), %rdi
callq 0xae070
movq 0x150(%rsp), %rdi
callq 0x263f10
movq 0xa8(%rsp), %rdi
callq 0x267b60
movq 0x148(%rsp), %rdi
callq 0x25dbc0
movq 0x178(%rsp), %rdi
callq 0x2ab340
movq 0x170(%rsp), %rdi
callq 0x2ac030
movq 0x110(%rsp), %rdi
callq 0x2501b0
movq 0x158(%rsp), %rdi
callq 0x24f9e0
movq 0x180(%rsp), %rdi
callq 0xe7ed0
movq 0x118(%rsp), %rdi
callq 0x265d20
cmpq $0x0, 0x168(%rsp)
je 0x5991f
movq 0x188(%rsp), %rax
movq 0xa0(%rax), %rdi
callq 0xf74a0
movb %al, 0x3d(%rsp)
movq 0x188(%rsp), %rax
movq 0x98(%rax), %rdi
callq 0xf74a0
movb 0x3d(%rsp), %sil
movq 0x188(%rsp), %rcx
movl 0x4(%rcx), %edx
movq 0x188(%rsp), %rcx
movl (%rcx), %ecx
movq 0x188(%rsp), %rdi
movq 0x38(%rdi), %r8
movq 0x188(%rsp), %rdi
movq 0x40(%rdi), %r9
movq 0x188(%rsp), %rdi
movq 0x30(%rdi), %r10
movq 0x188(%rsp), %rdi
movq 0x48(%rdi), %r11
movq 0x188(%rsp), %rdi
movq 0x18(%rdi), %rbx
movq 0x188(%rsp), %rdi
movq 0x8(%rdi), %r14
movq %rsp, %rdi
movq %r14, 0x18(%rdi)
movq %rbx, 0x10(%rdi)
movq %r11, 0x8(%rdi)
movq %r10, (%rdi)
movzbl %sil, %edi
andl $0x1, %edi
movzbl %al, %esi
andl $0x1, %esi
callq 0x2acce0
movq %rax, 0x70(%rsp)
movq 0x70(%rsp), %rsi
leaq 0x4ccea0(%rip), %rdi    # 0x526777
movb $0x0, %al
callq 0x19070
movq 0x70(%rsp), %rdi
leaq 0x4cc79e(%rip), %rsi    # 0x526088
movl $0x469, %edx            # imm = 0x469
callq 0xe88c0
movq 0x168(%rsp), %rdi
movq 0x5e2635(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x4c795c(%rip), %rsi    # 0x521269
callq 0x121520
movq 0x168(%rsp), %rdi
callq 0x121f00
movb 0x197(%rsp), %dl
xorl %eax, %eax
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
testb $0x1, %dl
cmovnel %ecx, %eax
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbx
popq %r14
popq %r15
retq