// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/tools/gt_readjoiner_graph.c
// Function: gt_readjoiner_graph_runner
static int gt_readjoiner_graph_runner(GT_UNUSED int argc,
    GT_UNUSED const char **argv, GT_UNUSED int parsed_args,
    void *tool_arguments, GtError *err)
{
  GtReadjoinerGraphArguments *arguments = tool_arguments;
  GtLogger *verbose_logger, *default_logger;
  GtEncseqLoader *el;
  GtEncseq *reads;
  GtTimer *timer = NULL;
  GtStrgraph *strgraph = NULL;
  const char *readset = gt_str_get(arguments->readset);
  bool eqlen;
  GtUword nreads, tlen, rlen;
  int had_err = 0;

  gt_assert(arguments);
  gt_error_check(err);

  default_logger = gt_logger_new(!arguments->quiet, GT_LOGGER_DEFLT_PREFIX,
      stdout);
  gt_logger_log(default_logger, "gt readjoiner graph");
  verbose_logger = gt_logger_new(arguments->verbose, GT_LOGGER_DEFLT_PREFIX,
      stdout);
  gt_logger_log(verbose_logger, "verbose output activated");
  gt_logger_log(verbose_logger, "readset name = %s", readset);

  if (arguments->limits)
    gt_strgraph_show_limits();

  if (gt_showtime_enabled())
  {
    timer = gt_timer_new_with_progress_description(
        GT_READJOINER_GRAPH_MSG_LOADSG);
    gt_timer_start(timer);
    gt_timer_show_cpu_time_by_progress(timer);
  }

  el = gt_encseq_loader_new();
  gt_encseq_loader_drop_description_support(el);
  gt_encseq_loader_disable_autosupport(el);
  reads = gt_encseq_loader_load(el, readset, err);
  gt_assert(reads != NULL);
  eqlen = gt_encseq_accesstype_get(reads) == GT_ACCESS_TYPE_EQUALLENGTH;
  nreads = gt_encseq_num_of_sequences(reads);
  gt_logger_log(default_logger, "number of reads in filtered readset = "GT_WU"",
      nreads);
  tlen = gt_encseq_total_length(reads) - nreads + 1;
  gt_logger_log(verbose_logger, "total length of filtered readset = "GT_WU"",
      tlen);

  if (eqlen)
  {
    rlen = gt_encseq_seqlength(reads, 0);
    gt_logger_log(verbose_logger, "read length = "GT_WU"", rlen);
    gt_encseq_delete(reads);
    reads = NULL;
  }
  else
  {
    rlen = 0;
    gt_logger_log(verbose_logger, "read length = variable");
    gt_assert(reads != NULL);
  }

  if (had_err == 0)
  {
    gt_readjoiner_graph_load_graph(&strgraph, reads, readset, rlen,
        default_logger, timer);
  }

  if (had_err == 0)
  {
    if (arguments->eld)
      gt_strgraph_show_edge_lengths_distribution(strgraph, readset,
          GT_READJOINER_SUFFIX_SG_ELEN_DISTRI);
    gt_strgraph_log_stats(strgraph, verbose_logger);
    gt_strgraph_log_space(strgraph);
  }

  if (had_err == 0 && arguments->from)
  {
    GtStrgraphVtype from_vt, to_vt;
    gt_assert(eqlen || (reads != NULL));
    gt_encseq_mirror(reads, err);
    if (arguments->fromB)
      from_vt = GT_STRGRAPH_VTYPE_B;
    else if (arguments->fromE)
      from_vt = GT_STRGRAPH_VTYPE_E;
    else
      from_vt = GT_STRGRAPH_VTYPE_A;
    if (arguments->toB)
      to_vt = GT_STRGRAPH_VTYPE_B;
    else if (arguments->toE)
      to_vt = GT_STRGRAPH_VTYPE_E;
    else
      to_vt = GT_STRGRAPH_VTYPE_A;
    had_err = gt_strgraph_find_connecting_path(strgraph, arguments->from,
        from_vt, arguments->to, to_vt, arguments->minlen, arguments->maxlen,
        arguments->firstonly, readset, GT_READJOINER_SUFFIX_CONNECTING_PATHS,
        verbose_logger, err);
  }

  if (!eqlen && reads != NULL && !arguments->errors)
  {
    gt_encseq_delete(reads);
    reads = NULL;
    if (had_err == 0)
      gt_strgraph_set_encseq(strgraph, NULL);
  }

  if (had_err == 0 && arguments->redtrans)
  {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, GT_READJOINER_GRAPH_MSG_REDTRANS, stdout);
    gt_strgraph_sort_edges_by_len(strgraph, false);
    (void)gt_strgraph_redtrans(strgraph, false);
    (void)gt_strgraph_redself(strgraph, false);
    (void)gt_strgraph_redwithrc(strgraph, false);
    gt_strgraph_log_stats(strgraph, verbose_logger);
  }

  if (had_err == 0 && arguments->errors)
  {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, GT_READJOINER_GRAPH_MSG_CLEANSG, stdout);
    gt_logger_log(default_logger, GT_READJOINER_GRAPH_MSG_CLEANSG);
    had_err = gt_readjoiner_graph_error_correction(strgraph,
        arguments->bubble, arguments->deadend, arguments->deadend_depth,
        verbose_logger);
  }

  if (had_err == 0 && arguments->save)
  {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, GT_READJOINER_GRAPH_MSG_SAVESG, stdout);
    gt_logger_log(default_logger, GT_READJOINER_GRAPH_MSG_SAVESG);
    gt_strgraph_show(strgraph, GT_STRGRAPH_BIN,
        gt_str_get(arguments->readset), GT_READJOINER_SUFFIX_SG, false);
  }

  if (had_err == 0 && arguments->dot)
  {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, GT_READJOINER_GRAPH_MSG_BDOTSG, stdout);
    gt_logger_log(default_logger, GT_READJOINER_GRAPH_MSG_BDOTSG);
    gt_strgraph_show(strgraph, GT_STRGRAPH_DOT_BI,
        gt_str_get(arguments->readset), GT_READJOINER_SUFFIX_SG_BI_DOT, false);
  }

  if (had_err == 0 && arguments->mdot)
  {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, GT_READJOINER_GRAPH_MSG_MDOTSG, stdout);
    gt_logger_log(default_logger, GT_READJOINER_GRAPH_MSG_MDOTSG);
    gt_strgraph_show(strgraph, GT_STRGRAPH_DOT,
        gt_str_get(arguments->readset), GT_READJOINER_SUFFIX_SG_MONO_DOT,
        false);
  }

  if (had_err == 0 && gt_str_array_size(arguments->subgraph) > 0)
  {
    had_err = gt_readjoiner_graph_show_subgraph(strgraph, arguments->subgraph,
        arguments->subgraph_other, arguments->subgraph_depth,
        arguments->subgraph_mono, arguments->subgraph_extend,
        gt_str_get(arguments->readset), default_logger, timer, err);
  }

  if (had_err == 0 && arguments->adj)
  {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, GT_READJOINER_GRAPH_MSG_ADJSG, stdout);
    gt_logger_log(default_logger, GT_READJOINER_GRAPH_MSG_ADJSG);
    gt_strgraph_show(strgraph, GT_STRGRAPH_ADJLIST,
        gt_str_get(arguments->readset), GT_READJOINER_SUFFIX_SG_ADJLIST, false);
  }

  if (had_err == 0 && arguments->spm)
  {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, GT_READJOINER_GRAPH_MSG_SPMSG, stdout);
    gt_logger_log(default_logger, GT_READJOINER_GRAPH_MSG_SPMSG);
    gt_strgraph_show(strgraph, GT_STRGRAPH_SPM,
        gt_str_get(arguments->readset), GT_READJOINER_SUFFIX_SG_SPMLIST, false);
  }

  if (!eqlen && reads != NULL)
  {
    gt_encseq_delete(reads);
    reads = NULL;
    if (had_err == 0)
      gt_strgraph_set_encseq(strgraph, NULL);
  }

  gt_strgraph_delete(strgraph);
  strgraph = NULL;
  gt_assert(reads == NULL);
  gt_encseq_loader_delete(el);

  if (had_err == 0)
  {
    gt_readjoiner_graph_show_current_space("(final)");
  }
  if (gt_showtime_enabled())
  {
    gt_timer_show_progress_final(timer, stdout);
    gt_timer_delete(timer);
  }
  gt_logger_delete(default_logger);
  gt_logger_delete(verbose_logger);
  return had_err;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %r8, %r15
