// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/ltr/ltrdigest_file_out_stream.c
// Function: gt_ltrfileout_stream_next
int gt_ltrfileout_stream_next(GtNodeStream *ns, GtGenomeNode **gn, GtError *err)
{
  GtLTRdigestFileOutStream *ls;
  GtFeatureNode *fn;
  GtRange lltr_rng = {GT_UNDEF_UWORD, GT_UNDEF_UWORD},
          rltr_rng = {GT_UNDEF_UWORD, GT_UNDEF_UWORD},
          ppt_rng = {GT_UNDEF_UWORD, GT_UNDEF_UWORD},
          pbs_rng = {GT_UNDEF_UWORD, GT_UNDEF_UWORD};
  int had_err;
  GtUword i=0;

  gt_error_check(err);
  ls = gt_ltrdigest_file_out_stream_cast(ns);

  /* initialize this element */
  memset(&ls->element, 0, sizeof (GtLTRElement));

  /* get annotations from parser */
  had_err = gt_node_stream_next(ls->in_stream, gn, err);
  if (!had_err && *gn)
  {
    GtFeatureNodeIterator* gni;
    GtFeatureNode *mygn;

    /* only process feature nodes */
    if (!(fn = gt_feature_node_try_cast(*gn)))
      return 0;

    ls->element.pdomorder = gt_array_new(sizeof (const char*));

    /* fill LTRElement structure from GFF3 subgraph */
    gni = gt_feature_node_iterator_new(fn);
    for (mygn = fn; mygn != NULL; mygn = gt_feature_node_iterator_next(gni))
      (void) gt_genome_node_accept((GtGenomeNode*) mygn,
                                   (GtNodeVisitor*) ls->lv,
                                   err);
    gt_feature_node_iterator_delete(gni);
  }

  if (!had_err && ls->element.mainnode != NULL)
  {
    char desc[GT_MAXFASTAHEADER];
    GtFeatureNode *ltr3, *ltr5;
    GtStr *sdesc, *sreg, *seq;

    /* find sequence in GtEncseq */
    sreg = gt_genome_node_get_seqid((GtGenomeNode*) ls->element.mainnode);

    sdesc = gt_str_new();
    had_err = gt_region_mapping_get_description(ls->rmap, sdesc, sreg, err);

    if (!had_err) {
      GtRange rng;
      int ret = 0;

      ls->element.seqid = gt_calloc((size_t) ls->seqnamelen+1, sizeof (char));
      (void) snprintf(ls->element.seqid,
                      GT_MIN((size_t) gt_str_length(sdesc),
                          (size_t) ls->seqnamelen)+1,
                      "%s", gt_str_get(sdesc));
      gt_cstr_rep(ls->element.seqid, ' ', '_');
      if (gt_str_length(sdesc) > (GtUword) ls->seqnamelen)
        ls->element.seqid[ls->seqnamelen] = '\0';

      ret = gt_ltrelement_format_description(&ls->element,
                                             ls->seqnamelen,
                                             desc,
                                             (size_t) (GT_MAXFASTAHEADER-1));
      if (ret < 0) {
        gt_warning("FASTA header truncated: %s", desc);
      }
      gt_str_delete(sdesc);

      /* output basic retrotransposon data */
      lltr_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.leftLTR);
      rltr_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.rightLTR);
      rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.mainnode);
      gt_file_xprintf(ls->tabout_file,
                      GT_WU"\t"GT_WU"\t"GT_WU"\t%s\t"GT_WU"\t"GT_WU"\t"GT_WU"\t"
                      GT_WU"\t"GT_WU"\t"GT_WU"\t",
                      rng.start, rng.end, gt_ltrelement_length(&ls->element),
                      ls->element.seqid, lltr_rng.start, lltr_rng.end,
                      gt_ltrelement_leftltrlen(&ls->element), rltr_rng.start,
                      rltr_rng.end, gt_ltrelement_rightltrlen(&ls->element));
    }
    seq = gt_str_new();

    /* output TSDs */
    if (!had_err && ls->element.leftTSD != NULL)
    {
      GtRange tsd_rng;
      tsd_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.leftTSD);
      had_err = gt_extract_feature_sequence(seq,
                                       (GtGenomeNode*) ls->element.leftTSD,
                                       gt_symbol(gt_ft_target_site_duplication),
                                       false,
                                       NULL, NULL, ls->rmap, err);
      if (!had_err) {
        gt_file_xprintf(ls->tabout_file,
                         ""GT_WU"\t"GT_WU"\t%s\t",
                         tsd_rng.start,
                         tsd_rng.end,
                         gt_str_get(seq));
      }
    gt_str_reset(seq);
    } else gt_file_xprintf(ls->tabout_file, "\t\t\t");

    if (!had_err && ls->element.rightTSD != NULL)
    {
      GtRange tsd_rng;

      tsd_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.rightTSD);
      had_err = gt_extract_feature_sequence(seq,
                                       (GtGenomeNode*) ls->element.rightTSD,
                                       gt_symbol(gt_ft_target_site_duplication),
                                       false,
                                       NULL, NULL, ls->rmap, err);
      if (!had_err) {
        gt_file_xprintf(ls->tabout_file,
                           ""GT_WU"\t"GT_WU"\t%s\t",
                           tsd_rng.start,
                           tsd_rng.end,
                           gt_str_get(seq));
      }
      gt_str_reset(seq);
    } else gt_file_xprintf(ls->tabout_file, "\t\t\t");

    /* output PPT */
    if (!had_err && ls->element.ppt != NULL)
    {
      GtStrand ppt_strand = gt_feature_node_get_strand(ls->element.ppt);

      ppt_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.ppt);
      had_err = gt_extract_feature_sequence(seq,
                                            (GtGenomeNode*) ls->element.ppt,
                                            gt_symbol(gt_ft_RR_tract), false,
                                            NULL, NULL, ls->rmap, err);
      if (!had_err) {
        gt_fasta_show_entry(desc, gt_str_get(seq), gt_range_length(&ppt_rng),
                            GT_FSWIDTH, ls->pptout_file);
        gt_file_xprintf(ls->tabout_file,
                           ""GT_WU"\t"GT_WU"\t%s\t%c\t%d\t",
                           ppt_rng.start,
                           ppt_rng.end,
                           gt_str_get(seq),
                           GT_STRAND_CHARS[ppt_strand],
                           (ppt_strand == GT_STRAND_FORWARD ?
                               abs((int) (rltr_rng.start - ppt_rng.end)) :
                               abs((int) (lltr_rng.end - ppt_rng.start))));
      }
      gt_str_reset(seq);
    } else gt_file_xprintf(ls->tabout_file, "\t\t\t\t\t");

    /* output PBS */
    if (!had_err && ls->element.pbs != NULL)
    {
      GtStrand pbs_strand;

      pbs_strand = gt_feature_node_get_strand(ls->element.pbs);
      pbs_rng = gt_genome_node_get_range((GtGenomeNode*) ls->element.pbs);
      had_err = gt_extract_feature_sequence(seq,
                                           (GtGenomeNode*) ls->element.pbs,
                                           gt_symbol(gt_ft_primer_binding_site),
                                           false, NULL, NULL, ls->rmap, err);
      if (!had_err) {
        gt_fasta_show_entry(desc, gt_str_get(seq), gt_range_length(&pbs_rng),
                            GT_FSWIDTH, ls->pbsout_file);
        gt_file_xprintf(ls->tabout_file,
                         ""GT_WU"\t"GT_WU"\t%c\t%s\t%s\t%s\t%s\t%s\t",
                         pbs_rng.start,
                         pbs_rng.end,
                         GT_STRAND_CHARS[pbs_strand],
                         gt_feature_node_get_attribute(ls->element.pbs, "trna"),
                         gt_str_get(seq),
                         gt_feature_node_get_attribute(ls->element.pbs,
                                                       "pbsoffset"),
                         gt_feature_node_get_attribute(ls->element.pbs,
                                                       "trnaoffset"),
                         gt_feature_node_get_attribute(ls->element.pbs,
                                                       "edist"));
      }
      gt_str_reset(seq);
    } else gt_file_xprintf(ls->tabout_file, "\t\t\t\t\t\t\t\t");

    /* output protein domains */
    if (!had_err && ls->element.pdoms != NULL)
    {
      GtStr *pdomorderstr = gt_str_new();
      for (i=0; !had_err && i<gt_array_size(ls->element.pdomorder); i++)
      {
        const char* key = *(const char**) gt_array_get(ls->element.pdomorder,
                                                       i);
        GtArray *entry = (GtArray*) gt_hashmap_get(ls->element.pdoms, key);
        had_err = write_pdom(ls, entry, key, ls->rmap, desc, err);
      }

      if (GT_STRAND_REVERSE == gt_feature_node_get_strand(ls->element.mainnode))
        gt_array_reverse(ls->element.pdomorder);

      for (i=0 ;!had_err && i<gt_array_size(ls->element.pdomorder); i++)
      {
        const char* name = *(const char**) gt_array_get(ls->element.pdomorder,
                                                        i);
        gt_str_append_cstr(pdomorderstr, name);
        if (i != gt_array_size(ls->element.pdomorder)-1)
          gt_str_append_cstr(pdomorderstr, "/");
      }
      gt_file_xprintf(ls->tabout_file, "%s", gt_str_get(pdomorderstr));
      gt_str_delete(pdomorderstr);
    }

    /* output LTRs (we just expect them to exist) */
    switch (gt_feature_node_get_strand(ls->element.mainnode))
    {
      case GT_STRAND_REVERSE:
        ltr5 = ls->element.rightLTR;
        ltr3 = ls->element.leftLTR;
        break;
      case GT_STRAND_FORWARD:
      default:
        ltr5 = ls->element.leftLTR;
        ltr3 = ls->element.rightLTR;
        break;
    }

    if (!had_err) {
      had_err = gt_extract_feature_sequence(seq, (GtGenomeNode*) ltr5,
                                          gt_symbol(gt_ft_long_terminal_repeat),
                                          false,
                                          NULL, NULL, ls->rmap, err);
    }
    if (!had_err) {
      gt_fasta_show_entry(desc, gt_str_get(seq), gt_str_length(seq),
                          GT_FSWIDTH, ls->ltr5out_file);
      gt_str_reset(seq);
    }
    if (!had_err) {
      had_err = gt_extract_feature_sequence(seq, (GtGenomeNode*) ltr3,
                                          gt_symbol(gt_ft_long_terminal_repeat),
                                          false,
                                          NULL, NULL, ls->rmap, err);
    }
    if (!had_err) {
      gt_fasta_show_entry(desc, gt_str_get(seq), gt_str_length(seq),
                          GT_FSWIDTH, ls->ltr3out_file);
      gt_str_reset(seq);
    }

    /* output complete oriented element */
    if (!had_err) {
      had_err = gt_extract_feature_sequence(seq,
                                           (GtGenomeNode*) ls->element.mainnode,
                                           gt_symbol(gt_ft_LTR_retrotransposon),
                                           false,
                                           NULL, NULL, ls->rmap, err);
    }
    if (!had_err) {
      gt_fasta_show_entry(desc,gt_str_get(seq), gt_str_length(seq),
                          GT_FSWIDTH, ls->elemout_file);
      gt_str_reset(seq);
    }
    gt_file_xprintf(ls->tabout_file, "\n");
    gt_str_delete(seq);
  }
  gt_hashmap_delete(ls->element.pdoms);
  gt_array_delete(ls->element.pdomorder);
  gt_free(ls->element.seqid);
  return had_err;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x22b8, %rsp           # imm = 0x22B8
