// File: /workspace/github_c_makefile_star2_O0/hikalium[P]compilium/analyzer.c
// Function: AnalyzeNode
static void AnalyzeNode(struct Node *node, struct SymbolEntry **ctx) {
  assert(node);
  if (node->type == kASTList && !node->op) {
    for (int i = 0; i < GetSizeOfList(node); i++) {
      AnalyzeNode(GetNodeAt(node, i), ctx);
    }
    return;
  }
  if (node->type == kASTExprFuncCall) {
    node->stack_size_needed = (GetLastLocalVarOffset(*ctx) + 0xF) & ~0xF;
    AllocReg(node);
    AnalyzeNode(node->func_expr, ctx);
    FreeReg(node->func_expr->reg);
    node->expr_type =
        GetReturnTypeOfFunction(GetTypeWithoutAttr(node->func_expr->expr_type));
    for (int i = 0; i < GetSizeOfList(node->arg_expr_list); i++) {
      struct Node *n = GetNodeAt(node->arg_expr_list, i);
      AnalyzeNode(n, ctx);
      FreeReg(n->reg);
    }
    return;
  } else if (node->type == kASTFuncDef) {
    AddFuncDef(ctx, CreateTokenStr(node->func_name_token), node);
    struct SymbolEntry *saved_ctx = *ctx;
    struct Node *arg_type_list = GetArgTypeList(node->func_type);
    assert(arg_type_list);
    node->arg_var_list = AllocList();
    for (int i = 0; i < GetSizeOfList(arg_type_list); i++) {
      struct Node *arg_type_with_attr = GetNodeAt(arg_type_list, i);
      struct Node *arg_ident_token =
          GetIdentifierTokenFromTypeAttr(arg_type_with_attr);
      if (!arg_ident_token) {
        PushToList(node->arg_var_list, NULL);
        continue;
      }
      struct Node *arg_type = GetTypeWithoutAttr(arg_type_with_attr);
      assert(arg_type);
      struct Node *local_var =
          AddLocalVar(ctx, CreateTokenStr(arg_ident_token), arg_type);
      PushToList(node->arg_var_list, local_var);
    }
    assert(!in_function);
    in_function = node;
    AnalyzeNode(node->func_body, ctx);
    in_function = NULL;
    *ctx = saved_ctx;
    return;
  }
  assert(node->op);
  if (node->type == kASTExpr) {
    if (IsTokenWithType(node->op, kTokenIntegerConstant) ||
        IsTokenWithType(node->op, kTokenCharLiteral)) {
      AllocReg(node);
      node->expr_type = CreateTypeBase(CreateToken("int"));
      return;
    } else if (IsTokenWithType(node->op, kTokenStringLiteral)) {
      AllocReg(node);
      node->expr_type = CreateTypePointer(CreateTypeBase(CreateToken("char")));
      return;
    } else if (IsEqualTokenWithCStr(node->op, "(")) {
      AnalyzeNode(node->right, ctx);
      node->reg = node->right->reg;
      node->expr_type = node->right->expr_type;
      return;
    } else if (IsEqualTokenWithCStr(node->op, "[")) {
      AnalyzeNode(node->left, ctx);
      AnalyzeNode(node->right, ctx);
      node->reg = node->left->reg;
      FreeReg(node->right->reg);
      assert(node->left->expr_type);
      struct Node *left_type = GetTypeWithoutAttr(node->left->expr_type);
      if (left_type->type == kTypeArray) {
        node->expr_type = CreateTypeLValue(left_type->type_array_type_of);
      } else if (left_type->type == kTypePointer) {
        node->expr_type = CreateTypeLValue(left_type->right);
      } else {
        assert(false);
      }
      return;
    } else if (IsEqualTokenWithCStr(node->op, ".") ||
               IsEqualTokenWithCStr(node->op, "->")) {
      AnalyzeNode(node->left, ctx);
      node->reg = node->left->reg;
      PrintASTNode(node->left->expr_type);
      assert(node->right && node->right->type == kNodeToken);
      struct Node *struct_type = NULL;
      if (IsEqualTokenWithCStr(node->op, ".")) {
        if (GetTypeWithoutAttr(node->left->expr_type)->type != kTypeStruct) {
          ErrorWithToken(node->op, "left operand is not a struct");
        }
        struct_type = node->left->expr_type;
      }
      if (IsEqualTokenWithCStr(node->op, "->")) {
        struct Node *left_type = GetTypeWithoutAttr(node->left->expr_type);
        PrintASTNode(left_type);
        assert(left_type->type == kTypePointer);
        struct Node *left_deref_type = left_type->right;
        assert(left_deref_type->type == kTypeStruct);
        struct_type = left_deref_type;
      }
      assert(struct_type);
      struct Node *member = FindStructMember(struct_type, node->right);
      if (!member) {
        ErrorWithToken(node->right, "Member name not found in struct");
      }
      PrintASTNode(member);
      node->byte_offset = member->struct_member_ent_ofs;
      node->expr_type =
          CreateTypeLValue(GetTypeWithoutAttr(member->struct_member_ent_type));
      return;
    } else if (IsTokenWithType(node->op, kTokenIdent)) {
      struct Node *ident_info = FindLocalVar(*ctx, node->op);
      if (ident_info) {
        node->byte_offset = ident_info->byte_offset;
        AllocReg(node);
        enum NodeType expr_type =
            GetTypeWithoutAttr(ident_info->expr_type)->type;
        if (expr_type == kTypeStruct || expr_type == kTypeArray) {
          node->expr_type = ident_info->expr_type;
          return;
        }
        node->expr_type = CreateTypeLValue(ident_info->expr_type);
        return;
      }
      struct Node *global_var_type = FindGlobalVar(*ctx, node->op);
      if (global_var_type) {
        AllocReg(node);
        node->expr_type = CreateTypeLValue(global_var_type);
        return;
      }
      struct Node *external_var_type = FindExternVar(*ctx, node->op);
      if (external_var_type) {
        AllocReg(node);
        node->expr_type = CreateTypeLValue(external_var_type);
        return;
      }
      struct Node *func_def = FindFuncDef(*ctx, node->op);
      if (func_def) {
        AllocReg(node);
        node->expr_type = func_def->func_type;
        return;
      }
      struct Node *func_decl_type = FindFuncDeclType(*ctx, node->op);
      if (func_decl_type) {
        AllocReg(node);
        node->expr_type = GetTypeWithoutAttr(func_decl_type);
        return;
      }
      ErrorWithToken(node->op, "Unknown identifier");
    } else if (node->cond) {
      AnalyzeNode(node->cond, ctx);
      AnalyzeNode(node->left, ctx);
      AnalyzeNode(node->right, ctx);
      FreeReg(node->left->reg);
      FreeReg(node->right->reg);
      assert(
          IsSameTypeExceptAttr(node->left->expr_type, node->right->expr_type));
      node->reg = node->cond->reg;
      node->expr_type = GetRValueType(node->right->expr_type);
      return;
    } else if (!node->left && node->right) {
      AnalyzeNode(node->right, ctx);
      if (IsEqualTokenWithCStr(node->op, "--") ||
          IsEqualTokenWithCStr(node->op, "++")) {
        assert(IsLValueType(node->right->expr_type));
        node->reg = node->right->reg;
        node->expr_type = GetRValueType(node->right->expr_type);
        return;
      }
      if (IsTokenWithType(node->op, kTokenKwSizeof)) {
        FreeReg(node->right->reg);
        AllocReg(node);
        node->expr_type = CreateTypeBase(CreateToken("int"));
        return;
      }
      node->reg = node->right->reg;
      if (IsEqualTokenWithCStr(node->op, "&")) {
        node->expr_type =
            CreateTypePointer(GetRValueType(node->right->expr_type));
        return;
      }
      if (IsEqualTokenWithCStr(node->op, "*")) {
        struct Node *rtype = GetRValueType(node->right->expr_type);
        assert(rtype && rtype->type == kTypePointer);
        node->expr_type = CreateTypeLValue(rtype->right);
        return;
      }
      node->expr_type = GetRValueType(node->right->expr_type);
      return;
    } else if (node->left && !node->right) {
      // Postfix op
      if (IsEqualTokenWithCStr(node->op, "++") ||
          IsEqualTokenWithCStr(node->op, "--")) {
        AnalyzeNode(node->left, ctx);
        assert(IsLValueType(node->left->expr_type));
        node->reg = node->left->reg;
        node->expr_type = GetRValueType(node->left->expr_type);
        return;
      }
    } else if (node->left && node->right) {
      AnalyzeNode(node->left, ctx);
      AnalyzeNode(node->right, ctx);
      if (IsEqualTokenWithCStr(node->op, "=") ||
          IsEqualTokenWithCStr(node->op, ",")) {
        FreeReg(node->left->reg);
        node->reg = node->right->reg;
        node->expr_type = GetRValueType(node->right->expr_type);
        return;
      }
      FreeReg(node->right->reg);
      node->reg = node->left->reg;
      node->expr_type = GetRValueType(node->left->expr_type);
      return;
    }
    assert(false);
  }
  if (node->type == kASTExprStmt) {
    if (!node->left) return;
    AnalyzeNode(node->left, ctx);
    if (node->left->reg) FreeReg(node->left->reg);
    return;
  } else if (node->type == kASTList) {
    struct SymbolEntry *saved_ctx = *ctx;
    for (int i = 0; i < GetSizeOfList(node); i++) {
      AnalyzeNode(GetNodeAt(node, i), ctx);
    }
    *ctx = saved_ctx;
    return;
  } else if (node->type == kASTDecl) {
    struct Node *raw_type = CreateTypeInContext(*ctx, node->op, node->right);
    PrintASTNode(raw_type);
    assert(raw_type);
    struct Node *type_ident = NULL;
    if (raw_type && raw_type->type == kTypeAttrIdent) {
      type_ident = raw_type->left;
    }
    struct Node *type = GetTypeWithoutAttr(raw_type);
    assert(type);

    if (!in_function) {
      // Top-level definitions
      if (IsASTDeclOfTypedef(node)) {
        return;
      }
      if (type_ident && type->type == kTypeFunction) {
        AddFuncDeclType(ctx, CreateTokenStr(type_ident), raw_type);
        return;
      }
      if (!type_ident && type->type == kTypeStruct) {
        struct Node *spec = type->type_struct_spec;
        ResolveTypesOfMembersOfStruct(*ctx, spec);
        assert(type->tag);
        AddStructType(ctx, CreateTokenStr(type->tag), type);
        return;
      }
      assert(type_ident);
      if (IsASTDeclOfExtern(node)) {
        AddExternVar(ctx, CreateTokenStr(type_ident), type);
      } else {
        AddGlobalVar(ctx, CreateTokenStr(type_ident), type);
      }
      assert(node->right->type == kASTDecltor);
      if (node->right->decltor_init_expr) {
        assert(false);
      }
      return;
    }
    // Local definitions
    assert(type_ident);
    AddLocalVar(ctx, CreateTokenStr(type_ident), type);
    assert(node->right->type == kASTDecltor);
    if (node->right->decltor_init_expr) {
      struct Node *left_expr = AllocNode(kASTExpr);
      left_expr->op = type_ident;
      node->right->decltor_init_expr->left = left_expr;
      AnalyzeNode(node->right->decltor_init_expr, ctx);
      FreeReg(node->right->decltor_init_expr->reg);
    }
    return;
  } else if (node->type == kASTJumpStmt) {
    if (IsTokenWithType(node->op, kTokenKwBreak) ||
        IsTokenWithType(node->op, kTokenKwContinue)) {
      return;
    }
    if (IsTokenWithType(node->op, kTokenKwReturn)) {
      if (!node->right) return;
      AnalyzeNode(node->right, ctx);
      FreeReg(node->right->reg);
      return;
    }
  } else if (node->type == kASTSelectionStmt) {
    if (IsTokenWithType(node->op, kTokenKwIf)) {
      AnalyzeNode(node->cond, ctx);
      FreeReg(node->cond->reg);
      AnalyzeNode(node->if_true_stmt, ctx);
      if (node->if_else_stmt) {
        AnalyzeNode(node->if_else_stmt, ctx);
      }
      return;
    }
  } else if (node->type == kASTForStmt) {
    if (node->init) {
      AnalyzeNode(node->init, ctx);
      if (node->init->reg) FreeReg(node->init->reg);
    }
    if (node->cond) {
      AnalyzeNode(node->cond, ctx);
      FreeReg(node->cond->reg);
    }
    if (node->updt) {
      AnalyzeNode(node->updt, ctx);
      FreeReg(node->updt->reg);
    }
    AnalyzeNode(node->body, ctx);
    return;
  } else if (node->type == kASTWhileStmt) {
    AnalyzeNode(node->cond, ctx);
    FreeReg(node->cond->reg);
    AnalyzeNode(node->body, ctx);
    return;
  }
  ErrorWithToken(node->op, "AnalyzeNode: Not implemented");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0x2322
leaq 0xdcf3(%rip), %rdi      # 0x10004
leaq 0xdcf1(%rip), %rsi      # 0x10009
movl $0x26, %edx
callq 0x4b20
movq -0x8(%rbp), %rax
cmpl $0x6, (%rax)
jne 0x2383
movq -0x8(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x2383
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
movl %eax, -0xf4(%rbp)
movq -0x8(%rbp), %rdi
callq 0x4fe0
movl %eax, %ecx
movl -0xf4(%rbp), %eax
cmpl %ecx, %eax
jge 0x237e
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x5030
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x233d
jmp 0x37d6
movq -0x8(%rbp), %rax
cmpl $0x5, (%rax)
jne 0x2471
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0xb4e0
movl %eax, %ecx
addl $0xf, %ecx
andl $-0x10, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0xc8(%rax)
movq -0x8(%rbp), %rdi
callq 0x37e0
movq -0x8(%rbp), %rax
movq 0xb0(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0xb0(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
movq 0xb0(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xddf0
movq %rax, %rdi
callq 0x3f10
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0xf8(%rbp)
movq -0x8(%rbp), %rax
movq 0xb8(%rax), %rdi
callq 0x4fe0
movl %eax, %ecx
movl -0xf8(%rbp), %eax
cmpl %ecx, %eax
jge 0x246c
movq -0x8(%rbp), %rax
movq 0xb8(%rax), %rdi
movl -0x18(%rbp), %esi
callq 0x5030
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x20(%rbp), %rax
movl 0x4(%rax), %edi
callq 0x3940
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x240c
jmp 0x37d6
movq -0x8(%rbp), %rax
cmpl $0x10, (%rax)
jne 0x2637
movq -0x10(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x8(%rbp), %rax
movq 0xe0(%rax), %rdi
callq 0xbd90
movq -0x100(%rbp), %rdi
movq %rax, %rsi
movq -0x8(%rbp), %rdx
callq 0xb930
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq 0xd8(%rax), %rdi
callq 0x3f60
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x24ea
leaq 0xdb3b(%rip), %rdi      # 0x10014
leaq 0xdb29(%rip), %rsi      # 0x10009
movl $0x3e, %edx
callq 0x4b20
movb $0x0, %al
callq 0x4e30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0xc0(%rax)
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x104(%rbp)
movq -0x30(%rbp), %rdi
callq 0x4fe0
movl %eax, %ecx
movl -0x104(%rbp), %eax
cmpl %ecx, %eax
jge 0x25db
movq -0x30(%rbp), %rdi
movl -0x34(%rbp), %esi
callq 0x5030
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
callq 0xde50
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
jne 0x2562
movq -0x8(%rbp), %rax
movq 0xc0(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4f10
jmp 0x25cd
movq -0x40(%rbp), %rdi
callq 0xddf0
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jne 0x258e
leaq 0xdaa5(%rip), %rdi      # 0x10022
leaq 0xda85(%rip), %rsi      # 0x10009
movl $0x49, %edx
callq 0x4b20
movq -0x10(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x48(%rbp), %rdi
callq 0xbd90
movq -0x110(%rbp), %rdi
movq %rax, %rsi
movq -0x50(%rbp), %rdx
callq 0xb560
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rax
movq 0xc0(%rax), %rdi
movq -0x58(%rbp), %rsi
callq 0x4f10
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x2506
cmpq $0x0, 0x12ccd(%rip)     # 0x152b0
je 0x25fd
leaq 0xda3f(%rip), %rdi      # 0x1002b
leaq 0xda16(%rip), %rsi      # 0x10009
movl $0x4e, %edx
callq 0x4b20
movq -0x8(%rbp), %rax
movq %rax, 0x12ca8(%rip)     # 0x152b0
movq -0x8(%rbp), %rax
movq 0xd0(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq $0x0, 0x12c89(%rip) # 0x152b0
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
jmp 0x37d6
jmp 0x2639
movq -0x8(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x265c
leaq 0xe546(%rip), %rdi      # 0x10b91
leaq 0xd9b7(%rip), %rsi      # 0x10009
movl $0x55, %edx
callq 0x4b20
movq -0x8(%rbp), %rax
cmpl $0x4, (%rax)
jne 0x3148
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0x3, %esi
callq 0xbbe0
testb $0x1, %al
jne 0x2697
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0x17, %esi
callq 0xbbe0
testb $0x1, %al
jne 0x2697
jmp 0x26c4
movq -0x8(%rbp), %rdi
callq 0x37e0
leaq 0xd991(%rip), %rdi      # 0x10038
callq 0xc8d0
movq %rax, %rdi
callq 0x3e10
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0x18, %esi
callq 0xbbe0
testb $0x1, %al
jne 0x26dc
jmp 0x2711
movq -0x8(%rbp), %rdi
callq 0x37e0
leaq 0xd950(%rip), %rdi      # 0x1003c
callq 0xc8d0
movq %rax, %rdi
callq 0x3e10
movq %rax, %rdi
callq 0x3e70
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xde14(%rip), %rsi      # 0x10534
callq 0xbdf0
cmpl $0x0, %eax
je 0x2766
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xdd92(%rip), %rsi      # 0x10507
callq 0xbdf0
cmpl $0x0, %eax
je 0x286b
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
cmpq $0x0, 0x8(%rax)
jne 0x27ee
leaq 0xd864(%rip), %rdi      # 0x10041
leaq 0xd825(%rip), %rsi      # 0x10009
movl $0x6a, %edx
callq 0x4b20
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xddf0
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
cmpl $0x1a, (%rax)
jne 0x2829
movq -0x60(%rbp), %rax
movq 0xf8(%rax), %rdi
callq 0x3e40
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x2866
movq -0x60(%rbp), %rax
cmpl $0x16, (%rax)
jne 0x284c
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x3e40
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x2864
leaq 0xd804(%rip), %rdi      # 0x10057
leaq 0xd7af(%rip), %rsi      # 0x10009
movl $0x71, %edx
callq 0x4b20
jmp 0x2866
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xdd9b(%rip), %rsi      # 0x10615
callq 0xbdf0
cmpl $0x0, %eax
jne 0x28a1
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd7ca(%rip), %rsi      # 0x1005d
callq 0xbdf0
cmpl $0x0, %eax
je 0x2a82
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdi
callq 0x4190
movq -0x8(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x28ed
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
cmpl $0x1, (%rax)
je 0x2905
leaq 0xd76c(%rip), %rdi      # 0x10060
leaq 0xd70e(%rip), %rsi      # 0x10009
movl $0x79, %edx
callq 0x4b20
movq $0x0, -0x68(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xdcf9(%rip), %rsi      # 0x10615
callq 0xbdf0
cmpl $0x0, %eax
je 0x2962
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xddf0
cmpl $0x19, (%rax)
je 0x2952
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd744(%rip), %rsi      # 0x1008f
movb $0x0, %al
callq 0x4d50
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd6ec(%rip), %rsi      # 0x1005d
callq 0xbdf0
cmpl $0x0, %eax
je 0x29ef
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xddf0
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rdi
callq 0x4190
movq -0x70(%rbp), %rax
cmpl $0x16, (%rax)
je 0x29ba
leaq 0xd703(%rip), %rdi      # 0x100ac
leaq 0xd659(%rip), %rsi      # 0x10009
movl $0x84, %edx
callq 0x4b20
movq -0x70(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rax
cmpl $0x19, (%rax)
je 0x29e7
leaq 0xd6f6(%rip), %rdi      # 0x100cc
leaq 0xd62c(%rip), %rsi      # 0x10009
movl $0x86, %edx
callq 0x4b20
movq -0x78(%rbp), %rax
movq %rax, -0x68(%rbp)
cmpq $0x0, -0x68(%rbp)
jne 0x2a0e
leaq 0xd6f4(%rip), %rdi      # 0x100f1
leaq 0xd605(%rip), %rsi      # 0x10009
movl $0x89, %edx
callq 0x4b20
movq -0x68(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xb230
movq %rax, -0x80(%rbp)
cmpq $0x0, -0x80(%rbp)
jne 0x2a40
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
leaq 0xd6c4(%rip), %rsi      # 0x100fd
movb $0x0, %al
callq 0x4d50
movq -0x80(%rbp), %rdi
callq 0x4190
movq -0x80(%rbp), %rax
movl 0x80(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0xa8(%rax)
movq -0x80(%rbp), %rax
movq 0x70(%rax), %rdi
callq 0xddf0
movq %rax, %rdi
callq 0x3e40
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0x4, %esi
callq 0xbbe0
testb $0x1, %al
jne 0x2a9d
jmp 0x2c85
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xb8c0
movq %rax, -0x88(%rbp)
cmpq $0x0, -0x88(%rbp)
je 0x2b48
movq -0x88(%rbp), %rax
movl 0xa8(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0xa8(%rax)
movq -0x8(%rbp), %rdi
callq 0x37e0
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xddf0
movl (%rax), %eax
movl %eax, -0x8c(%rbp)
cmpl $0x19, -0x8c(%rbp)
je 0x2b10
cmpl $0x1a, -0x8c(%rbp)
jne 0x2b28
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x88(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x3e40
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xb850
movq %rax, -0x98(%rbp)
cmpq $0x0, -0x98(%rbp)
je 0x2b92
movq -0x8(%rbp), %rdi
callq 0x37e0
movq -0x98(%rbp), %rdi
callq 0x3e40
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xb7e0
movq %rax, -0xa0(%rbp)
cmpq $0x0, -0xa0(%rbp)
je 0x2bdc
movq -0x8(%rbp), %rdi
callq 0x37e0
movq -0xa0(%rbp), %rdi
callq 0x3e40
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xb990
movq %rax, -0xa8(%rbp)
cmpq $0x0, -0xa8(%rbp)
je 0x2c25
movq -0x8(%rbp), %rdi
callq 0x37e0
movq -0xa8(%rbp), %rax
movq 0xd8(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0xba60
movq %rax, -0xb0(%rbp)
cmpq $0x0, -0xb0(%rbp)
je 0x2c6f
movq -0x8(%rbp), %rdi
callq 0x37e0
movq -0xb0(%rbp), %rdi
callq 0xddf0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd49f(%rip), %rsi      # 0x1011d
movb $0x0, %al
callq 0x4d50
movq -0x8(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x2d54
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rsi
callq 0xdc00
cmpl $0x0, %eax
jne 0x2d21
leaq 0xd420(%rip), %rdi      # 0x10130
leaq 0xd2f2(%rip), %rsi      # 0x10009
movl $0xc1, %edx
callq 0x4b20
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xde90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x2f5f
movq -0x8(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x2f5f
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd3e2(%rip), %rsi      # 0x10174
callq 0xbdf0
cmpl $0x0, %eax
jne 0x2db5
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd3cc(%rip), %rsi      # 0x10177
callq 0xbdf0
cmpl $0x0, %eax
je 0x2e16
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xded0
cmpl $0x0, %eax
jne 0x2de3
leaq 0xd3a8(%rip), %rdi      # 0x1017a
leaq 0xd230(%rip), %rsi      # 0x10009
movl $0xc9, %edx
callq 0x4b20
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xde90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0x10, %esi
callq 0xbbe0
testb $0x1, %al
jne 0x2e2e
jmp 0x2e6b
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rdi
callq 0x37e0
leaq 0xd1ea(%rip), %rdi      # 0x10038
callq 0xc8d0
movq %rax, %rdi
callq 0x3e10
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xde83(%rip), %rsi      # 0x10d0f
callq 0xbdf0
cmpl $0x0, %eax
je 0x2ebf
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xde90
movq %rax, %rdi
callq 0x3e70
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd2d1(%rip), %rsi      # 0x1019f
callq 0xbdf0
cmpl $0x0, %eax
je 0x2f3e
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xde90
movq %rax, -0xb8(%rbp)
cmpq $0x0, -0xb8(%rbp)
je 0x2f06
movq -0xb8(%rbp), %rax
cmpl $0x16, (%rax)
je 0x2f1e
leaq 0xd294(%rip), %rdi      # 0x101a1
leaq 0xd0f5(%rip), %rsi      # 0x10009
movl $0xdc, %edx
callq 0x4b20
movq -0xb8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x3e40
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xde90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x3026
movq -0x8(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x3026
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd1eb(%rip), %rsi      # 0x10177
callq 0xbdf0
cmpl $0x0, %eax
jne 0x2faf
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd1cf(%rip), %rsi      # 0x10174
callq 0xbdf0
cmpl $0x0, %eax
je 0x3021
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xded0
cmpl $0x0, %eax
jne 0x2fee
leaq 0xd1e9(%rip), %rdi      # 0x101c6
leaq 0xd025(%rip), %rsi      # 0x10009
movl $0xe7, %edx
callq 0x4b20
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xde90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
jmp 0x3120
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x311e
movq -0x8(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x311e
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xdd39(%rip), %rsi      # 0x10dae
callq 0xbdf0
cmpl $0x0, %eax
jne 0x3098
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xd15c(%rip), %rsi      # 0x101ea
callq 0xbdf0
cmpl $0x0, %eax
je 0x30db
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xde90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x4(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rdi
callq 0xde90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x37d6
jmp 0x3120
jmp 0x3122
jmp 0x3124
jmp 0x3126
jmp 0x3128
jmp 0x312a
jmp 0x312c
jmp 0x312e
jmp 0x3130
leaq 0xcf20(%rip), %rdi      # 0x10057
leaq 0xcecb(%rip), %rsi      # 0x10009
movl $0xfb, %edx
callq 0x4b20
movq -0x8(%rbp), %rax
cmpl $0x7, (%rax)
jne 0x3195
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x3161
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
cmpl $0x0, 0x4(%rax)
je 0x3190
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
jmp 0x37d6
movq -0x8(%rbp), %rax
cmpl $0x6, (%rax)
jne 0x3216
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xc0(%rbp)
movl $0x0, -0xc4(%rbp)
movl -0xc4(%rbp), %eax
movl %eax, -0x114(%rbp)
movq -0x8(%rbp), %rdi
callq 0x4fe0
movl %eax, %ecx
movl -0x114(%rbp), %eax
cmpl %ecx, %eax
jge 0x3203
movq -0x8(%rbp), %rdi
movl -0xc4(%rbp), %esi
callq 0x5030
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movl -0xc4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc4(%rbp)
jmp 0x31b6
movq -0xc0(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
jmp 0x37d6
movq -0x8(%rbp), %rax
cmpl $0xd, (%rax)
jne 0x35b7
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdx
callq 0xe680
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
callq 0x4190
cmpq $0x0, -0xd0(%rbp)
jne 0x3274
leaq 0xcf89(%rip), %rdi      # 0x101ec
leaq 0xcd9f(%rip), %rsi      # 0x10009
movl $0x10c, %edx            # imm = 0x10C
callq 0x4b20
movq $0x0, -0xd8(%rbp)
cmpq $0x0, -0xd0(%rbp)
je 0x32a7
movq -0xd0(%rbp), %rax
cmpl $0x18, (%rax)
jne 0x32a7
movq -0xd0(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0xd8(%rbp)
movq -0xd0(%rbp), %rdi
callq 0xddf0
movq %rax, -0xe0(%rbp)
cmpq $0x0, -0xe0(%rbp)
jne 0x32dc
leaq 0xcd5b(%rip), %rdi      # 0x10026
leaq 0xcd37(%rip), %rsi      # 0x10009
movl $0x112, %edx            # imm = 0x112
callq 0x4b20
cmpq $0x0, 0x11fcc(%rip)     # 0x152b0
jne 0x34cc
movq -0x8(%rbp), %rdi
callq 0x39d0
testb $0x1, %al
jne 0x32f9
jmp 0x32fe
jmp 0x37d6
cmpq $0x0, -0xd8(%rbp)
je 0x3346
movq -0xe0(%rbp), %rax
cmpl $0x17, (%rax)
jne 0x3346
movq -0x10(%rbp), %rax
movq %rax, -0x120(%rbp)
movq -0xd8(%rbp), %rdi
callq 0xbd90
movq -0x120(%rbp), %rdi
movq %rax, %rsi
movq -0xd0(%rbp), %rdx
callq 0xba00
jmp 0x37d6
cmpq $0x0, -0xd8(%rbp)
jne 0x33ee
movq -0xe0(%rbp), %rax
cmpl $0x19, (%rax)
jne 0x33ee
movq -0xe0(%rbp), %rax
movq 0xf0(%rax), %rax
movq %rax, -0xe8(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0xe8(%rbp), %rsi
callq 0xb330
movq -0xe0(%rbp), %rax
cmpq $0x0, 0xe8(%rax)
jne 0x33b5
leaq 0xce51(%rip), %rdi      # 0x101f5
leaq 0xcc5e(%rip), %rsi      # 0x10009
movl $0x120, %edx            # imm = 0x120
callq 0x4b20
movq -0x10(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0xe0(%rbp), %rax
movq 0xe8(%rax), %rdi
callq 0xbd90
movq -0x128(%rbp), %rdi
movq %rax, %rsi
movq -0xe0(%rbp), %rdx
callq 0xbad0
jmp 0x37d6
cmpq $0x0, -0xd8(%rbp)
jne 0x3410
leaq 0xce00(%rip), %rdi      # 0x101ff
leaq 0xcc03(%rip), %rsi      # 0x10009
movl $0x124, %edx            # imm = 0x124
callq 0x4b20
movq -0x8(%rbp), %rdi
callq 0x3a20
testb $0x1, %al
jne 0x341f
jmp 0x344e
movq -0x10(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0xd8(%rbp), %rdi
callq 0xbd90
movq -0x130(%rbp), %rdi
movq %rax, %rsi
movq -0xe0(%rbp), %rdx
callq 0xb740
jmp 0x347b
movq -0x10(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0xd8(%rbp), %rdi
callq 0xbd90
movq -0x138(%rbp), %rdi
movq %rax, %rsi
movq -0xe0(%rbp), %rdx
callq 0xb6a0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
cmpl $0xc, (%rax)
je 0x34a0
leaq 0xd94a(%rip), %rdi      # 0x10dd9
leaq 0xcb73(%rip), %rsi      # 0x10009
movl $0x12a, %edx            # imm = 0x12A
callq 0x4b20
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
cmpq $0x0, 0x58(%rax)
je 0x34c7
leaq 0xcba1(%rip), %rdi      # 0x10057
leaq 0xcb4c(%rip), %rsi      # 0x10009
movl $0x12c, %edx            # imm = 0x12C
callq 0x4b20
jmp 0x37d6
cmpq $0x0, -0xd8(%rbp)
jne 0x34ee
leaq 0xcd22(%rip), %rdi      # 0x101ff
leaq 0xcb25(%rip), %rsi      # 0x10009
movl $0x131, %edx            # imm = 0x131
callq 0x4b20
movq -0x10(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0xd8(%rbp), %rdi
callq 0xbd90
movq -0x140(%rbp), %rdi
movq %rax, %rsi
movq -0xe0(%rbp), %rdx
callq 0xb560
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
cmpl $0xc, (%rax)
je 0x3540
leaq 0xd8aa(%rip), %rdi      # 0x10dd9
leaq 0xcad3(%rip), %rsi      # 0x10009
movl $0x133, %edx            # imm = 0x133
callq 0x4b20
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
cmpq $0x0, 0x58(%rax)
je 0x35b2
movl $0x4, %edi
callq 0x3a70
movq %rax, -0xf0(%rbp)
movq -0xd8(%rbp), %rcx
movq -0xf0(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0xf0(%rbp), %rcx
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x58(%rax), %rax
movq %rcx, 0x18(%rax)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x58(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x58(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
jmp 0x37d6
movq -0x8(%rbp), %rax
cmpl $0x8, (%rax)
jne 0x364a
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0x5, %esi
callq 0xbbe0
testb $0x1, %al
jne 0x35f2
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0x8, %esi
callq 0xbbe0
testb $0x1, %al
jne 0x35f2
jmp 0x35f7
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0xf, %esi
callq 0xbbe0
testb $0x1, %al
jne 0x360f
jmp 0x3645
movq -0x8(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x361f
jmp 0x37d6
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
jmp 0x37d6
jmp 0x37ba
movq -0x8(%rbp), %rax
cmpl $0x9, (%rax)
jne 0x36c3
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movl $0xc, %esi
callq 0xbbe0
testb $0x1, %al
jne 0x366b
jmp 0x36be
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
cmpq $0x0, 0x50(%rax)
je 0x36b9
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
jmp 0x37d6
jmp 0x37b8
movq -0x8(%rbp), %rax
cmpl $0xe, (%rax)
jne 0x3777
movq -0x8(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x370c
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
cmpl $0x0, 0x4(%rax)
je 0x370a
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
jmp 0x370c
movq -0x8(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x3738
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x3764
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
jmp 0x37d6
movq -0x8(%rbp), %rax
cmpl $0xf, (%rax)
jne 0x37b4
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movl 0x4(%rax), %edi
callq 0x3940
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x10(%rbp), %rsi
callq 0x22f0
jmp 0x37d6
jmp 0x37b6
jmp 0x37b8
jmp 0x37ba
jmp 0x37bc
jmp 0x37be
jmp 0x37c0
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
leaq 0xca3b(%rip), %rsi      # 0x1020a
movb $0x0, %al
callq 0x4d50
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
nop