// File: /workspace/github_c_makefile_star2_O0/deplinenoise[P]vlink/t_aout.c
// Function: aout_symbols
static void aout_symbols(struct GlobalVars *gv,struct ObjectUnit *ou,
                         struct aout_hdr *hdr,int be)
/* reads all symbols from an a.out and converts them into internal fmt. */
{
  struct LinkFile *lf = ou->lnkfile;
  struct nlist32 *nlst = (struct nlist32 *)(((char *)hdr) +
                                            aout_symoffset(hdr,be));
  uint32_t symtabsize = read32(be,&hdr->a_syms);
  uint32_t txtaddr = (GETMAGIC(hdr) == ZMAGIC) ? sizeof(struct aout_hdr) : 0;
  uint32_t dataddr = read32(be,hdr->a_text);
  uint32_t bssaddr = dataddr + read32(be,&hdr->a_data);
  int i;

  if (((uint8_t *)nlst < lf->data) || 
      ((uint8_t *)nlst + symtabsize > lf->data + lf->length))
    error(85,lf->pathname,"symbol",lf->objname);  /* illegal offset */

  if (symtabsize % sizeof(struct nlist32) != 0)  /* symtab sanity check */
    error(86,lf->pathname,"symbol",lf->objname,sizeof(struct nlist32));

  check_strtab(lf,hdr,be);  /* strtab sanity check */

  /* read the symbols */
  for (i=0; i<(int)(symtabsize/sizeof(struct nlist32)); i++,nlst++) {
    char *symname,*indirname = NULL;
    uint8_t type=SYM_RELOC,objinfo,objbind;
    uint32_t saddr=0,size=0;
    uint32_t value=read32(be,&nlst->n_value);
    struct Section *sec = NULL;

    symname = get_symname(lf,hdr,be,read32(be,&nlst->n_strx));

    switch (nlst->n_other & 0x0f) {
      case AUX_FUNC:
      case AUX_LABEL: /* @@@ what's label? */
        objinfo = SYMI_FUNC;
        break;
      case AUX_OBJECT:
        objinfo = SYMI_OBJECT;
        break;
      default:
        objinfo = SYMI_NOTYPE;
        break;
    }

    objbind = (nlst->n_type & N_EXT) ? SYMB_GLOBAL : SYMB_LOCAL;
    switch ((nlst->n_other & 0xf0) >> 4) {
      /* seems that local and global are not used in a.out... */
      case BIND_LOCAL:
        /*objbind = SYMB_LOCAL;*/
        break;
      case BIND_GLOBAL:
        /*objbind = SYMB_GLOBAL;*/
        break;
      case BIND_WEAK:
        objbind = SYMB_WEAK;
        break;
      default:  /* illegal binding type */
        error(88,lf->pathname,symname,(nlst->n_other&0xf0)>>4,lf->objname);
        break;
    }

    if (nlst->n_type & N_STAB) {
      /* debugging symbols */

      if (gv->strip_symbols < STRIP_DEBUG) {
        switch (nlst->n_type & N_TYPE) {
          case N_TEXT:
            if (!(sec = find_sect_type(ou,ST_CODE,SP_READ|SP_EXEC)))
              sec = add_section(ou,TEXTNAME,NULL,0,ST_CODE,SF_ALLOC,
                                SP_READ|SP_EXEC,MIN_ALIGNMENT,FALSE);
            saddr = txtaddr;
            break;
          case N_DATA:
            if (!(sec = find_sect_type(ou,ST_DATA,SP_READ|SP_WRITE)))
              sec = add_section(ou,DATANAME,NULL,0,ST_DATA,SF_ALLOC,
                                SP_READ|SP_WRITE,MIN_ALIGNMENT,FALSE);
            saddr = dataddr;
            break;
          case N_BSS:
            if (!(sec = find_sect_type(ou,ST_UDATA,SP_READ|SP_WRITE)))
              sec = add_section(ou,BSSNAME,NULL,0,ST_UDATA,
                                SF_ALLOC|SF_UNINITIALIZED,SP_READ|SP_WRITE,
                                MIN_ALIGNMENT,FALSE);
            saddr = bssaddr;
            break;
        }

        addstabs(ou,sec,symname,nlst->n_type,nlst->n_other,
                 (int16_t)read16(be,&nlst->n_desc),value - saddr);
      }
    }

    else {
      /* normal symbols */

      switch (nlst->n_type & (N_TYPE | N_EXT)) {
        case N_WEAKU:
          objbind = SYMB_WEAK;
          /* fall through */
        case N_UNDF: case N_UNDF | N_EXT:
          if (value) {
            /* undefd. symbol with a value is assumed to be a common symbol */
            sec = common_section(gv,ou);
            type = SYM_COMMON;
            size = value;
            value = MIN_ALIGNMENT;
          }
          /* ignore undefined symbols for now */
          break;

        /* assign a section for ABS and COMMON symbols, to prevent */
        /* accidental NULL-pointer references */
        case N_WEAKA:
          objbind = SYMB_WEAK;
          /* fall through */
        case N_ABS: case N_ABS | N_EXT:
          sec = abs_section(ou);
          type = SYM_ABS;
          break;

#if 0 /* @@@ N_UNDF is used instead? */
        case N_COMM: case N_COMM | N_EXT:
          sec = common_section(gv,ou);
          type = SYM_COMMON;
          size = value;
          break;
#endif

        case N_WEAKT:
          objbind = SYMB_WEAK;
          /* fall through */
        case N_TEXT: case N_TEXT | N_EXT:
          if (!(sec = find_sect_type(ou,ST_CODE,SP_READ|SP_EXEC)))
            sec = add_section(ou,TEXTNAME,NULL,0,ST_CODE,SF_ALLOC,
                              SP_READ|SP_EXEC,MIN_ALIGNMENT,FALSE);
          saddr = txtaddr;
          break;

        case N_WEAKD:
          objbind = SYMB_WEAK;
          /* fall through */
        case N_DATA: case N_DATA | N_EXT:
          if (!(sec = find_sect_type(ou,ST_DATA,SP_READ|SP_WRITE)))
            sec = add_section(ou,DATANAME,NULL,0,ST_DATA,SF_ALLOC,
                              SP_READ|SP_WRITE,MIN_ALIGNMENT,FALSE);
          saddr = dataddr;
          break;

        case N_WEAKB:
          objbind = SYMB_WEAK;
          /* fall through */
        case N_BSS: case N_BSS | N_EXT:
          if (!(sec = find_sect_type(ou,ST_UDATA,SP_READ|SP_WRITE)))
            sec = add_section(ou,BSSNAME,NULL,0,ST_UDATA,
                              SF_ALLOC|SF_UNINITIALIZED,SP_READ|SP_WRITE,
                              MIN_ALIGNMENT,FALSE);
          saddr = bssaddr;
          break;

        case N_INDR: case N_INDR | N_EXT:
          sec = abs_section(ou);
          type = SYM_INDIR;
          indirname = get_symname(lf,hdr,be,
                                  read32(be,&(nlst+1)->n_strx));
          break;

        case N_SIZE:
          /* ignored */
          error(96,lf->pathname,(int)value,lf->objname);
          break;

        case N_FN | N_EXT:
          sec = abs_section(ou);
          type = SYM_ABS;
          objinfo = SYMI_FILE;
          objbind = SYMB_LOCAL;
          break;

        default:
          ierror("aout_symbols(): Symbol %s in %s has type %d, "
                 "which is currently not supported",
                 symname,lf->pathname,nlst->n_type&N_TYPE);
          break;
      }

      if (sec) {
        /* check for symbol size: following symbol has to be type = N_SIZE */
        /* and the same symbol name */
        if ((i+1)<(int)(symtabsize/sizeof(struct nlist32)) &&
            ((nlst+1)->n_type & N_TYPE) == N_SIZE) {
          if (!strcmp(symname,get_symname(lf,hdr,be,
                      read32(be,&(nlst+1)->n_strx)))) {
            i++;  /* skip symbol */
            nlst++;
            size = read32(be,&nlst->n_value);
          }
        }

        /* convert a.out specific file offset into a section offset */
        value -= saddr;

        /* add a new symbol definition */
        if (objbind == SYMB_LOCAL) {
          addlocsymbol(gv,sec,symname,indirname,(int32_t)value,
                       type,0,objinfo,size);
        }
        else {
          addsymbol(gv,sec,symname,indirname,(int32_t)value,
                    type,0,objinfo,objbind,size,TRUE);
        }
      }
    }
  }
}