movq %rdx, %r15
movq %rsi, %rbx
movq %rdi, %r14
pcmpeqd %xmm0, %xmm0
movdqa %xmm0, 0x60(%rsp)
movdqa %xmm0, 0x50(%rsp)
testq %rdx, %rdx
je 0x21302d
movq %r15, %rdi
callq 0x101a9a
testb %al, %al
jne 0x213f17
callq 0x213f35
movq %rax, %rdi
movq %r14, %rsi
callq 0x16ae64
movq %rax, %r12
pxor %xmm0, %xmm0
movdqu %xmm0, 0x68(%rax)
movdqu %xmm0, 0x78(%rax)
movdqu %xmm0, 0x88(%rax)
movdqu %xmm0, 0x98(%rax)
movdqu %xmm0, 0xa8(%rax)
movdqu %xmm0, 0xb8(%rax)
movdqu %xmm0, 0xc8(%rax)
movq 0x10(%rax), %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x16ace8
movl %eax, %r14d
testl %eax, %eax
jne 0x213ec5
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2130ee
callq 0x14aefc
testq %rax, %rax
je 0x213355
movq %rax, %rbx
movl $0x8, %edi
callq 0xd46fc
movq %rax, 0xc8(%r12)
movq %rbx, %rdi
callq 0x14b1a8
movq %rax, %r14
movq 0x58(%r12), %rsi
movq %rbx, %rdi
movq %r15, %rdx
callq 0x14b992
movq %r14, %rdi
callq 0x14b33e
movq %rax, %rbx
testq %rax, %rax
jne 0x2130c6
movq %r14, %rdi
callq 0x14b3d0
cmpq $0x0, 0x88(%r12)
je 0x21334d
movq 0x88(%r12), %rdi
callq 0x14b89b
movq %rax, %rbx
callq 0x1208f8
movq %rax, %r14
movq 0x18(%r12), %rdi
movq %rax, %rsi
movq %rbx, %rdx
movq %r15, 0x10(%rsp)
movq %r15, %rcx
callq 0x176433
movl %eax, %ebx
movq $-0x1, %r15
movq $-0x1, %r13
testl %eax, %eax
jne 0x213322
movq %rbx, %rbp
movl 0x64(%r12), %edi
incq %rdi
leaq 0x1b5e74(%rip), %rdx    # 0x3c8fcb
movl $0x1, %esi
movl $0x1a6, %ecx            # imm = 0x1A6
callq 0x1093ef
movq %rax, %rbx
movq %rax, 0xc0(%r12)
movq %r14, %rdi
callq 0x120d4c
movl 0x64(%r12), %r15d
cmpq %r15, %rax
jae 0x21318e
movq %r14, %rdi
callq 0x120d4c
movq %rax, %r15
incq %r15
movq %r14, %rdi
callq 0x120d23
leaq 0x1bf031(%rip), %rdx    # 0x3d21d1
movq %rbx, %rdi
movq %r15, %rsi
movq %rax, %rcx
xorl %eax, %eax
callq 0x17c60
movq 0xc0(%r12), %rdi
movl $0x20, %esi
movl $0x5f, %edx
callq 0xe87ec
movq %r14, %rdi
callq 0x120d4c
movl 0x64(%r12), %ecx
cmpq %rcx, %rax
jbe 0x2131e5
movq 0xc0(%r12), %rax
movb $0x0, (%rax,%rcx)
movl 0x64(%r12), %r15d
movl $0x1fff, %esi           # imm = 0x1FFF
cmpl %esi, %r15d
cmovbl %r15d, %esi
incl %esi
movq 0xc0(%r12), %rcx
leaq 0x1befca(%rip), %rdx    # 0x3d21d1
leaq 0x2b0(%rsp), %rbx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x17c60
incl %r15d
movb $0x0, 0x2b0(%rsp,%r15)
movq %rbx, %rdi
movl $0x20, %esi
movl $0x5f, %edx
callq 0xe87ec
movq 0x70(%r12), %r8
movq 0x78(%r12), %r9
incq %r8
incq %r9
leaq 0x1b5c50(%rip), %rdx    # 0x3c8e9e
leaq 0xb0(%rsp), %rdi
movl $0xff, %esi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x17c60
testl %eax, %eax
jns 0x21327f
leaq 0x1b5d7f(%rip), %rdi    # 0x3c8fef
leaq 0xb0(%rsp), %rsi
xorl %eax, %eax
callq 0x125448
movq %r14, %rdi
callq 0x121b03
movq 0x90(%r12), %rdi
callq 0x14b8df
movq %rax, %rbx
movq %rdx, %r13
movq 0x98(%r12), %rdi
callq 0x14b8df
movq %rax, %r15
movq %rdx, %r14
movq 0x88(%r12), %rdi
callq 0x14b8df
movq %rdx, %rcx
movq 0x68(%r12), %r10
movq 0x70(%r12), %rdx
subq %rdx, %r10
jb 0x213f2b
movq 0x78(%r12), %r8
movq %r8, %r11
subq 0x80(%r12), %r11
jb 0x213f30
movq 0x28(%r12), %rdi
incq %r10
movq 0xc0(%r12), %r9
subq %rdx, %r8
incq %r8
incq %r11
leaq 0x1b5d04(%rip), %rsi    # 0x3c900a
movq %rax, %rdx
xorl %eax, %eax
pushq %r11
pushq %r14
pushq %r15
pushq %r10
pushq %r13
pushq %rbx
callq 0x103d21
addq $0x30, %rsp
movq %rbp, %rbx
callq 0x1208f8
movq %rax, %rbp
testl %ebx, %ebx
movq %r12, (%rsp)
movq %rbx, %r14
je 0x21335d
movq 0x28(%r12), %rdi
leaq 0x1b5d51(%rip), %rsi    # 0x3c9092
xorl %eax, %eax
callq 0x103d21
jmp 0x2133f4
xorl %r14d, %r14d
jmp 0x213ec5
xorl %r14d, %r14d
jmp 0x213ef8
movq 0xa0(%r12), %rdi
testq %rdi, %rdi
je 0x213335
callq 0x14b8df
movq %rax, %rbx
movq %rdx, 0x8(%rsp)
movq (%rsp), %rax
movq 0xa0(%rax), %r12
leaq 0x18ca9a(%rip), %rdi    # 0x39fe23
callq 0x12234f
movq %rbp, %rdi
movq %r12, %rsi
movq (%rsp), %r12
movq %rax, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
pushq 0x10(%rsp)
pushq 0x18(%r12)
callq 0x307764
addq $0x10, %rsp
movq %rax, %r14
testl %eax, %eax
jne 0x2133ec
movq (%rsp), %rax
movq 0x28(%rax), %r12
movq %rbp, %rdi
callq 0x120d23
leaq 0x1b5c5f(%rip), %rsi    # 0x3c9032
movq %r12, %rdi
movq (%rsp), %r12
movq %rbx, %rdx
movq 0x8(%rsp), %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x103d21
movq %rbp, %rdi
callq 0x120db4
testl %r14d, %r14d
je 0x213411
movq 0x28(%r12), %rdi
leaq 0x1b5c8d(%rip), %rsi    # 0x3c9092
xorl %eax, %eax
callq 0x103d21
jmp 0x2134a8
movq 0xa8(%r12), %rdi
testq %rdi, %rdi
je 0x2133f9
callq 0x14b8df
movq %rax, %rbx
movq %rdx, 0x8(%rsp)
movq (%rsp), %rax
movq 0xa8(%rax), %r12
leaq 0x18c9e6(%rip), %rdi    # 0x39fe23
callq 0x12234f
movq %rbp, %rdi
movq %r12, %rsi
movq (%rsp), %r12
movq %rax, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
pushq 0x10(%rsp)
pushq 0x18(%r12)
callq 0x307764
addq $0x10, %rsp
movq %rax, %r14
testl %eax, %eax
jne 0x2134a0
movq (%rsp), %rax
movq 0x28(%rax), %r12
movq %rbp, %rdi
callq 0x120d23
leaq 0x1b5bab(%rip), %rsi    # 0x3c9032
movq %r12, %rdi
movq (%rsp), %r12
movq %rbx, %rdx
movq 0x8(%rsp), %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x103d21
movq %rbp, %rdi
callq 0x120db4
testl %r14d, %r14d
je 0x2134c5
movq 0x28(%r12), %rdi
leaq 0x1b5bd7(%rip), %rsi    # 0x3c9090
xorl %eax, %eax
callq 0x103d21
jmp 0x2135e8
movq 0xb0(%r12), %rdi
testq %rdi, %rdi
je 0x2134ad
callq 0x14970e
movl %eax, 0x18(%rsp)
movq 0xb0(%r12), %rdi
callq 0x14b8df
movq %rax, 0x60(%rsp)
movq %rdx, 0x68(%rsp)
movq 0xb0(%r12), %rbx
leaq 0x1b5b3d(%rip), %rdi    # 0x3c903e
callq 0x12234f
movq %rbp, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
pushq 0x10(%rsp)
pushq 0x18(%r12)
callq 0x307764
addq $0x10, %rsp
movl %eax, %r14d
testl %eax, %eax
jne 0x2135e0
movq %rbp, %rdi
callq 0x120d23
movq %r14, 0x8(%rsp)
movq %rax, %r14
leaq 0x60(%rsp), %rbx
movq %rbx, %rdi
callq 0x117813
movq 0x38(%r12), %r8
leaq 0xb0(%rsp), %rdi
movl $0x3c, %ecx
movq %r14, %rsi
movq %rax, %rdx
callq 0x102ec0
movq 0x28(%r12), %r14
movq (%rbx), %rax
movq %rax, 0x28(%rsp)
movq 0x8(%rbx), %r12
movq %rbp, %rdi
callq 0x120d23
movl 0x18(%rsp), %esi
movl %esi, %ecx
leaq 0x1636f0(%rip), %rdx    # 0x376c84
subl (%rbx), %r13d
subl 0x8(%rbx), %r15d
movsbl (%rcx,%rdx), %r9d
testl %esi, %esi
cmovnel %r13d, %r15d
movl %r15d, %r10d
negl %r10d
cmovsl %r15d, %r10d
subq $0x8, %rsp
leaq 0x1b5a8c(%rip), %rsi    # 0x3c9047
movq %r14, %rdi
movq 0x10(%rsp), %r14
movq 0x30(%rsp), %rdx
movq %r12, %rcx
movq 0x8(%rsp), %r12
movq %rax, %r8
xorl %eax, %eax
pushq %r10
callq 0x103d21
addq $0x10, %rsp
movq %rbp, %rdi
callq 0x120db4
testl %r14d, %r14d
movq 0x10(%rsp), %r13
je 0x21360a
movq 0x28(%r12), %rdi
leaq 0x1b5a8f(%rip), %rsi    # 0x3c908d
xorl %eax, %eax
callq 0x103d21
jmp 0x213791
movq 0xb8(%r12), %rdi
testq %rdi, %rdi
je 0x2135f2
callq 0x14970e
movl %eax, %ebx
movq 0xb8(%r12), %rdi
callq 0x14b8df
movq %rax, 0x50(%rsp)
movq %rdx, 0x58(%rsp)
movq 0xb8(%r12), %r14
leaq 0x1b5a15(%rip), %rdi    # 0x3c9059
callq 0x12234f
movq %rbp, %rdi
movq %r14, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
pushq %r13
pushq 0x18(%r12)
callq 0x307764
addq $0x10, %rsp
movl %eax, %r14d
testl %eax, %eax
jne 0x213789
movq %rbp, %rdi
callq 0x120d23
movq %r14, 0x8(%rsp)
movq %rax, %r14
leaq 0x50(%rsp), %r15
movq %r15, %rdi
callq 0x117813
movq 0x30(%r12), %r8
leaq 0xb0(%rsp), %rdi
movl $0x3c, %ecx
movq %r14, %rsi
movq %rax, %rdx
callq 0x102ec0
movq (%r15), %rax
movq %rax, 0x18(%rsp)
movq 0x8(%r15), %rax
movq %rax, 0x28(%rsp)
movl %ebx, %eax
leaq 0x1635bb(%rip), %rcx    # 0x376c84
movsbl (%rax,%rcx), %eax
movl %eax, 0x20(%rsp)
movq (%rsp), %rax
movq 0x28(%rax), %r12
movq (%rsp), %rax
movq 0xb8(%rax), %rdi
leaq 0x1b599d(%rip), %rsi    # 0x3c9088
callq 0x14918c
movq %rax, %rbx
movq %rbp, %rdi
callq 0x120d23
movq %rax, %r13
movq (%rsp), %rax
movq 0xb8(%rax), %rdi
leaq 0x1b4827(%rip), %rsi    # 0x3c7f37
callq 0x14918c
movq %rax, %r14
movq (%rsp), %rax
movq 0xb8(%rax), %rdi
leaq 0x1b4845(%rip), %rsi    # 0x3c7f6f
callq 0x14918c
movq %rax, %r15
movq (%rsp), %rax
movq 0xb8(%rax), %rdi
leaq 0x1b5e23(%rip), %rsi    # 0x3c9567
callq 0x14918c
movq %rax, %r10
leaq 0x1b591a(%rip), %rsi    # 0x3c906d
movq %r12, %rdi
movq (%rsp), %r12
movq 0x18(%rsp), %rdx
movq 0x28(%rsp), %rcx
movl 0x20(%rsp), %r8d
movq %rbx, %r9
xorl %eax, %eax
pushq %r10
pushq %r15
pushq %r14
movq 0x20(%rsp), %r14
pushq %r13
movq 0x30(%rsp), %r13
callq 0x103d21
addq $0x20, %rsp
movq %rbp, %rdi
callq 0x120db4
testl %r14d, %r14d
movq %r14, %rbx
jne 0x213d2b
cmpq $0x0, 0xd0(%r12)
je 0x213c5f
movq %rbp, 0x78(%rsp)
callq 0x1208f8
movq %rax, 0x30(%rsp)
movq 0xc8(%r12), %rdi
callq 0xd4a9a
testq %rax, %rax
je 0x213c66
xorl %esi, %esi
movq 0xc8(%r12), %rdi
movq %rsi, 0x80(%rsp)
callq 0xd47ba
movq (%rax), %r14
movq 0xd0(%r12), %rdi
movq %r14, %rsi
callq 0x105a11
movq %rax, %rbp
movq 0x18(%r12), %rax
movq %rax, 0x28(%rsp)
testq %r13, %r13
je 0x21381d
movq %r13, %rdi
callq 0x101a9a
testb %al, %al
jne 0x213f1c
callq 0x1208f8
movq %rax, 0x18(%rsp)
callq 0x1208f8
movq %rax, 0x38(%rsp)
movq 0x20(%r12), %rcx
movl $0xff, %esi
leaq 0x1b0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x1b5dc7(%rip), %rdx    # 0x3c9614
movq %r14, %r8
xorl %eax, %eax
callq 0x17c60
movq %rbx, %rdi
leaq 0x1b5dc2(%rip), %r15    # 0x3c9623
movq %r15, %rsi
callq 0x103c28
movq %rax, 0x88(%rsp)
cmpb $0x1, 0xd8(%r12)
jne 0x2138a7
movq 0x20(%r12), %rcx
movl $0xff, %esi
movq %rbx, %rdi
leaq 0x1b5d96(%rip), %rdx    # 0x3c9626
movq %r14, %r8
xorl %eax, %eax
callq 0x17c60
movq %rbx, %rdi
movq %r15, %rsi
callq 0x103c28
jmp 0x2138a9
xorl %eax, %eax
movq %rax, 0x48(%rsp)
cmpb $0x1, 0xd9(%r12)
jne 0x2138f3
movq 0x20(%r12), %rcx
movl $0xff, %esi
leaq 0x1b0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x1b5d60(%rip), %rdx    # 0x3c9635
movq %r14, %r8
xorl %eax, %eax
callq 0x17c60
movq %rbx, %rdi
leaq 0x1b5d3a(%rip), %rsi    # 0x3c9623
callq 0x103c28
movq %rax, %r15
jmp 0x2138f6
xorl %r15d, %r15d
movq %rbp, %rdi
callq 0xd4a9a
cmpq $0x2, %rax
jb 0x213976
movq %rbp, %rdi
callq 0xd4a9a
cmpq $0x2, %rax
jb 0x213957
movl $0x1, %ebx
movq %rbp, %rdi
movq %rbx, %rsi
callq 0xd47ba
movq (%rax), %r14
decq %rbx
movq %rbp, %rdi
movq %rbx, %rsi
callq 0xd47ba
movq (%rax), %rsi
movq %r14, %rdi
callq 0x14b68d
testl %eax, %eax
js 0x213f0d
movq %rbp, %rdi
callq 0xd4a9a
addq $0x2, %rbx
cmpq %rax, %rbx
jb 0x213917
movq %rbp, %rdi
xorl %esi, %esi
callq 0xd47ba
movq (%rax), %rdi
callq 0x14970e
cmpl $0x1, %eax
jne 0x213976
movq %rbp, %rdi
callq 0xd4906
movq %r15, 0x40(%rsp)
movq %rbp, %rdi
callq 0xd4a9a
testq %rax, %rax
je 0x213b58
xorl %r14d, %r14d
xorl %r12d, %r12d
movq $0x0, 0x20(%rsp)
movq %r14, 0x8(%rsp)
movq %rbp, %rdi
movq %r12, %rsi
callq 0xd47ba
movq (%rax), %r15
movq %r15, %rdi
leaq 0x1b5cfb(%rip), %rsi    # 0x3c96b3
callq 0x14be0a
movq %rax, %rbx
movq %r15, %rdi
leaq 0x1b5cf8(%rip), %rsi    # 0x3c96c2
callq 0x14be0a
movq %rax, %r14
movq %r15, %rdi
callq 0x14b8df
movq %rax, 0xa0(%rsp)
movq %rdx, 0xa8(%rsp)
leaq 0x1765e6(%rip), %rdi    # 0x389fd7
callq 0x12234f
movq 0x18(%rsp), %rdi
movq %r15, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
pushq %r13
pushq 0x30(%rsp)
callq 0x307764
addq $0x10, %rsp
movl %eax, %r13d
testl %eax, %eax
je 0x213a2a
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
jmp 0x213b38
movq (%rsp), %rax
cmpb $0x1, 0xd8(%rax)
jne 0x213ae4
testq %rbx, %rbx
je 0x213ae4
movq %r14, 0x98(%rsp)
movq 0x48(%rsp), %r14
testq %r14, %r14
je 0x213f12
movl $0x1fff, %esi           # imm = 0x1FFF
leaq 0x2b0(%rsp), %rdi
leaq 0x1b5c67(%rip), %rdx    # 0x3c96d5
leaq 0xb0(%rsp), %rcx
xorl %eax, %eax
callq 0x17c60
leaq 0x2b0(%rsp), %rdi
callq 0x172f0
movq %r14, %rdi
leaq 0x2b0(%rsp), %rsi
movq %rax, %rdx
callq 0x104060
movq %rbx, %rdi
callq 0x120d23
movq %rax, 0x90(%rsp)
movq %rbx, %rdi
callq 0x120d4c
movq %r14, %rdi
movq 0x90(%rsp), %rsi
movq %rax, %rdx
callq 0x104060
movl $0x5, %edx
movq %r14, %rdi
leaq 0x1b5c44(%rip), %rsi    # 0x3c971b
callq 0x104060
movq 0x98(%rsp), %r14
movq (%rsp), %rax
cmpb $0x1, 0xd9(%rax)
jne 0x213b03
testq %r14, %r14
je 0x213b03
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x120a43
movq %r15, %rdi
leaq 0x1b5ba6(%rip), %rsi    # 0x3c96b3
callq 0x14be36
movq %r15, %rdi
leaq 0x1b5ba6(%rip), %rsi    # 0x3c96c2
callq 0x14be36
leaq 0xa0(%rsp), %rdi
callq 0x117813
addq %rax, 0x20(%rsp)
movq 0x8(%rsp), %r14
testl %r13d, %r13d
jne 0x213b66
incq %r12
movq %rbp, %rdi
callq 0xd4a9a
cmpq %rax, %r12
movq 0x10(%rsp), %r13
jb 0x21399b
jmp 0x213b6b
movq $0x0, 0x20(%rsp)
xorl %r14d, %r14d
jmp 0x213b6b
movq 0x10(%rsp), %r13
testl %r14d, %r14d
movq (%rsp), %r12
movq 0x88(%rsp), %rbp
jne 0x213c00
testq %rbp, %rbp
je 0x213f21
movq 0x18(%rsp), %rdi
callq 0x120d23
movl $0x3c, %ecx
leaq 0xb0(%rsp), %rdi
movq %rax, %rsi
movq 0x20(%rsp), %rdx
movq %rbp, %r8
callq 0x102ec0
cmpb $0x1, 0xd9(%r12)
jne 0x213c00
movq 0x40(%rsp), %rbx
testq %rbx, %rbx
je 0x213f26
movq 0x38(%rsp), %r15
movq %r15, %rdi
callq 0x120d23
movq %rax, 0x8(%rsp)
movq %r15, %rdi
callq 0x120d4c
movl $0x3c, %ecx
leaq 0xb0(%rsp), %rdi
movq 0x8(%rsp), %rsi
movq %rax, %rdx
movq %rbx, %r8
callq 0x102ec0
movq 0x18(%rsp), %rdi
callq 0x121b03
movq 0x38(%rsp), %rdi
callq 0x121b03
movq 0x40(%rsp), %rdi
callq 0x1040fc
movq 0x48(%rsp), %rdi
callq 0x1040fc
movq %rbp, %rdi
callq 0x1040fc
testl %r14d, %r14d
sete %bpl
jne 0x213c6c
movq 0x80(%rsp), %rbx
incq %rbx
movq 0xc8(%r12), %rdi
callq 0xd4a9a
movq %rbx, %rsi
cmpq %rax, %rbx
jb 0x2137d3
jmp 0x213c6c
xorl %ebx, %ebx
jmp 0x213d2b
movb $0x1, %bpl
xorl %r14d, %r14d
movq %r14, %r15
movq 0x88(%r12), %rdi
callq 0x14970e
cmpl $0x1, %eax
jne 0x213c8e
movq 0xc8(%r12), %rdi
callq 0xd4906
testb %bpl, %bpl
je 0x213cf5
xorl %ebx, %ebx
leaq 0x15030f(%rip), %r14    # 0x363fab
movq 0xc8(%r12), %rdi
callq 0xd4a9a
cmpq %rax, %rbx
jae 0x213cf5
movq 0xc8(%r12), %rdi
movq %rbx, %rsi
callq 0xd47ba
movq (%rax), %rsi
movq 0x30(%rsp), %rdi
callq 0x12097f
movq 0xc8(%r12), %rdi
callq 0xd4a9a
decq %rax
cmpq %rax, %rbx
je 0x213ced
movq 0x30(%rsp), %rdi
movq %r14, %rsi
callq 0x12097f
incq %rbx
testb %bpl, %bpl
jne 0x213c9c
movq 0x28(%r12), %rbx
movq 0x30(%rsp), %r14
movq %r14, %rdi
callq 0x120d23
leaq 0x1be4c3(%rip), %rsi    # 0x3d21d1
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x103d21
movq %r14, %rdi
callq 0x121b03
movq 0x78(%rsp), %rbp
movq %r15, %rbx
movq 0x88(%r12), %rdi
callq 0x14970e
xorl %ecx, %ecx
cmpl $0x1, %eax
setne %cl
movq 0x90(%r12,%rcx,8), %r14
testl %ebx, %ebx
jne 0x213d8b
xorl %ecx, %ecx
cmpl $0x1, %eax
sete %cl
movq 0x90(%r12,%rcx,8), %rbx
leaq 0x18cc1b(%rip), %rdi    # 0x3a097e
callq 0x12234f
movq %rbp, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
pushq %r13
pushq 0x18(%r12)
callq 0x307764
addq $0x10, %rsp
movl %eax, %ebx
testl %ebx, %ebx
jne 0x213df6
movq %rbp, %rdi
callq 0x120d23
movq %rax, %rbx
movq %rbp, %rdi
callq 0x120d4c
movq 0x40(%r12), %r8
leaq 0xb0(%rsp), %rdi
movl $0x3c, %ecx
movq %rbx, %rsi
movq %rax, %rdx
callq 0x102ec0
movq %rbp, %rdi
callq 0x120db4
leaq 0x18cbb0(%rip), %rdi    # 0x3a097e
callq 0x12234f
movq %rbp, %rdi
movq %r14, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
pushq %r13
pushq 0x18(%r12)
callq 0x307764
addq $0x10, %rsp
movl %eax, %ebx
testl %ebx, %ebx
movq %rbx, %r14
jne 0x213e6d
movq %rbp, %rdi
callq 0x120d23
movq %rax, %rbx
movq %rbp, %rdi
callq 0x120d4c
movq 0x48(%r12), %r8
leaq 0xb0(%rsp), %rdi
movl $0x3c, %ecx
movq %rbx, %rsi
movq %rax, %rdx
callq 0x102ec0
movq %rbp, %rdi
callq 0x120db4
movq 0x88(%r12), %rbx
leaq 0x18a21a(%rip), %rdi    # 0x39e05e
callq 0x12234f
movq %rbp, %rdi
movq %rbx, %rsi
movq %rax, %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
pushq %r13
pushq 0x18(%r12)
callq 0x307764
addq $0x10, %rsp
movl %eax, %r14d
testl %r14d, %r14d
jne 0x213eaa
movq %rbp, %rdi
callq 0x120d23
movq %rax, %rbx
movq %rbp, %rdi
callq 0x120d4c
movq 0x50(%r12), %r8
leaq 0xb0(%rsp), %rdi
movl $0x3c, %ecx
movq %rbx, %rsi
movq %rax, %rdx
callq 0x102ec0
movq %rbp, %rdi
callq 0x120db4
movq 0x28(%r12), %rdi
leaq 0x1b5869(%rip), %rsi    # 0x3c971f
xorl %eax, %eax
callq 0x103d21
movq %rbp, %rdi
callq 0x121b03
movq 0xd0(%r12), %rdi
callq 0x105f7d
movq 0xc8(%r12), %rdi
callq 0xd4ef4
movq 0xc0(%r12), %rdi
leaq 0x1b50dd(%rip), %rsi    # 0x3c8fcb
movl $0x279, %edx            # imm = 0x279
callq 0x109670
movl %r14d, %eax
addq $0x22b8, %rsp           # imm = 0x22B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x82777
callq 0x827b0
callq 0x82705
callq 0x8273e
callq 0x82822
callq 0x827e9
callq 0x82892
callq 0x8285b