// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/gff3_parser.c
// Function: process_child
static int process_child(GtGenomeNode *child, GtSplitter *parent_splitter,
                         GtFeatureInfo *feature_info, bool strict,
                         unsigned int last_terminator,
                         GtTypeChecker *type_checker, GtQueue *genome_nodes,
                         GtError *err)
{
  GtStrArray *valid_parents;
  GtGenomeNode* parent_gf;
  GtUword i;
  int had_err = 0;
  gt_error_check(err);
  gt_assert(child && parent_splitter && feature_info && genome_nodes);
  valid_parents = gt_str_array_new();
  for (i = 0; !had_err && i < gt_splitter_size(parent_splitter); i++) {
    const char *parent = gt_splitter_get_token(parent_splitter, i);
    parent_gf = (GtGenomeNode*) gt_feature_info_get(feature_info,
                                                    parent);
    gt_assert(parent_gf);
    if (gt_str_cmp(gt_genome_node_get_seqid(parent_gf),
                        gt_genome_node_get_seqid(child))) {
      gt_error_set(err, "child on line %u in file \"%s\" has different "
                   "sequence id than its parent on line %u ('%s' vs. '%s')",
                   gt_genome_node_get_line_number(child),
                   gt_genome_node_get_filename(child),
                   gt_genome_node_get_line_number(parent_gf),
                   gt_str_get(gt_genome_node_get_seqid(child)),
                   gt_str_get(gt_genome_node_get_seqid(parent_gf)));
      gt_genome_node_delete(child);
      had_err = -1;
    }
    if (!had_err && parent_gf == child) {
      gt_error_set(err, "feature on line %u in file \"%s\" is "
                   "self-referential (%s and %s are the same)",
                   gt_genome_node_get_line_number(child),
                   gt_genome_node_get_filename(child),
                   GT_GFF_PARENT, GT_GFF_ID);
      gt_genome_node_delete(child);
      had_err = -1;
    }
    if (!had_err && gt_genome_node_get_line_number(parent_gf) < last_terminator) {
      gt_error_set(err, "the child with %s \"%s\" on line %u in file "
                   "\"%s\" is separated from its corresponding %s on line %u "
                   "by terminator %s on line %u", GT_GFF_PARENT, parent,
                   gt_genome_node_get_line_number(child),
                   gt_genome_node_get_filename(child), GT_GFF_PARENT,
                   gt_genome_node_get_line_number(parent_gf), GT_GFF_TERMINATOR,
                   last_terminator);
      gt_genome_node_delete(child);
      had_err = -1;
    }
    if (!had_err) {
      if (i)
        child = gt_genome_node_ref(child);
      /* check for cycles (in strict mode, no cycles can occur) */
      if (!strict) {
        GtFeatureNodeIterator *fni;
        GtFeatureNode *node;
        fni = gt_feature_node_iterator_new((GtFeatureNode*) child);
        while (!had_err && (node = gt_feature_node_iterator_next(fni))) {
          if (node == (GtFeatureNode*) parent_gf) {
            gt_error_set(err, "linking the feature on line %u in file \"%s\" "
                         "to its %s with %s \"%s\" would cause a cycle",
                         gt_genome_node_get_line_number(child),
                         gt_genome_node_get_filename(child), GT_GFF_PARENT,
                         GT_GFF_ID, parent);
            gt_genome_node_delete(child);
            had_err = -1;
          }
        }
        gt_feature_node_iterator_delete(fni);
      }
    }
    if (!had_err && type_checker) {
      const char *parent_type, *child_type;
      /* check partof relationships */
      parent_type = gt_feature_node_get_type((GtFeatureNode*) parent_gf);
      child_type = gt_feature_node_get_type((GtFeatureNode*) child);
      if (!gt_type_checker_is_partof(type_checker, parent_type, child_type)) {
        gt_error_set(err, "the child feature with type '%s' on line %u in file "
                     "\"%s\" is not part-of parent feature with type '%s' "
                     "given on line %u (according to type checker '%s')",
                     child_type, gt_genome_node_get_line_number(child),
                     gt_genome_node_get_filename(child), parent_type,
                     gt_genome_node_get_line_number(parent_gf),
                     gt_type_checker_description(type_checker));
        gt_genome_node_delete(child);
        had_err = -1;
      }
    }
    if (!had_err) {
      gt_feature_node_add_child((GtFeatureNode*) parent_gf,
                                (GtFeatureNode*) child);
      gt_str_array_add_cstr(valid_parents, parent);
    }
  }
  if (!had_err) {
    gt_assert(gt_splitter_size(parent_splitter) ==
              gt_str_array_size(valid_parents));
    /* make sure all (valid) parents have the same (pseudo-)root */
    if (gt_str_array_size(valid_parents) >= 2) {
      GtArray *roots = find_roots(valid_parents, feature_info);
      dedup_roots(roots);
      if (roots_differ(roots))
        join_roots(roots, feature_info, genome_nodes);
      gt_array_delete(roots);
    }
  }
  gt_str_array_delete(valid_parents);
  return had_err;
}

