// File: rfotino[P]consolite-compiler/src/syntax.cpp
// Function: StatementToken::parse(Tokenizer*, std::vector<std::shared_ptr<FunctionToken>, std::allocator<std::shared_ptr<FunctionToken>>> const&, std::vector<std::shared_ptr<GlobalVarToken>, std::allocator<std::shared_ptr<GlobalVarToken>>> const&, std::vector<std::shared_ptr<ParamToken>, std::allocator<std::shared_ptr<ParamToken>>> const&, std::vector<std::shared_ptr<LocalVarToken>, std::allocator<std::shared_ptr<LocalVarToken>>> const&, std::vector<std::shared_ptr<LabelStatement>, std::allocator<std::shared_ptr<LabelStatement>>>&, std::vector<std::shared_ptr<GotoStatement>, std::allocator<std::shared_ptr<GotoStatement>>>&, std::shared_ptr<FunctionToken> const&, bool)
std::shared_ptr<StatementToken> StatementToken::parse(
      Tokenizer *tokenizer,
      const std::vector<std::shared_ptr<FunctionToken>>& functions,
      const std::vector<std::shared_ptr<GlobalVarToken>>& globals,
      const std::vector<std::shared_ptr<ParamToken>>& parameters,
      const std::vector<std::shared_ptr<LocalVarToken>>& localVars,
      std::vector<std::shared_ptr<LabelStatement>>& labels,
      std::vector<std::shared_ptr<GotoStatement>>& gotos,
      const std::shared_ptr<FunctionToken>& currentFunc,
      bool inLoop) {
  AtomToken t = tokenizer->peekNext();
  auto function = getFunction(t.str(), functions);
  if (t.str().empty()) {
    _error("Unexpected EOF.", t.line());
    return nullptr;
  } else if ("{" == t.str()) {
    std::shared_ptr<CompoundStatement> compound(new CompoundStatement());
    if (compound->parse(tokenizer, functions, globals, parameters,
                        localVars, labels, gotos, currentFunc, inLoop)) {
      return compound;
    }
  } else if ("if" == t.str()) {
    std::shared_ptr<IfStatement> ifStatement(new IfStatement());
    if (ifStatement->parse(tokenizer, functions, globals, parameters,
                           localVars, labels, gotos, currentFunc, inLoop)) {
      return ifStatement;
    }
  } else if ("for" == t.str()) {
    std::shared_ptr<ForStatement> forStatement(new ForStatement());
    if (forStatement->parse(tokenizer, functions, globals, parameters,
                            localVars, labels, gotos, currentFunc)) {
      return forStatement;
    }
  } else if ("while" == t.str()) {
    std::shared_ptr<WhileStatement> whileStatement(new WhileStatement());
    if (whileStatement->parse(tokenizer, functions, globals, parameters,
                              localVars, labels, gotos, currentFunc)) {
      return whileStatement;
    }
  } else if ("do" == t.str()) {
    std::shared_ptr<DoWhileStatement> doWhileStatement(new DoWhileStatement());
    if (doWhileStatement->parse(tokenizer, functions, globals, parameters,
                                localVars, labels, gotos, currentFunc)) {
      return doWhileStatement;
    }
  } else if ("break" == t.str()) {
    std::shared_ptr<BreakStatement> breakStatement(new BreakStatement());
    if (breakStatement->parse(tokenizer, inLoop)) {
      return breakStatement;
    }
  } else if ("continue" == t.str()) {
    std::shared_ptr<ContinueStatement> continueStatement(new ContinueStatement());
    if (continueStatement->parse(tokenizer, inLoop)) {
      return continueStatement;
    }
  } else if ("return" == t.str()) {
    std::shared_ptr<ReturnStatement> returnStatement(new ReturnStatement());
    if (returnStatement->parse(tokenizer, functions, globals, parameters,
                               localVars, currentFunc)) {
      return returnStatement;
    }
  } else if ("goto" == t.str()) {
    std::shared_ptr<GotoStatement> gotoStatement(new GotoStatement());
    if (gotoStatement->parse(tokenizer)) {
      gotos.push_back(gotoStatement);
      return gotoStatement;
    }
  } else if (";" == t.str()) {
    std::shared_ptr<NullStatement> nullStatement(new NullStatement());
    // Consume ';' token.
    tokenizer->getNext();
    return nullStatement;
  } else if (isLabelDeclaration(t.str())) {
    std::shared_ptr<LabelStatement> labelStatement(new LabelStatement());
    if (labelStatement->parse(tokenizer)) {
      labels.push_back(labelStatement);
      return labelStatement;
    }
  } else if (isType(t.str())) {
    std::shared_ptr<LocalVarToken> localVar(new LocalVarToken());
    if (localVar->parse(tokenizer, functions, globals, parameters, localVars)) {
      return localVar;
    }
  } else if (nullptr != function && "void" == function->type().name()) {
    std::shared_ptr<VoidStatement> voidStatement(new VoidStatement());
    if (voidStatement->parse(tokenizer, functions, globals, parameters,
                             localVars)) {
      return voidStatement;
    }
  } else {
    std::shared_ptr<ExprStatement> exprStatement(new ExprStatement());
    if (exprStatement->parse(tokenizer, functions, globals, parameters,
                             localVars)) {
      return exprStatement;
    }
  }
  return nullptr;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x530, %rsp            # imm = 0x530
movq %rdi, -0x408(%rbp)
movq %rdi, %rax
movq %rax, -0x400(%rbp)
movb 0x28(%rbp), %al
movq 0x20(%rbp), %r10
movq 0x18(%rbp), %r10
movq 0x10(%rbp), %r10
movq %rdi, -0x18(%rbp)
movq %rsi, -0x20(%rbp)
movq %rdx, -0x28(%rbp)
movq %rcx, -0x30(%rbp)
movq %r8, -0x38(%rbp)
movq %r9, -0x40(%rbp)
andb $0x1, %al
movb %al, -0x41(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x78(%rbp), %rdi
movq %rdi, -0x3f8(%rbp)
callq 0x6bae0
movq -0x3f8(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
callq 0xd5c0
jmp 0x27d84
movq -0x28(%rbp), %rdx
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x6d580
jmp 0x27d9d
leaq -0xa8(%rbp), %rdi
callq 0x8848
leaq -0xd8(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x27dbb
leaq -0xd8(%rbp), %rdi
callq 0x8690
movb %al, -0x409(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x8848
movb -0x409(%rbp), %al
testb $0x1, %al
jne 0x27de8
jmp 0x27f07
leaq -0xf9(%rbp), %rdi
movq %rdi, -0x418(%rbp)
callq 0x8760
movq -0x418(%rbp), %rdx
leaq 0x47c5e(%rip), %rsi     # 0x6fa67
leaq -0xf8(%rbp), %rdi
callq 0xced0
jmp 0x27e17
leaq -0x78(%rbp), %rdi
callq 0x32270
movl %eax, -0x41c(%rbp)
jmp 0x27e28
movl -0x41c(%rbp), %esi
leaq -0xf8(%rbp), %rdi
callq 0x6d960
jmp 0x27e3c
leaq -0xf8(%rbp), %rdi
callq 0x8848
leaq -0xf9(%rbp), %rdi
callq 0x8460
movq -0x408(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x349f0
movl $0x1, -0x100(%rbp)
jmp 0x29574
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x295a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x8848
jmp 0x295a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x27ef6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x8848
leaq -0xf9(%rbp), %rdi
callq 0x8460
jmp 0x2959c
leaq -0x120(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x27f19
leaq 0x47b43(%rip), %rdi     # 0x6fa63
leaq -0x120(%rbp), %rsi
callq 0xd590
movb %al, -0x41d(%rbp)
jmp 0x27f34
leaq -0x120(%rbp), %rdi
callq 0x8848
movb -0x41d(%rbp), %al
testb $0x1, %al
jne 0x27f4f
jmp 0x280b5
movl $0x28, %edi
callq 0x83e0
movq %rax, -0x428(%rbp)
jmp 0x27f62
movq -0x428(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
movq $0x0, 0x20(%rdi)
callq 0x34a10
jmp 0x27f82
movq -0x428(%rbp), %rsi
leaq -0x130(%rbp), %rdi
callq 0x34a50
jmp 0x27f97
leaq -0x130(%rbp), %rdi
callq 0x34a80
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq 0x10(%rbp), %r10
movq 0x18(%rbp), %r11
movq 0x20(%rbp), %rbx
movzbl -0x41(%rbp), %r14d
andl $0x1, %r14d
movq %rsp, %rax
movl %r14d, 0x18(%rax)
movq %rbx, 0x10(%rax)
movq %r11, 0x8(%rax)
movq %r10, (%rax)
callq 0x2ad20
movb %al, -0x429(%rbp)
jmp 0x27fee
movb -0x429(%rbp), %al
testb $0x1, %al
jne 0x27ffd
jmp 0x2808a
movq -0x408(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x34aa0
movl $0x1, -0x100(%rbp)
jmp 0x28094
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x428(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x28, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x34ad0
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x34ad0
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x280b0
jmp 0x29558
leaq -0x150(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x280c7
leaq 0x47d74(%rip), %rdi     # 0x6fe42
leaq -0x150(%rbp), %rsi
callq 0xd590
movb %al, -0x42a(%rbp)
jmp 0x280e2
leaq -0x150(%rbp), %rdi
callq 0x8848
movb -0x42a(%rbp), %al
testb $0x1, %al
jne 0x280fd
jmp 0x2826b
movl $0x60, %edi
callq 0x83e0
movq %rax, -0x438(%rbp)
jmp 0x28110
movq -0x438(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rdi)
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0x34af0
jmp 0x28138
movq -0x438(%rbp), %rsi
leaq -0x160(%rbp), %rdi
callq 0x34b50
jmp 0x2814d
leaq -0x160(%rbp), %rdi
callq 0x34b80
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq 0x10(%rbp), %r10
movq 0x18(%rbp), %r11
movq 0x20(%rbp), %rbx
movzbl -0x41(%rbp), %r14d
andl $0x1, %r14d
movq %rsp, %rax
movl %r14d, 0x18(%rax)
movq %rbx, 0x10(%rax)
movq %r11, 0x8(%rax)
movq %r10, (%rax)
callq 0x2b150
movb %al, -0x439(%rbp)
jmp 0x281a4
movb -0x439(%rbp), %al
testb $0x1, %al
jne 0x281b3
jmp 0x28240
movq -0x408(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x34ba0
movl $0x1, -0x100(%rbp)
jmp 0x2824a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x438(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x60, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x34bd0
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x34bd0
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x28266
jmp 0x29556
leaq -0x180(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x2827d
leaq 0x47bc1(%rip), %rdi     # 0x6fe45
leaq -0x180(%rbp), %rsi
callq 0xd590
movb %al, -0x43a(%rbp)
jmp 0x28298
leaq -0x180(%rbp), %rdi
callq 0x8848
movb -0x43a(%rbp), %al
testb $0x1, %al
jne 0x282b3
jmp 0x28414
movl $0x60, %edi
callq 0x83e0
movq %rax, -0x448(%rbp)
jmp 0x282c6
movq -0x448(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rdi)
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0x34bf0
jmp 0x282ee
movq -0x448(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x34c40
jmp 0x28303
leaq -0x190(%rbp), %rdi
callq 0x34c70
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq 0x10(%rbp), %r10
movq 0x18(%rbp), %r11
movq 0x20(%rbp), %rbx
movq %rsp, %rax
movq %rbx, 0x10(%rax)
movq %r11, 0x8(%rax)
movq %r10, (%rax)
callq 0x2b6a0
movb %al, -0x449(%rbp)
jmp 0x2834d
movb -0x449(%rbp), %al
testb $0x1, %al
jne 0x2835c
jmp 0x283e9
movq -0x408(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x34c90
movl $0x1, -0x100(%rbp)
jmp 0x283f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x448(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x60, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x34cc0
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x34cc0
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x2840f
jmp 0x29554
leaq -0x1b0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x28426
leaq 0x47a1c(%rip), %rdi     # 0x6fe49
leaq -0x1b0(%rbp), %rsi
callq 0xd590
movb %al, -0x44a(%rbp)
jmp 0x28441
leaq -0x1b0(%rbp), %rdi
callq 0x8848
movb -0x44a(%rbp), %al
testb $0x1, %al
jne 0x2845c
jmp 0x285b1
movl $0x30, %edi
callq 0x83e0
movq %rax, -0x458(%rbp)
jmp 0x2846f
movq -0x458(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0x34ce0
jmp 0x2848b
movq -0x458(%rbp), %rsi
leaq -0x1c0(%rbp), %rdi
callq 0x34d20
jmp 0x284a0
leaq -0x1c0(%rbp), %rdi
callq 0x34d50
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq 0x10(%rbp), %r10
movq 0x18(%rbp), %r11
movq 0x20(%rbp), %rbx
movq %rsp, %rax
movq %rbx, 0x10(%rax)
movq %r11, 0x8(%rax)
movq %r10, (%rax)
callq 0x2c2d0
movb %al, -0x459(%rbp)
jmp 0x284ea
movb -0x459(%rbp), %al
testb $0x1, %al
jne 0x284f9
jmp 0x28586
movq -0x408(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x34d70
movl $0x1, -0x100(%rbp)
jmp 0x28590
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x458(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x30, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x34da0
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x34da0
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x285ac
jmp 0x29552
leaq -0x1e0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x285c3
leaq 0x47885(%rip), %rdi     # 0x6fe4f
leaq -0x1e0(%rbp), %rsi
callq 0xd590
movb %al, -0x45a(%rbp)
jmp 0x285de
leaq -0x1e0(%rbp), %rdi
callq 0x8848
movb -0x45a(%rbp), %al
testb $0x1, %al
jne 0x285f9
jmp 0x2874e
movl $0x30, %edi
callq 0x83e0
movq %rax, -0x468(%rbp)
jmp 0x2860c
movq -0x468(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0x34dc0
jmp 0x28628
movq -0x468(%rbp), %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x34e00
jmp 0x2863d
leaq -0x1f0(%rbp), %rdi
callq 0x34e30
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq 0x10(%rbp), %r10
movq 0x18(%rbp), %r11
movq 0x20(%rbp), %rbx
movq %rsp, %rax
movq %rbx, 0x10(%rax)
movq %r11, 0x8(%rax)
movq %r10, (%rax)
callq 0x2c720
movb %al, -0x469(%rbp)
jmp 0x28687
movb -0x469(%rbp), %al
testb $0x1, %al
jne 0x28696
jmp 0x28723
movq -0x408(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x34e50
movl $0x1, -0x100(%rbp)
jmp 0x2872d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x468(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x30, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x34e80
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x34e80
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x28749
jmp 0x29550
leaq -0x210(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x28760
leaq 0x4783f(%rip), %rdi     # 0x6ffa6
leaq -0x210(%rbp), %rsi
callq 0xd590
movb %al, -0x46a(%rbp)
jmp 0x2877b
leaq -0x210(%rbp), %rdi
callq 0x8848
movb -0x46a(%rbp), %al
testb $0x1, %al
jne 0x28796
jmp 0x288c0
movl $0x10, %edi
callq 0x83e0
movq %rax, -0x478(%rbp)
jmp 0x287a9
movq -0x478(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, (%rdi)
callq 0x34ea0
jmp 0x287bd
movq -0x478(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0x34ee0
jmp 0x287d2
leaq -0x220(%rbp), %rdi
callq 0x34f10
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movzbl -0x41(%rbp), %edx
andl $0x1, %edx
callq 0x2cd00
movb %al, -0x479(%rbp)
jmp 0x287f9
movb -0x479(%rbp), %al
testb $0x1, %al
jne 0x28808
jmp 0x28895
movq -0x408(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x34f30
movl $0x1, -0x100(%rbp)
jmp 0x2889f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x478(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x10, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x34f60
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x34f60
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x288bb
jmp 0x2954e
leaq -0x240(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x288d2
leaq 0x476dd(%rip), %rdi     # 0x6ffb6
leaq -0x240(%rbp), %rsi
callq 0xd590
movb %al, -0x47a(%rbp)
jmp 0x288ed
leaq -0x240(%rbp), %rdi
callq 0x8848
movb -0x47a(%rbp), %al
testb $0x1, %al
jne 0x28908
jmp 0x28a32
movl $0x10, %edi
callq 0x83e0
movq %rax, -0x488(%rbp)
jmp 0x2891b
movq -0x488(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, (%rdi)
callq 0x34f80
jmp 0x2892f
movq -0x488(%rbp), %rsi
leaq -0x250(%rbp), %rdi
callq 0x34fc0
jmp 0x28944
leaq -0x250(%rbp), %rdi
callq 0x34ff0
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movzbl -0x41(%rbp), %edx
andl $0x1, %edx
callq 0x2cfd0
movb %al, -0x489(%rbp)
jmp 0x2896b
movb -0x489(%rbp), %al
testb $0x1, %al
jne 0x2897a
jmp 0x28a07
movq -0x408(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x35010
movl $0x1, -0x100(%rbp)
jmp 0x28a11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x488(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x10, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x35040
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x35040
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x28a2d
jmp 0x2954c
leaq -0x270(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x28a44
leaq 0x47bfb(%rip), %rdi     # 0x70646
leaq -0x270(%rbp), %rsi
callq 0xd590
movb %al, -0x48a(%rbp)
jmp 0x28a5f
leaq -0x270(%rbp), %rdi
callq 0x8848
movb -0x48a(%rbp), %al
testb $0x1, %al
jne 0x28a7a
jmp 0x28bc3
movl $0x40, %edi
callq 0x83e0
movq %rax, -0x498(%rbp)
jmp 0x28a8d
movq -0x498(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0x35060
jmp 0x28aad
movq -0x498(%rbp), %rsi
leaq -0x280(%rbp), %rdi
callq 0x350a0
jmp 0x28ac2
leaq -0x280(%rbp), %rdi
callq 0x350d0
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
movq 0x20(%rbp), %r10
movq %rsp, %rax
movq %r10, (%rax)
callq 0x2d2a0
movb %al, -0x499(%rbp)
jmp 0x28afc
movb -0x499(%rbp), %al
testb $0x1, %al
jne 0x28b0b
jmp 0x28b98
movq -0x408(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x350f0
movl $0x1, -0x100(%rbp)
jmp 0x28ba2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x498(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x40, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x35120
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x35120
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x28bbe
jmp 0x2954a
leaq -0x2a0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x28bd5
leaq 0x47276(%rip), %rdi     # 0x6fe52
leaq -0x2a0(%rbp), %rsi
callq 0xd590
movb %al, -0x49a(%rbp)
jmp 0x28bf0
leaq -0x2a0(%rbp), %rdi
callq 0x8848
movb -0x49a(%rbp), %al
testb $0x1, %al
jne 0x28c0b
jmp 0x28d48
movl $0x30, %edi
callq 0x83e0
movq %rax, -0x4a8(%rbp)
jmp 0x28c1e
movq -0x4a8(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0x35140
jmp 0x28c3a
movq -0x4a8(%rbp), %rsi
leaq -0x2b0(%rbp), %rdi
callq 0x35180
jmp 0x28c4f
leaq -0x2b0(%rbp), %rdi
callq 0x343a0
movq %rax, %rdi
movq -0x20(%rbp), %rsi
callq 0x2d950
movb %al, -0x4a9(%rbp)
jmp 0x28c6f
movb -0x4a9(%rbp), %al
testb $0x1, %al
jne 0x28c7e
jmp 0x28d1d
movq 0x18(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x351b0
jmp 0x28c90
movq -0x408(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x35220
movl $0x1, -0x100(%rbp)
jmp 0x28d27
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x4a8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x30, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0xff10
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0xff10
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x28d43
jmp 0x29548
leaq -0x2d0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x28d5a
leaq 0x46ef0(%rip), %rdi     # 0x6fc51
leaq -0x2d0(%rbp), %rsi
callq 0xd590
movb %al, -0x4aa(%rbp)
jmp 0x28d75
leaq -0x2d0(%rbp), %rdi
callq 0x8848
movb -0x4aa(%rbp), %al
testb $0x1, %al
jne 0x28d90
jmp 0x28e86
movl $0x10, %edi
callq 0x83e0
movq %rax, -0x4b8(%rbp)
jmp 0x28da3
movq -0x4b8(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, (%rdi)
callq 0x35250
jmp 0x28db7
movq -0x4b8(%rbp), %rsi
leaq -0x2e0(%rbp), %rdi
callq 0x35290
jmp 0x28dcc
movq -0x20(%rbp), %rsi
leaq -0x310(%rbp), %rdi
callq 0x6ae20
jmp 0x28dde
leaq -0x310(%rbp), %rdi
callq 0x99b0
movq -0x408(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x352c0
movl $0x1, -0x100(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0x352f0
jmp 0x29574
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x4b8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x10, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0x352f0
jmp 0x2959c
leaq -0x330(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x28e98
leaq -0x330(%rbp), %rdi
callq 0x6cda0
movb %al, -0x4b9(%rbp)
jmp 0x28eac
leaq -0x330(%rbp), %rdi
callq 0x8848
movb -0x4b9(%rbp), %al
testb $0x1, %al
jne 0x28ec7
jmp 0x2900c
movl $0x50, %edi
callq 0x83e0
movq %rax, -0x4c8(%rbp)
jmp 0x28eda
movq -0x4c8(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
callq 0x35310
jmp 0x28efe
movq -0x4c8(%rbp), %rsi
leaq -0x340(%rbp), %rdi
callq 0x35360
jmp 0x28f13
leaq -0x340(%rbp), %rdi
callq 0x34810
movq %rax, %rdi
movq -0x20(%rbp), %rsi
callq 0x2de20
movb %al, -0x4c9(%rbp)
jmp 0x28f33
movb -0x4c9(%rbp), %al
testb $0x1, %al
jne 0x28f42
jmp 0x28fe1
movq 0x10(%rbp), %rdi
leaq -0x340(%rbp), %rsi
callq 0x35390
jmp 0x28f54
movq -0x408(%rbp), %rdi
leaq -0x340(%rbp), %rsi
callq 0x35400
movl $0x1, -0x100(%rbp)
jmp 0x28feb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x4c8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x50, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x340(%rbp), %rdi
callq 0x10150
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x340(%rbp), %rdi
callq 0x10150
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x29007
jmp 0x29544
leaq -0x360(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0xd5c0
jmp 0x2901e
leaq -0x360(%rbp), %rdi
callq 0x6d910
movb %al, -0x4ca(%rbp)
jmp 0x29032
leaq -0x360(%rbp), %rdi
callq 0x8848
movb -0x4ca(%rbp), %al
testb $0x1, %al
jne 0x2904d
jmp 0x291c3
movl $0xb8, %edi
callq 0x83e0
movq %rax, -0x4d8(%rbp)
jmp 0x29060
movq -0x4d8(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, -0x4f0(%rbp)
movaps %xmm0, 0xa0(%rdi)
movaps %xmm0, 0x90(%rdi)
movaps %xmm0, 0x80(%rdi)
movaps %xmm0, 0x70(%rdi)
movaps %xmm0, 0x60(%rdi)
movaps %xmm0, 0x50(%rdi)
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
movq $0x0, 0xb0(%rdi)
callq 0x35430
jmp 0x290b7
movq -0x4d8(%rbp), %rsi
leaq -0x370(%rbp), %rdi
callq 0x35480
jmp 0x290cc
leaq -0x370(%rbp), %rdi
callq 0x34650
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
callq 0x2e1f0
movb %al, -0x4f1(%rbp)
jmp 0x290fc
movb -0x4f1(%rbp), %al
testb $0x1, %al
jne 0x2910b
jmp 0x29198
movq -0x408(%rbp), %rdi
leaq -0x370(%rbp), %rsi
callq 0x354b0
movl $0x1, -0x100(%rbp)
jmp 0x291a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x360(%rbp), %rdi
callq 0x8848
jmp 0x2959c
movq -0x4d8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0xb8, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x10dc0
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x10dc0
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x291be
jmp 0x29542
xorl %eax, %eax
movl %eax, %edi
leaq -0x88(%rbp), %rsi
callq 0x32e70
movb %al, %cl
movb $0x0, -0x3c9(%rbp)
movb $0x0, -0x3ca(%rbp)
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x4f2(%rbp)
jne 0x291f2
jmp 0x2925b
leaq -0x88(%rbp), %rdi
callq 0xd780
movq %rax, %rsi
leaq -0x3c8(%rbp), %rdi
callq 0xd910
jmp 0x2920f
movb $0x1, -0x3c9(%rbp)
leaq -0x390(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
callq 0xd940
jmp 0x2922b
movb $0x1, -0x3ca(%rbp)
leaq 0x45dfb(%rip), %rdi     # 0x6f034
leaq -0x390(%rbp), %rsi
callq 0xd590
movb %al, -0x4f3(%rbp)
jmp 0x2924d
movb -0x4f3(%rbp), %al
movb %al, -0x4f2(%rbp)
jmp 0x2925b
movb -0x4f2(%rbp), %al
movb %al, -0x4f4(%rbp)
testb $0x1, -0x3ca(%rbp)
jne 0x29272
jmp 0x2927e
leaq -0x390(%rbp), %rdi
callq 0x8848
testb $0x1, -0x3c9(%rbp)
jne 0x29289
jmp 0x29295
leaq -0x3c8(%rbp), %rdi
callq 0xd440
movb -0x4f4(%rbp), %al
testb $0x1, %al
jne 0x292a4
jmp 0x2942a
movl $0x58, %edi
callq 0x83e0
movq %rax, -0x500(%rbp)
jmp 0x292b7
movq -0x500(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
movq $0x0, 0x50(%rdi)
callq 0x354e0
jmp 0x292e3
movq -0x500(%rbp), %rsi
leaq -0x3e0(%rbp), %rdi
callq 0x35520
jmp 0x292f8
leaq -0x3e0(%rbp), %rdi
callq 0x35550
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
callq 0x2f190
movb %al, -0x501(%rbp)
jmp 0x29328
movb -0x501(%rbp), %al
testb $0x1, %al
jne 0x29337
jmp 0x293ff
movq -0x408(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
callq 0x35570
movl $0x1, -0x100(%rbp)
jmp 0x29409
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x29398
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
testb $0x1, -0x3ca(%rbp)
jne 0x2938a
jmp 0x29396
leaq -0x390(%rbp), %rdi
callq 0x8848
jmp 0x29398
testb $0x1, -0x3c9(%rbp)
jne 0x293a3
jmp 0x293af
leaq -0x3c8(%rbp), %rdi
callq 0xd440
jmp 0x2959c
movq -0x500(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x58, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x3e0(%rbp), %rdi
callq 0x355a0
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x3e0(%rbp), %rdi
callq 0x355a0
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x29425
jmp 0x29540
movl $0x38, %edi
callq 0x83e0
movq %rax, -0x510(%rbp)
jmp 0x2943d
movq -0x510(%rbp), %rdi
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
movq $0x0, 0x30(%rdi)
callq 0x355c0
jmp 0x29461
movq -0x510(%rbp), %rsi
leaq -0x3f0(%rbp), %rdi
callq 0x35600
jmp 0x29476
leaq -0x3f0(%rbp), %rdi
callq 0x35630
movq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
movq -0x40(%rbp), %r9
callq 0x2f5b0
movb %al, -0x511(%rbp)
jmp 0x294a6
movb -0x511(%rbp), %al
testb $0x1, %al
jne 0x294b2
jmp 0x2951c
movq -0x408(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x35650
movl $0x1, -0x100(%rbp)
jmp 0x29526
movq -0x510(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x38, %esi
callq 0x83f0
jmp 0x2959c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x35680
jmp 0x2959c
movl $0x0, -0x100(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x35680
movl -0x100(%rbp), %eax
testl %eax, %eax
jne 0x29574
jmp 0x2953e
jmp 0x29540
jmp 0x29542
jmp 0x29544
jmp 0x29546
jmp 0x29548
jmp 0x2954a
jmp 0x2954c
jmp 0x2954e
jmp 0x29550
jmp 0x29552
jmp 0x29554
jmp 0x29556
jmp 0x29558
jmp 0x2955a
movq -0x408(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x349f0
movl $0x1, -0x100(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x94c0
leaq -0x78(%rbp), %rdi
callq 0x99b0
movq -0x400(%rbp), %rax
addq $0x530, %rsp            # imm = 0x530
popq %rbx
popq %r14
popq %rbp
retq
leaq -0x88(%rbp), %rdi
callq 0x94c0
leaq -0x78(%rbp), %rdi
callq 0x99b0
movq -0xb0(%rbp), %rdi
callq 0x8750
nopl (%rax)