// Assembly:
pushq %rbx
subq $0x140, %rsp            # imm = 0x140
movq %rdi, 0x138(%rsp)
movq %rsi, 0x130(%rsp)
movq %rdx, 0x128(%rsp)
movl %ecx, 0x124(%rsp)
movq 0x130(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x118(%rsp)
movq 0x128(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq 0x128(%rsp), %rdi
movl 0x124(%rsp), %esi
callq 0x2eff0
movl %eax, %ecx
movq 0xc0(%rsp), %rax
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, 0x110(%rsp)
movl 0x124(%rsp), %edi
movq 0x128(%rsp), %rsi
addq $0x10, %rsi
callq 0x8060
movl %eax, 0x10c(%rsp)
movq 0x128(%rsp), %rdi
callq 0x7a00
movl %eax, %edx
andl $0xffff, %edx           # imm = 0xFFFF
xorl %eax, %eax
movl $0x20, %ecx
cmpl $0x10b, %edx            # imm = 0x10B
cmoveq %rcx, %rax
movl %eax, 0x108(%rsp)
movl 0x124(%rsp), %edi
movq 0x128(%rsp), %rsi
addq $0x4, %rsi
callq 0x8060
movl %eax, 0x104(%rsp)
movl 0x104(%rsp), %eax
movl %eax, 0xcc(%rsp)
movl 0x124(%rsp), %edi
movq 0x128(%rsp), %rsi
addq $0x8, %rsi
callq 0x8060
movl %eax, %ecx
movl 0xcc(%rsp), %eax
addl %ecx, %eax
movl %eax, 0x100(%rsp)
movq 0x110(%rsp), %rax
movq 0x118(%rsp), %rcx
cmpq 0x28(%rcx), %rax
jb 0x2c51e
movq 0x110(%rsp), %rax
movl 0x10c(%rsp), %ecx
addq %rcx, %rax
movq 0x118(%rsp), %rcx
movq 0x28(%rcx), %rcx
movq 0x118(%rsp), %rdx
addq 0x30(%rdx), %rcx
cmpq %rcx, %rax
jbe 0x2c549
movq 0x118(%rsp), %rax
movq 0x10(%rax), %rsi
movq 0x118(%rsp), %rax
movq 0x20(%rax), %rcx
movl $0x55, %edi
leaq 0x81b5(%rip), %rdx      # 0x346f7
movb $0x0, %al
callq 0x8c00
movl 0x10c(%rsp), %eax
movl $0xc, %ecx
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
je 0x2c591
movq 0x118(%rsp), %rax
movq 0x10(%rax), %rsi
movq 0x118(%rsp), %rax
movq 0x20(%rax), %rcx
movl $0x56, %edi
leaq 0x8173(%rip), %rdx      # 0x346f7
movl $0xc, %r8d
movb $0x0, %al
callq 0x8c00
movq 0x118(%rsp), %rdi
movq 0x128(%rsp), %rsi
movl 0x124(%rsp), %edx
callq 0x2f210
movl $0x0, 0xfc(%rsp)
movl 0xfc(%rsp), %eax
movl %eax, 0xbc(%rsp)
movl 0x10c(%rsp), %eax
movl $0xc, %ecx
xorl %edx, %edx
divq %rcx
movq %rax, %rcx
movl 0xbc(%rsp), %eax
cmpl %ecx, %eax
jge 0x2cfa2
movq $0x0, 0xe8(%rsp)
movb $0x2, 0xe7(%rsp)
movl $0x0, 0xe0(%rsp)
movl $0x0, 0xdc(%rsp)
movl 0x124(%rsp), %edi
movq 0x110(%rsp), %rsi
addq $0x8, %rsi
callq 0x8060
movl %eax, 0xd8(%rsp)
movq $0x0, 0xd0(%rsp)
movq 0x118(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq 0x128(%rsp), %rax
movq %rax, 0xa8(%rsp)
movl 0x124(%rsp), %edi
movl %edi, 0xb4(%rsp)
movq 0x110(%rsp), %rsi
callq 0x8060
movq 0xa0(%rsp), %rdi
movq 0xa8(%rsp), %rsi
movl 0xb4(%rsp), %edx
movl %eax, %ecx
callq 0x2f2c0
movq %rax, 0xf0(%rsp)
movq 0x110(%rsp), %rax
movzbl 0x5(%rax), %eax
andl $0xf, %eax
movl %eax, 0xb8(%rsp)
subl $0x1, %eax
je 0x2c6d7
jmp 0x2c6bc
movl 0xb8(%rsp), %eax
addl $-0x2, %eax
subl $0x1, %eax
ja 0x2c6e1
jmp 0x2c6cd
movb $0x2, 0xe6(%rsp)
jmp 0x2c6e9
movb $0x1, 0xe6(%rsp)
jmp 0x2c6e9
movb $0x0, 0xe6(%rsp)
movq 0x110(%rsp), %rax
movb 0x4(%rax), %al
andb $0x1, %al
incb %al
movb %al, 0xe5(%rsp)
movq 0x110(%rsp), %rax
movzbl 0x5(%rax), %eax
shrl $0x4, %eax
movl %eax, 0x9c(%rsp)
testl %eax, %eax
je 0x2c737
jmp 0x2c71b
movl 0x9c(%rsp), %eax
subl $0x1, %eax
je 0x2c739
jmp 0x2c729
movl 0x9c(%rsp), %eax
subl $0x2, %eax
je 0x2c73b
jmp 0x2c745
jmp 0x2c786
jmp 0x2c786
movb $0x3, 0xe5(%rsp)
jmp 0x2c786
movq 0x118(%rsp), %rax
movq 0x10(%rax), %rsi
movq 0xf0(%rsp), %rdx
movq 0x110(%rsp), %rax
movsbl 0x5(%rax), %ecx
andl $0xf0, %ecx
sarl $0x4, %ecx
movq 0x118(%rsp), %rax
movq 0x20(%rax), %r8
movl $0x58, %edi
movb $0x0, %al
callq 0x8c00
movq 0x110(%rsp), %rax
movzbl 0x4(%rax), %eax
andl $0xe0, %eax
cmpl $0x0, %eax
je 0x2ca1f
movq 0x138(%rsp), %rax
movzbl 0x6c(%rax), %eax
cmpl $0x1, %eax
jge 0x2ca1a
movq 0x110(%rsp), %rax
movzbl 0x4(%rax), %eax
andl $0x1e, %eax
movl %eax, 0x98(%rsp)
subl $0x4, %eax
je 0x2c7f9
jmp 0x2c7d2
movl 0x98(%rsp), %eax
subl $0x6, %eax
je 0x2c876
jmp 0x2c7e4
movl 0x98(%rsp), %eax
subl $0x8, %eax
je 0x2c8f3
jmp 0x2c968
movq 0x130(%rsp), %rdi
movl $0x1, %esi
movl $0x5, %edx
callq 0x11f40
movq %rax, 0xd0(%rsp)
cmpq $0x0, %rax
jne 0x2c863
movq 0x130(%rsp), %rdi
leaq 0x8d73(%rip), %rsi      # 0x355a0
xorl %eax, %eax
movl %eax, %ecx
movl $0x1, %r9d
xorl %eax, %eax
movq %rcx, %rdx
movl %r9d, %r8d
movl $0x5, (%rsp)
movl $0x2, 0x8(%rsp)
movl $0x0, 0x10(%rsp)
callq 0x12660
movq %rax, 0xd0(%rsp)
movl 0x108(%rsp), %eax
movl %eax, 0xe0(%rsp)
jmp 0x2c968
movq 0x130(%rsp), %rdi
movl $0x2, %esi
movl $0x3, %edx
callq 0x11f40
movq %rax, 0xd0(%rsp)
cmpq $0x0, %rax
jne 0x2c8e3
movq 0x130(%rsp), %rdi
leaq 0x8cfc(%rip), %rsi      # 0x355a6
xorl %eax, %eax
movl %eax, %ecx
movl $0x2, %r8d
movl $0x1, %r9d
xorl %eax, %eax
movq %rcx, %rdx
movl $0x3, (%rsp)
movl $0x2, 0x8(%rsp)
movl $0x0, 0x10(%rsp)
callq 0x12660
movq %rax, 0xd0(%rsp)
movl 0x104(%rsp), %eax
movl %eax, 0xe0(%rsp)
jmp 0x2c968
movq 0x130(%rsp), %rdi
movl $0x3, %edx
movl %edx, %esi
callq 0x11f40
movq %rax, 0xd0(%rsp)
cmpq $0x0, %rax
jne 0x2c95a
movq 0x130(%rsp), %rdi
leaq 0x8c88(%rip), %rsi      # 0x355ac
xorl %eax, %eax
movl %eax, %ecx
movl $0x3, %r9d
xorl %eax, %eax
movq %rcx, %rdx
movl %r9d, %r8d
movl $0x3, (%rsp)
movl $0x2, 0x8(%rsp)
movl $0x0, 0x10(%rsp)
callq 0x12660
movq %rax, 0xd0(%rsp)
movl 0x100(%rsp), %eax
movl %eax, 0xe0(%rsp)
movq 0x130(%rsp), %rax
movq %rax, 0x78(%rsp)
movq 0xd0(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x110(%rsp), %rax
movb 0x4(%rax), %al
movb %al, 0x96(%rsp)
movq 0x110(%rsp), %rax
movb 0x5(%rax), %al
movb %al, 0x97(%rsp)
movl 0x124(%rsp), %edi
movq 0x110(%rsp), %rsi
addq $0x6, %rsi
callq 0x8010
movq 0x78(%rsp), %rdi
movq 0x80(%rsp), %rsi
movq 0x88(%rsp), %rdx
movb 0x96(%rsp), %cl
movb 0x97(%rsp), %r8b
movw %ax, %r9w
movl 0xd8(%rsp), %eax
subl 0xe0(%rsp), %eax
movzbl %cl, %ecx
movsbl %r8b, %r8d
movswl %r9w, %r9d
movl %eax, (%rsp)
callq 0x10bc0
jmp 0x2cf76
movq 0x110(%rsp), %rax
movzbl 0x4(%rax), %eax
andl $0x1f, %eax
movl %eax, %ecx
movq %rcx, 0x70(%rsp)
subl $0x1f, %eax
ja 0x2cd39
movq 0x70(%rsp), %rax
leaq 0xa406(%rip), %rcx      # 0x36e50
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x3, 0xe5(%rsp)
cmpl $0x0, 0xd8(%rsp)
je 0x2caa3
movq 0x138(%rsp), %rdi
movq 0x130(%rsp), %rsi
callq 0x12780
movq %rax, 0xd0(%rsp)
movb $0x3, 0xe7(%rsp)
movl 0xd8(%rsp), %eax
movl %eax, 0xdc(%rsp)
movl $0x2, 0xd8(%rsp)
jmp 0x2cd6a
movb $0x3, 0xe5(%rsp)
movq 0x130(%rsp), %rdi
callq 0x128a0
movq %rax, 0xd0(%rsp)
movb $0x1, 0xe7(%rsp)
jmp 0x2cd6a
movb $0x3, 0xe5(%rsp)
movq 0x130(%rsp), %rdi
movl $0x1, %esi
movl $0x5, %edx
callq 0x11f40
movq %rax, 0xd0(%rsp)
cmpq $0x0, %rax
jne 0x2cb44
movq 0x130(%rsp), %rdi
leaq 0x8a92(%rip), %rsi      # 0x355a0
xorl %eax, %eax
movl %eax, %ecx
movl $0x1, %r9d
xorl %eax, %eax
movq %rcx, %rdx
movl %r9d, %r8d
movl $0x5, (%rsp)
movl $0x2, 0x8(%rsp)
movl $0x0, 0x10(%rsp)
callq 0x12660
movq %rax, 0xd0(%rsp)
movl 0x108(%rsp), %eax
movl %eax, 0xe0(%rsp)
jmp 0x2cd6a
movb $0x3, 0xe5(%rsp)
movq 0x130(%rsp), %rdi
movl $0x2, %esi
movl $0x3, %edx
callq 0x11f40
movq %rax, 0xd0(%rsp)
cmpq $0x0, %rax
jne 0x2cbcc
movq 0x130(%rsp), %rdi
leaq 0x8a13(%rip), %rsi      # 0x355a6
xorl %eax, %eax
movl %eax, %ecx
movl $0x2, %r8d
movl $0x1, %r9d
xorl %eax, %eax
movq %rcx, %rdx
movl $0x3, (%rsp)
movl $0x2, 0x8(%rsp)
movl $0x0, 0x10(%rsp)
callq 0x12660
movq %rax, 0xd0(%rsp)
movl 0x104(%rsp), %eax
movl %eax, 0xe0(%rsp)
jmp 0x2cd6a
movb $0x3, 0xe5(%rsp)
movq 0x130(%rsp), %rdi
movl $0x3, %edx
movl %edx, %esi
callq 0x11f40
movq %rax, 0xd0(%rsp)
cmpq $0x0, %rax
jne 0x2cc4e
movq 0x130(%rsp), %rdi
leaq 0x8994(%rip), %rsi      # 0x355ac
xorl %eax, %eax
movl %eax, %ecx
movl $0x3, %r9d
xorl %eax, %eax
movq %rcx, %rdx
movl %r9d, %r8d
movl $0x3, (%rsp)
movl $0x2, 0x8(%rsp)
movl $0x0, 0x10(%rsp)
callq 0x12660
movq %rax, 0xd0(%rsp)
movl 0x100(%rsp), %eax
movl %eax, 0xe0(%rsp)
jmp 0x2cd6a
movq 0x130(%rsp), %rdi
callq 0x128a0
movq %rax, 0xd0(%rsp)
movb $0x4, 0xe7(%rsp)
movq 0x118(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x128(%rsp), %rax
movq %rax, 0x60(%rsp)
movl 0x124(%rsp), %eax
movl %eax, 0x6c(%rsp)
movl 0x124(%rsp), %edi
movq 0x110(%rsp), %rsi
addq $0xc, %rsi
callq 0x8060
movq 0x58(%rsp), %rdi
movq 0x60(%rsp), %rsi
movl 0x6c(%rsp), %edx
movl %eax, %ecx
callq 0x2f2c0
movq %rax, 0xe8(%rsp)
jmp 0x2cd6a
movq 0x118(%rsp), %rax
movq 0x10(%rax), %rsi
movl 0xd8(%rsp), %edx
movq 0x118(%rsp), %rax
movq 0x20(%rax), %rcx
movl $0x60, %edi
movb $0x0, %al
callq 0x8c00
jmp 0x2cd6a
movq 0x130(%rsp), %rdi
callq 0x128a0
movq %rax, 0xd0(%rsp)
movb $0x1, 0xe7(%rsp)
movb $0x4, 0xe6(%rsp)
movb $0x1, 0xe5(%rsp)
jmp 0x2cd6a
movq 0xf0(%rsp), %rsi
movq 0x118(%rsp), %rax
movq 0x10(%rax), %rdx
movq 0x110(%rsp), %rax
movzbl 0x4(%rax), %ecx
andl $0x1e, %ecx
leaq 0xa37d(%rip), %rdi      # 0x370e0
movb $0x0, %al
callq 0x8ae0
cmpq $0x0, 0xd0(%rsp)
je 0x2cf74
movl 0xfc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x54(%rsp)
movl 0x10c(%rsp), %eax
movl $0xc, %ecx
xorl %edx, %edx
divq %rcx
movq %rax, %rcx
movl 0x54(%rsp), %eax
cmpl %ecx, %eax
jge 0x2ce76
movq 0x110(%rsp), %rax
movzbl 0x10(%rax), %eax
andl $0x1e, %eax
cmpl $0xc, %eax
jne 0x2ce76
movq 0xf0(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x118(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x128(%rsp), %rax
movq %rax, 0x38(%rsp)
movl 0x124(%rsp), %eax
movl %eax, 0x44(%rsp)
movl 0x124(%rsp), %edi
movq 0x110(%rsp), %rsi
addq $0xc, %rsi
callq 0x8060
movq 0x30(%rsp), %rdi
movq 0x38(%rsp), %rsi
movl 0x44(%rsp), %edx
movl %eax, %ecx
callq 0x2f2c0
movq 0x48(%rsp), %rdi
movq %rax, %rsi
callq 0x5130
cmpl $0x0, %eax
jne 0x2ce74
movl 0xfc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xfc(%rsp)
movq 0x110(%rsp), %rax
addq $0xc, %rax
movq %rax, 0x110(%rsp)
movl 0x124(%rsp), %edi
movq 0x110(%rsp), %rsi
addq $0x8, %rsi
callq 0x8060
movl %eax, 0xdc(%rsp)
jmp 0x2ce76
movl 0xe0(%rsp), %ecx
movl 0xd8(%rsp), %eax
subl %ecx, %eax
movl %eax, 0xd8(%rsp)
movzbl 0xe5(%rsp), %eax
cmpl $0x1, %eax
jne 0x2cefb
movq 0x138(%rsp), %rdi
movq 0xd0(%rsp), %rsi
movq 0xf0(%rsp), %rdx
movq 0xe8(%rsp), %rcx
movslq 0xd8(%rsp), %r8
movb 0xe7(%rsp), %r9b
movb 0xe6(%rsp), %r10b
movl 0xdc(%rsp), %eax
xorl %r11d, %r11d
movzbl %r9b, %r9d
movl $0x0, (%rsp)
movzbl %r10b, %r10d
movl %r10d, 0x8(%rsp)
movl %eax, 0x10(%rsp)
callq 0x100b0
jmp 0x2cf72
movq 0x138(%rsp), %rdi
movq 0xd0(%rsp), %rsi
movq 0xf0(%rsp), %rdx
movq 0xe8(%rsp), %rcx
movslq 0xd8(%rsp), %r8
movb 0xe7(%rsp), %r9b
movb 0xe6(%rsp), %r11b
movb 0xe5(%rsp), %r10b
movl 0xdc(%rsp), %eax
xorl %ebx, %ebx
movzbl %r9b, %r9d
movl $0x0, (%rsp)
movzbl %r11b, %r11d
movl %r11d, 0x8(%rsp)
movzbl %r10b, %r10d
movl %r10d, 0x10(%rsp)
movl %eax, 0x18(%rsp)
movl $0x1, 0x20(%rsp)
callq 0xfd00
jmp 0x2cf74
jmp 0x2cf76
jmp 0x2cf78
movl 0xfc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xfc(%rsp)
movq 0x110(%rsp), %rax
addq $0xc, %rax
movq %rax, 0x110(%rsp)
jmp 0x2c5b8
addq $0x140, %rsp            # imm = 0x140
popq %rbx
retq
nopl (%rax,%rax)