// Assembly:
pushq %rbx
subq $0x150, %rsp            # imm = 0x150
movb %cl, %al
movq 0x168(%rsp), %rcx
movq 0x160(%rsp), %rcx
movq %rdi, 0x148(%rsp)
movq %rsi, 0x140(%rsp)
movq %rdx, 0x138(%rsp)
andb $0x1, %al
movb %al, 0x137(%rsp)
movl %r8d, 0x130(%rsp)
movq %r9, 0x128(%rsp)
movl $0x0, 0x10c(%rsp)
cmpq $0x0, 0x168(%rsp)
je 0x3017c
movq 0x168(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0x30144
jmp 0x3017c
movq 0x183e8d(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12df11(%rip), %rsi    # 0x15e066
leaq 0x12e4ec(%rip), %rdx    # 0x15e648
leaq 0x135271(%rip), %rcx    # 0x1653d4
leaq 0x133441(%rip), %r8     # 0x1635ab
movl $0x2ec, %r9d            # imm = 0x2EC
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x3017e
jmp 0x30180
cmpq $0x0, 0x148(%rsp)
je 0x301ac
cmpq $0x0, 0x140(%rsp)
je 0x301ac
cmpq $0x0, 0x138(%rsp)
je 0x301ac
cmpq $0x0, 0x160(%rsp)
jne 0x301e4
movq 0x183e25(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12dea9(%rip), %rsi    # 0x15e066
leaq 0x13521e(%rip), %rdx    # 0x1653e2
leaq 0x135209(%rip), %rcx    # 0x1653d4
leaq 0x1333d9(%rip), %r8     # 0x1635ab
movl $0x2ed, %r9d            # imm = 0x2ED
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x301e6
callq 0x1b020
movq %rax, 0x120(%rsp)
movq $0x0, 0x110(%rsp)
xorl %eax, %eax
cmpl $0x0, 0x10c(%rsp)
movb %al, 0xd7(%rsp)
jne 0x30247
movq 0x110(%rsp), %rax
movq %rax, 0xc8(%rsp)
movq 0x140(%rsp), %rdi
callq 0x17010
movq %rax, %rcx
movq 0xc8(%rsp), %rax
cmpq %rcx, %rax
setb %al
movb %al, 0xd7(%rsp)
movb 0xd7(%rsp), %al
testb $0x1, %al
jne 0x30257
jmp 0x307f3
movq 0x140(%rsp), %rdi
movq 0x110(%rsp), %rsi
callq 0x16f20
movq %rax, 0x100(%rsp)
movq 0x138(%rsp), %rdi
movq 0x100(%rsp), %rsi
callq 0xa6220
movq %rax, 0x118(%rsp)
cmpq $0x0, 0x118(%rsp)
jne 0x302d4
movq 0x183d35(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12ddb9(%rip), %rsi    # 0x15e066
leaq 0x135167(%rip), %rdx    # 0x16541b
leaq 0x135119(%rip), %rcx    # 0x1653d4
leaq 0x1332e9(%rip), %r8     # 0x1635ab
movl $0x2f3, %r9d            # imm = 0x2F3
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x302d6
movq 0x118(%rsp), %rdi
callq 0x258a0
movq %rax, 0xc0(%rsp)
movq 0x148(%rsp), %rdi
callq 0x258a0
movq 0xc0(%rsp), %rdi
movq %rax, %rsi
callq 0x19bd0
cmpl $0x0, %eax
je 0x303e1
movq 0x168(%rsp), %rax
movq %rax, 0x98(%rsp)
movq 0x148(%rsp), %rdi
callq 0x25850
movl %eax, 0xa4(%rsp)
movq 0x148(%rsp), %rdi
callq 0x257c0
movq %rax, 0xa8(%rsp)
movq 0x118(%rsp), %rdi
callq 0x25850
movl %eax, 0xb4(%rsp)
movq 0x148(%rsp), %rdi
callq 0x258a0
movq %rax, %rdi
callq 0x19940
movq %rax, 0xb8(%rsp)
movq 0x118(%rsp), %rdi
callq 0x258a0
movq %rax, %rdi
callq 0x19940
movq 0x98(%rsp), %rdi
movl 0xa4(%rsp), %edx
movq 0xa8(%rsp), %rcx
movl 0xb4(%rsp), %r8d
movq 0xb8(%rsp), %r9
leaq 0x135067(%rip), %rsi    # 0x165425
movq %rax, (%rsp)
movb $0x0, %al
callq 0xc0d0
movq 0x148(%rsp), %rdi
callq 0x26eb0
movl $0xffffffff, 0x10c(%rsp) # imm = 0xFFFFFFFF
cmpl $0x0, 0x10c(%rsp)
jne 0x30478
movq 0x118(%rsp), %rax
cmpq 0x148(%rsp), %rax
jne 0x30478
movq 0x168(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x148(%rsp), %rdi
callq 0x25850
movl %eax, 0x94(%rsp)
movq 0x148(%rsp), %rdi
callq 0x257c0
movq 0x88(%rsp), %rdi
movl 0x94(%rsp), %edx
movq %rax, %rcx
leaq 0x13503d(%rip), %rsi    # 0x165488
leaq 0x1343f1(%rip), %r8     # 0x164843
leaq 0x1343e7(%rip), %r9     # 0x164840
movb $0x0, %al
callq 0xc0d0
movq 0x148(%rsp), %rdi
callq 0x26eb0
movl $0xffffffff, 0x10c(%rsp) # imm = 0xFFFFFFFF
cmpl $0x0, 0x10c(%rsp)
jne 0x30557
movq 0x118(%rsp), %rdi
callq 0x25850
cmpl 0x130(%rsp), %eax
jae 0x30557
movq 0x168(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x100(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x148(%rsp), %rdi
callq 0x25850
movl %eax, 0x7c(%rsp)
movq 0x148(%rsp), %rdi
callq 0x257c0
movq %rax, 0x80(%rsp)
movq 0x118(%rsp), %rdi
callq 0x25850
movq 0x68(%rsp), %rdi
movq 0x70(%rsp), %rcx
movl 0x7c(%rsp), %r8d
movq 0x80(%rsp), %r9
movl %eax, %r11d
movl 0x130(%rsp), %eax
leaq 0x134fc0(%rip), %rsi    # 0x1654d5
leaq 0x134327(%rip), %rbx    # 0x164843
leaq 0x1338e5(%rip), %r10    # 0x163e08
movq %rbx, %rdx
movq %rbx, (%rsp)
movl %r11d, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movl %eax, 0x18(%rsp)
movb $0x0, %al
callq 0xc0d0
movq 0x148(%rsp), %rdi
callq 0x26eb0
movl $0xffffffff, 0x10c(%rsp) # imm = 0xFFFFFFFF
cmpl $0x0, 0x10c(%rsp)
jne 0x30682
cmpq $0x0, 0x110(%rsp)
je 0x30585
movq 0x148(%rsp), %rdi
callq 0x25140
movq %rax, 0x148(%rsp)
testb $0x1, 0x137(%rsp)
jne 0x30680
movq 0x148(%rsp), %rdi
callq 0x248a0
movq %rax, 0xf8(%rsp)
xorl %eax, %eax
cmpl $0x0, 0x10c(%rsp)
movb %al, 0x67(%rsp)
jne 0x305d8
movq 0xf8(%rsp), %rdi
callq 0x24bd0
movq %rax, 0xf0(%rsp)
cmpq $0x0, %rax
setne %al
movb %al, 0x67(%rsp)
movb 0x67(%rsp), %al
testb $0x1, %al
jne 0x305e5
jmp 0x30673
movq 0xf0(%rsp), %rax
cmpq 0x118(%rsp), %rax
jne 0x3066e
movq 0x168(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x148(%rsp), %rdi
callq 0x25850
movl %eax, 0x60(%rsp)
movq 0x148(%rsp), %rdi
callq 0x257c0
movq 0x58(%rsp), %rdi
movl 0x60(%rsp), %edx
movq %rax, %rcx
movq 0x100(%rsp), %rax
leaq 0x134f15(%rip), %rsi    # 0x165552
leaq 0x1341ff(%rip), %r8     # 0x164843
leaq 0x1341f5(%rip), %r9     # 0x164840
movq %rax, (%rsp)
movb $0x0, %al
callq 0xc0d0
movq 0x148(%rsp), %rdi
callq 0x26eb0
movl $0xffffffff, 0x10c(%rsp) # imm = 0xFFFFFFFF
jmp 0x305a8
movq 0xf8(%rsp), %rdi
callq 0x24cf0
jmp 0x30682
cmpl $0x0, 0x10c(%rsp)
jne 0x307a4
cmpq $0x0, 0x128(%rsp)
je 0x307a4
movq 0x118(%rsp), %rdi
callq 0x211d0
movq %rax, 0xe8(%rsp)
movq 0x148(%rsp), %rdi
callq 0x211d0
movq %rax, 0xe0(%rsp)
movq 0x128(%rsp), %rdi
movq 0xe8(%rsp), %rsi
movq 0xe0(%rsp), %rdx
callq 0x39520
testb $0x1, %al
jne 0x307a2
movq 0x168(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x148(%rsp), %rdi
callq 0x25850
movl %eax, 0x3c(%rsp)
movq 0x148(%rsp), %rdi
callq 0x257c0
movq %rax, 0x40(%rsp)
movq 0xe8(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x118(%rsp), %rdi
callq 0x25850
movl %eax, 0x54(%rsp)
movq 0x128(%rsp), %rdi
callq 0x39370
movq 0x28(%rsp), %rdi
movq 0x30(%rsp), %rdx
movl 0x3c(%rsp), %ecx
movq 0x40(%rsp), %r8
movq 0x48(%rsp), %r9
movl 0x54(%rsp), %r10d
leaq 0x134e2f(%rip), %rsi    # 0x1655a9
movl %r10d, (%rsp)
movq %rax, 0x8(%rsp)
movb $0x0, %al
callq 0xc0d0
movq 0x148(%rsp), %rdi
callq 0x26eb0
movl $0xffffffff, 0x10c(%rsp) # imm = 0xFFFFFFFF
jmp 0x307a4
cmpl $0x0, 0x10c(%rsp)
jne 0x307d8
movq 0x118(%rsp), %rdi
movq 0x148(%rsp), %rsi
callq 0x20db0
movq 0x120(%rsp), %rdi
movq 0x100(%rsp), %rsi
callq 0x1b180
jmp 0x307da
movq 0x110(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x110(%rsp)
jmp 0x301ff
cmpl $0x0, 0x10c(%rsp)
jne 0x308e5
jmp 0x30803
movq 0x140(%rsp), %rdi
callq 0x17010
movq %rax, 0x20(%rsp)
movq 0x120(%rsp), %rdi
callq 0x1b720
movq %rax, %rcx
movq 0x20(%rsp), %rax
cmpq %rcx, %rax
je 0x30867
movq 0x1837a2(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x12d826(%rip), %rsi    # 0x15e066
leaq 0x134dfa(%rip), %rdx    # 0x165641
leaq 0x134b86(%rip), %rcx    # 0x1653d4
leaq 0x132d56(%rip), %r8     # 0x1635ab
movl $0x343, %r9d            # imm = 0x343
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x30869
movq 0x120(%rsp), %rdi
callq 0x1b720
cmpq $0x2, %rax
jb 0x308e3
movq 0x120(%rsp), %rdi
movq 0x138(%rsp), %rsi
callq 0x30910
movq %rax, 0xd8(%rsp)
movq 0xd8(%rsp), %rdi
callq 0x309f0
movq 0xd8(%rsp), %rdi
callq 0x30b30
testb $0x1, %al
jne 0x308b9
jmp 0x308d6
movq 0xd8(%rsp), %rdi
movq 0x138(%rsp), %rsi
movq 0x160(%rsp), %rdx
callq 0x30c10
movq 0xd8(%rsp), %rdi
callq 0x770a0
jmp 0x308e5
movq 0x120(%rsp), %rdi
callq 0x1b780
movl 0x10c(%rsp), %eax
addq $0x150, %rsp            # imm = 0x150
popq %rbx
retq
nopw %cs:(%rax,%rax)