movq %rcx, %r14
movq (%rcx), %rdi
callq 0xad1fa
movq %rax, %rbx
testq %r15, %r15
je 0x3c15f
movq %r15, %rdi
callq 0x89eb7
testb %al, %al
jne 0x3cb8b
movzbl 0xa(%r14), %edi
movq 0x3fbd45(%rip), %r12    # 0x437eb0
movq (%r12), %rdx
xorl $0x1, %edi
movq %r14, 0x38(%rsp)
leaq 0x2aa756(%rip), %r14    # 0x2e68d4
movq %r14, %rsi
callq 0x92b50
movq %rax, %r13
leaq 0x2b7c74(%rip), %rsi    # 0x2f3e04
movq %rax, %rdi
xorl %eax, %eax
callq 0x92e71
movq 0x38(%rsp), %rax
movzbl 0x9(%rax), %edi
movq (%r12), %rdx
movq %r14, %rsi
callq 0x92b50
movq %rax, %r14
leaq 0x2b65da(%rip), %rsi    # 0x2f2793
movq %rax, %rdi
xorl %eax, %eax
callq 0x92e71
leaq 0x2b65e2(%rip), %rsi    # 0x2f27ac
movq %r14, 0x20(%rsp)
movq %r14, %rdi
movq %rbx, %rdx
xorl %eax, %eax
callq 0x92e71
movq 0x38(%rsp), %rax
cmpb $0x1, 0x8(%rax)
jne 0x3c1ec
callq 0x17f617
callq 0xaaf34
testb %al, %al
je 0x3c21b
leaq 0x2b6db1(%rip), %rdi    # 0x2f2fad
callq 0xaf4a5
movq %rax, %r14
movq %rax, %rdi
callq 0xaf4d6
movq %r14, 0x18(%rsp)
movq %r14, %rdi
callq 0xafc4b
jmp 0x3c224
movq $0x0, 0x18(%rsp)
callq 0x791cd
movq %rax, %r14
movq %rax, %rdi
callq 0x7cece
movq %r14, %rdi
callq 0x7d046
movq %r14, 0x88(%rsp)
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, 0x48(%rsp)
movq %r15, %rdx
callq 0x7921d
testq %rax, %rax
je 0x3cb29
movq %rax, %rbp
movq %rax, %rdi
callq 0x81d17
movl %eax, %r12d
movq %rbp, %rdi
callq 0x705a1
movq %rax, %r14
leaq 0x2b6b3a(%rip), %rsi    # 0x2f2dba
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x92e71
movq %rbp, %rdi
callq 0x7055e
subq %r14, %rax
leaq 0x1(%rax), %rdx
leaq 0x2b6b41(%rip), %rsi    # 0x2f2de4
movq 0x20(%rsp), %r15
movq %r15, %rdi
xorl %eax, %eax
callq 0x92e71
movl %r12d, 0x2c(%rsp)
cmpl $0x2, %r12d
jne 0x3c2ea
movq %rbp, %rdi
xorl %esi, %esi
callq 0x75173
movq %rax, %r14
leaq 0x2b6b3a(%rip), %rsi    # 0x2f2e0b
movq %r15, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x92e71
movq %rbp, %rdi
callq 0x735fd
xorl %edi, %edi
jmp 0x3c301
leaq 0x2b6b2c(%rip), %rsi    # 0x2f2e1d
xorl %r14d, %r14d
movq %r15, %rdi
xorl %eax, %eax
callq 0x92e71
movq %rbp, %rdi
leaq 0x2b6b60(%rip), %rcx    # 0x2f2e68
movq %rdi, %rbp
movq %r14, %rsi
movq %rbx, %rdx
callq 0x180082
movq %rax, 0x8(%rsp)
callq 0xaaf34
testb %al, %al
je 0x3c33f
movq 0x3fbb85(%rip), %rax    # 0x437eb0
movq (%rax), %rdx
leaq 0x2b6c78(%rip), %rsi    # 0x2f2fad
movq 0x18(%rsp), %rdi
callq 0xaf86f
leaq 0x2b6c67(%rip), %rsi    # 0x2f2fad
xorl %r15d, %r15d
movq %r13, %rdi
xorl %eax, %eax
callq 0x92e71
leaq 0x2b6c6f(%rip), %rdi    # 0x2f2fc9
callq 0x3cc1f
movq 0x38(%rsp), %r14
cmpb $0x1, 0xd(%r14)
jne 0x3c37f
leaq 0x2b7aa6(%rip), %rdx    # 0x2f3e18
movq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x1850f4
movq 0x8(%rsp), %r12
movq %r12, %rdi
movq 0x20(%rsp), %rsi
callq 0x185d98
movq %r12, %rdi
callq 0x1859c3
cmpq $0x0, 0x40(%r14)
je 0x3c42d
cmpl $0x2, 0x2c(%rsp)
sete %al
testq %rbp, %rbp
setne %cl
orb %al, %cl
je 0x3cbb9
movq %rbp, %rdi
movq 0x48(%rsp), %r15
movq %r15, %rsi
callq 0x7d4ca
xorl %r8d, %r8d
cmpb $0x0, 0x16(%r14)
pushq $0x2
popq %rax
movl $0x0, %edx
jne 0x3c3e5
movzbl 0x18(%r14), %ecx
movl %eax, %edx
subl %ecx, %edx
cmpb $0x0, 0x17(%r14)
jne 0x3c3f6
movzbl 0x19(%r14), %ecx
subl %ecx, %eax
movl %eax, %r8d
movq 0x40(%r14), %rsi
movq 0x48(%r14), %rcx
movq 0x50(%r14), %r9
movzbl 0x15(%r14), %eax
leaq 0x2b7a2b(%rip), %r10    # 0x2f3e39
movq 0x8(%rsp), %rdi
pushq %r15
pushq 0x28(%rsp)
pushq %r10
pushq %rbx
pushq %rax
pushq 0x58(%r14)
callq 0x183869
addq $0x30, %rsp
movl %eax, %r15d
cmpl $0x2, 0x2c(%rsp)
sete %al
movq %rbp, %rdi
testq %rbp, %rbp
sete %cl
orb %al, %cl
jne 0x3c449
cmpb $0x0, 0xb(%r14)
je 0x3c45c
testl %r15d, %r15d
movq 0x3fba5d(%rip), %rbp    # 0x437eb0
je 0x3c47f
xorl %ebx, %ebx
jmp 0x3ca75
callq 0x735fd
testl %r15d, %r15d
movq 0x3fba45(%rip), %rbp    # 0x437eb0
jne 0x3caa8
movq 0x8(%rsp), %rdi
xorl %esi, %esi
callq 0x1811ac
xorl %edi, %edi
movq %rdi, 0x58(%rsp)
cmpb $0x1, 0xc(%r14)
movq 0x20(%rsp), %rbx
jne 0x3c4e6
callq 0xaaf34
testb %al, %al
je 0x3c4ae
movq (%rbp), %rdx
leaq 0x2b652c(%rip), %rsi    # 0x2f29d0
movq 0x18(%rsp), %rdi
callq 0xaf86f
movq 0x8(%rsp), %r15
movq %r15, %rdi
xorl %esi, %esi
callq 0x1813c8
movq %r15, %rdi
xorl %esi, %esi
callq 0x181eb3
movq %r15, %rdi
xorl %esi, %esi
callq 0x1817f9
movq %r15, %rdi
xorl %esi, %esi
callq 0x181bc3
movq %r15, %rdi
movq %rbx, %rsi
callq 0x185d98
cmpb $0x1, 0xb(%r14)
movq %r13, 0x60(%rsp)
jne 0x3c633
callq 0xaaf34
testb %al, %al
je 0x3c514
movq (%rbp), %rdx
leaq 0x2b692a(%rip), %rsi    # 0x2f2e34
movq 0x18(%rsp), %rdi
callq 0xaf86f
leaq 0x2b6919(%rip), %rsi    # 0x2f2e34
movq %r13, %rdi
xorl %eax, %eax
callq 0x92e71
movl 0x1c(%r14), %eax
movl %eax, 0x40(%rsp)
movl 0x20(%r14), %ebx
movl 0x24(%r14), %eax
movq %rax, 0x30(%rsp)
leaq 0x2b6a97(%rip), %rsi    # 0x2f2fd8
movq 0x20(%rsp), %rdi
xorl %eax, %eax
callq 0x92e71
pushq $0x1
popq %r15
leaq 0x2b6a91(%rip), %r12    # 0x2f2fe9
xorl %ebp, %ebp
movq %r15, %r13
xorl %r14d, %r14d
cmpl %ebx, %ebp
jae 0x3c598
testq %r13, %r13
je 0x3c598
movq 0x8(%rsp), %rdi
xorl %esi, %esi
movq %r15, %rdx
xorl %ecx, %ecx
callq 0x1831ac
movq %rax, %r13
addq %rax, %r14
incl %ebp
movq 0x20(%rsp), %rdi
movq %r12, %rsi
movl %ebp, %edx
movq %rax, %rcx
xorl %eax, %eax
callq 0x92e71
jmp 0x3c560
leaq 0x2b6a72(%rip), %rsi    # 0x2f3011
movq 0x20(%rsp), %rbx
movq %rbx, %rdi
movl %ebp, %edx
movq %r14, %rcx
xorl %eax, %eax
callq 0x92e71
leaq 0x2b6a80(%rip), %rsi    # 0x2f303a
movq %rbx, %rdi
xorl %eax, %eax
callq 0x92e71
pushq $0x1
popq %r12
leaq 0x2b6a81(%rip), %r15    # 0x2f3050
xorl %ebp, %ebp
xorl %r14d, %r14d
movq 0x60(%rsp), %r13
cmpl 0x40(%rsp), %ebp
jae 0x3c611
testq %r12, %r12
je 0x3c611
movq 0x8(%rsp), %rdi
movq 0x30(%rsp), %rsi
xorl %edx, %edx
callq 0x182b57
movq %rax, %r12
addq %rax, %r14
incl %ebp
movq %rbx, %rdi
movq %r15, %rsi
movl %ebp, %edx
movq %rax, %rcx
xorl %eax, %eax
callq 0x92e71
jmp 0x3c5d9
leaq 0x2b6a65(%rip), %rsi    # 0x2f307d
movq %rbx, %rdi
movl %ebp, %edx
movq %r14, %rcx
xorl %eax, %eax
callq 0x92e71
movq 0x3fb882(%rip), %rbp    # 0x437eb0
movq 0x38(%rsp), %r14
cmpb $0x1, 0xe(%r14)
jne 0x3c68b
callq 0xaaf34
testb %al, %al
je 0x3c658
movq (%rbp), %rdx
leaq 0x2b6800(%rip), %rsi    # 0x2f2e4e
movq 0x18(%rsp), %rdi
callq 0xaf86f
leaq 0x2b67ef(%rip), %rsi    # 0x2f2e4e
movq %r13, %rdi
xorl %eax, %eax
callq 0x92e71
movq (%r14), %rdi
callq 0xad1fa
leaq 0x2b67f0(%rip), %rcx    # 0x2f2e68
pushq $0x4
popq %rsi
movq 0x8(%rsp), %rdi
movq %rax, %rdx
xorl %r8d, %r8d
callq 0x183f19
cmpb $0x1, 0xf(%r14)
jne 0x3c6e3
callq 0xaaf34
testb %al, %al
je 0x3c6b0
movq (%rbp), %rdx
leaq 0x2b77a0(%rip), %rsi    # 0x2f3e46
movq 0x18(%rsp), %rdi
callq 0xaf86f
leaq 0x2b778f(%rip), %rsi    # 0x2f3e46
movq %r13, %rdi
xorl %eax, %eax
callq 0x92e71
movq (%r14), %rdi
callq 0xad1fa
leaq 0x2b77ab(%rip), %rcx    # 0x2f3e7b
pushq $0x1
popq %rsi
movq 0x8(%rsp), %rdi
movq %rax, %rdx
xorl %r8d, %r8d
callq 0x183f19
cmpb $0x1, 0x10(%r14)
jne 0x3c73a
callq 0xaaf34
testb %al, %al
je 0x3c708
movq (%rbp), %rdx
leaq 0x2b7784(%rip), %rsi    # 0x2f3e82
movq 0x18(%rsp), %rdi
callq 0xaf86f
leaq 0x2b7773(%rip), %rsi    # 0x2f3e82
movq %r13, %rdi
xorl %eax, %eax
callq 0x92e71
movq (%r14), %rdi
callq 0xad1fa
leaq 0x2b7791(%rip), %rcx    # 0x2f3eb9
movq 0x8(%rsp), %rdi
xorl %esi, %esi
movq %rax, %rdx
xorl %r8d, %r8d
callq 0x183f19
movq 0x28(%r14), %rdi
callq 0xae61c
testq %rax, %rax
je 0x3c9b8
movq %rbp, %r13
movq 0x28(%r14), %r12
movq 0x30(%r14), %rbp
movq 0x38(%r14), %rax
movq %rax, 0x78(%rsp)
movzbl 0x13(%r14), %ebx
movb 0x14(%r14), %al
movb %al, 0x17(%rsp)
movq (%r14), %rdi
callq 0xad1fa
movq %rax, %r14
movq %r12, %rdi
callq 0xae61c
movq %rax, %r15
movq %rbp, 0x90(%rsp)
movq %rbp, %rdi
callq 0xae61c
movq %r15, 0x40(%rsp)
testq %r15, %r15
je 0x3cbe7
movq %r14, 0x70(%rsp)
movq %rax, 0x30(%rsp)
movl %ebx, 0x6c(%rsp)
callq 0xaaf34
testb %al, %al
je 0x3c7cd
movq (%r13), %rdx
leaq 0x2b7779(%rip), %rsi    # 0x2f3f3c
movq 0x18(%rsp), %rdi
callq 0xaf86f
leaq 0x2b7768(%rip), %rsi    # 0x2f3f3c
movq 0x60(%rsp), %rdi
xorl %eax, %eax
callq 0x92e71
movq 0x40(%rsp), %rax
leaq (,%rax,8), %rdi
leaq 0x2b708c(%rip), %rsi    # 0x2f3880
movl $0x187, %edx            # imm = 0x187
callq 0x93160
movq %rax, %r15
leaq 0x31fc06(%rip), %r14    # 0x35c40e
pushq $-0x1
popq %r13
movq %rax, 0x80(%rsp)
xorl %ebp, %ebp
xorl %ebx, %ebx
cmpq 0x40(%rsp), %rbp
jae 0x3c864
testl %ebx, %ebx
jne 0x3c864
movq %r12, %rdi
movq %rbp, %rsi
callq 0xae386
xorl %ebx, %ebx
movq %rax, %rdi
movq %r14, %rsi
movq %r15, %rdx
xorl %eax, %eax
callq 0x177b0
cmpl $0x1, %eax
je 0x3c85b
movq 0x48(%rsp), %rdi
leaq 0x2b7718(%rip), %rsi    # 0x2f3f69
xorl %eax, %eax
callq 0x89dbb
movl %r13d, %ebx
incq %rbp
addq $0x8, %r15
jmp 0x3c818
movq 0x30(%rsp), %r15
testq %r15, %r15
je 0x3c8fa
leaq (,%r15,8), %rdi
leaq 0x2b6fff(%rip), %rsi    # 0x2f3880
movl $0x193, %edx            # imm = 0x193
callq 0x93160
movq %rax, %r15
movq %rax, 0x50(%rsp)
leaq 0x31fb74(%rip), %r14    # 0x35c40e
leaq 0x2b76fc(%rip), %r12    # 0x2f3f9d
pushq $-0x1
popq %rbp
xorl %r13d, %r13d
cmpq 0x30(%rsp), %r13
jae 0x3c8f3
testl %ebx, %ebx
jne 0x3c8f3
movq 0x90(%rsp), %rdi
movq %r13, %rsi
callq 0xae386
xorl %ebx, %ebx
movq %rax, %rdi
movq %r14, %rsi
movq %r15, %rdx
xorl %eax, %eax
callq 0x177b0
cmpl $0x1, %eax
je 0x3c8ea
movq 0x48(%rsp), %rdi
movq %r12, %rsi
xorl %eax, %eax
callq 0x89dbb
movl %ebp, %ebx
incq %r13
addq $0x8, %r15
jmp 0x3c8a7
movq 0x30(%rsp), %r15
jmp 0x3c903
movq $0x0, 0x50(%rsp)
testl %ebx, %ebx
movq 0x3fb5a4(%rip), %rbp    # 0x437eb0
movq 0x38(%rsp), %r14
movq 0x48(%rsp), %r11
movq 0x80(%rsp), %r12
je 0x3c92b
pushq $-0x1
popq %r15
movq 0x50(%rsp), %r13
jmp 0x3c980
movl 0x6c(%rsp), %esi
xorl $0x1, %esi
xorl %eax, %eax
movq 0x78(%rsp), %rcx
cmpq $0x1, %rcx
sbbq %rax, %rax
orq %rcx, %rax
subq $0x8, %rsp
movzbl 0x1f(%rsp), %r10d
leaq 0x2b6a55(%rip), %rcx    # 0x2f33a9
movq 0x10(%rsp), %rdi
movq 0x78(%rsp), %rdx
movq %r12, %r8
movq 0x48(%rsp), %r9
pushq %r11
pushq %r10
pushq %rax
pushq %r15
movq 0x78(%rsp), %r13
pushq %r13
callq 0x185398
addq $0x30, %rsp
movl %eax, %r15d
leaq 0x2b6ef9(%rip), %rbx    # 0x2f3880
movq %r12, %rdi
movq %rbx, %rsi
movl $0x1a4, %edx            # imm = 0x1A4
callq 0x936f9
movq %r13, %rdi
movq %rbx, %rsi
movl $0x1a5, %edx            # imm = 0x1A5
callq 0x936f9
testl %r15d, %r15d
movq 0x60(%rsp), %r13
je 0x3c9b8
xorl %ebx, %ebx
jmp 0x3ca70
cmpb $0x1, 0x11(%r14)
jne 0x3ca10
callq 0xaaf34
testb %al, %al
je 0x3c9dd
movq (%rbp), %rdx
leaq 0x2b74ed(%rip), %rsi    # 0x2f3ec0
movq 0x18(%rsp), %rdi
callq 0xaf86f
leaq 0x2b74dc(%rip), %rsi    # 0x2f3ec0
movq %r13, %rdi
xorl %eax, %eax
callq 0x92e71
movq (%r14), %rdi
callq 0xad1fa
leaq 0x2b74df(%rip), %rcx    # 0x2f3edc
pushq $0x3
popq %rsi
movq 0x8(%rsp), %rdi
movq %rax, %rdx
xorl %r8d, %r8d
callq 0x183f19
xorl %r15d, %r15d
movb $0x1, %bl
cmpb $0x1, 0x12(%r14)
jne 0x3ca70
callq 0xaaf34
testb %al, %al
je 0x3ca3a
movq (%rbp), %rdx
leaq 0x2b74b1(%rip), %rsi    # 0x2f3ee1
movq 0x18(%rsp), %rdi
callq 0xaf86f
leaq 0x2b74a0(%rip), %rsi    # 0x2f3ee1
xorl %r15d, %r15d
movq %r13, %rdi
xorl %eax, %eax
callq 0x92e71
movq (%r14), %rdi
callq 0xad1fa
leaq 0x2b749f(%rip), %rcx    # 0x2f3efc
pushq $0x2
popq %rsi
movq 0x8(%rsp), %rdi
movq %rax, %rdx
xorl %r8d, %r8d
callq 0x183f19
movq 0x58(%rsp), %rdi
cmpl $0x2, 0x2c(%rsp)
sete %al
testq %rdi, %rdi
sete %cl
orb %al, %cl
je 0x3ca8c
movq %rdi, %r14
jmp 0x3caad
callq 0x735fd
testb %bl, %bl
je 0x3caa8
xorl %r14d, %r14d
movq 0x8(%rsp), %rdi
xorl %esi, %esi
callq 0x1811ac
movb $0x1, %bl
jmp 0x3caad
xorl %ebx, %ebx
xorl %r14d, %r14d
movq 0x8(%rsp), %rdi
callq 0x17fc58
testq %r14, %r14
jne 0x3cb5a
movq 0x88(%rsp), %rdi
callq 0x79f01
testb %bl, %bl
je 0x3cadd
leaq 0x2b742c(%rip), %rdi    # 0x2f3f04
callq 0x3cc1f
callq 0xaaf34
testb %al, %al
movq 0x20(%rsp), %rbx
je 0x3cb04
movq (%rbp), %rsi
movq 0x18(%rsp), %r14
movq %r14, %rdi
callq 0xafb49
movq %r14, %rdi
callq 0xafc5b
movq %r13, %rdi
callq 0x92fd0
movq %rbx, %rdi
callq 0x92fd0
movl %r15d, %eax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x3fb438(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2a84d9(%rip), %rsi    # 0x2e5013
leaq 0x3104d0(%rip), %rdx    # 0x34d011
leaq 0x2b72a1(%rip), %rcx    # 0x2f3de9
leaq 0x2b6d31(%rip), %r8     # 0x2f3880
movl $0x1d2, %r9d            # imm = 0x1D2
jmp 0x3cc13
movq 0x3fb407(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2a84a8(%rip), %rsi    # 0x2e5013
leaq 0x2b631f(%rip), %rdx    # 0x2f2e91
leaq 0x2b7270(%rip), %rcx    # 0x2f3de9
leaq 0x2b6d00(%rip), %r8     # 0x2f3880
movl $0x26c, %r9d            # imm = 0x26C
jmp 0x3cc13
movq 0x3fb3d6(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2a8477(%rip), %rsi    # 0x2e5013
leaq 0x2a861c(%rip), %rdx    # 0x2e51bf
leaq 0x2b723f(%rip), %rcx    # 0x2f3de9
leaq 0x2b6ccf(%rip), %r8     # 0x2f3880
movl $0x1b9, %r9d            # imm = 0x1B9
jmp 0x3cc13
movq 0x3fb3a8(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2a8449(%rip), %rsi    # 0x2e5013
leaq 0x2b724f(%rip), %rdx    # 0x2f3e20
leaq 0x2b7211(%rip), %rcx    # 0x2f3de9
leaq 0x2b6ca1(%rip), %r8     # 0x2f3880
movl $0x1fb, %r9d            # imm = 0x1FB
jmp 0x3cc13
movq 0x3fb37a(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x2a841b(%rip), %rsi    # 0x2e5013
leaq 0x2b730d(%rip), %rdx    # 0x2f3f0c
leaq 0x2b7314(%rip), %rcx    # 0x2f3f1a
leaq 0x2b6c73(%rip), %r8     # 0x2f3880
movl $0x183, %r9d            # imm = 0x183
xorl %eax, %eax
callq 0x17a50
callq 0x17390