// File: rfotino[P]consolite-compiler/src/syntax.cpp
// Function: FunctionToken::parse(Tokenizer*, std::vector<std::shared_ptr<FunctionToken>, std::allocator<std::shared_ptr<FunctionToken>>>&, std::vector<std::shared_ptr<GlobalVarToken>, std::allocator<std::shared_ptr<GlobalVarToken>>>&)
bool FunctionToken::parse(
      Tokenizer *tokenizer,
      std::vector<std::shared_ptr<FunctionToken>>& functions,
      std::vector<std::shared_ptr<GlobalVarToken>>& globals) {
  _lineNum = _type.line();
  // Validate the type
  if (_type.isArray()) {
    _error("Function return type cannot be array-valued.", _type.line());
    return false;
  }
  // Validate the name
  if (!isValidName(_name)) {
    _error("Invalid function name '" + _name + "'.", _type.line());
    return false;
  } else if (getFunction(_name, functions)) {
    _error("Function '" + _name + "' conflicts with existing function name.",
           _type.line());
    return false;
  } else if (getGlobal(_name, globals)) {
    _error("Function '" + _name + "' conflicts with existing global var name.",
           _type.line());
    return false;
  }
  // Make sure the first token is an open parenthesis
  if (!_expect(tokenizer, "(")) {
    return false;
  }
  // Get the parameters
  while (")" != tokenizer->peekNext().str()) {
    std::shared_ptr<ParamToken> param(new ParamToken());
    if (!param->parse(tokenizer, functions, globals)) {
      return false;
    } else if (getParameter(param->name(), _parameters)) {
      _error("Parameter '" + param->name() + "' conflicts with existing "
             "parameter name.", param->line());
      return false;
    }
    _parameters.push_back(param);
    AtomToken t = tokenizer->peekNext();
    if (t.str().empty()) {
      _error("Unexpected EOF.", t.line());
      return false;
    } else if ("," == t.str()) {
      tokenizer->getNext();
      continue;
    } else if (")" != t.str()) {
      _error("Unexpected token '" + t.str() + "'.", t.line());
      return false;
    }
  }
  // Consume the closing parenthesis
  tokenizer->getNext();
  // Add self to the functions list
  functions.push_back(shared_from_this());
  // Get the function body. Make sure it starts with a '{'.
  if (!_expect(tokenizer, "{")) {
    return false;
  }
  // Get the statements within the function body. Local variable
  // declarations must come before any other statements.
  bool inDeclarations = true;
  while ("}" != tokenizer->peekNext().str()) {
    auto statement = StatementToken::parse(tokenizer, functions, globals,
                                           _parameters, _localVars, _labels,
                                           _gotos, shared_from_this());
    if (!statement) {
      return false;
    }
    // If it's a local variable declaration, add it to the list of local
    // variables.
    if (std::dynamic_pointer_cast<LocalVarToken>(statement)) {
      if (!inDeclarations) {
        _error("Declarations must come before other "
               "statements in function '" + _name + "()'.",
               statement->line());
        return false;
      }
      _localVars.push_back(std::dynamic_pointer_cast<LocalVarToken>(statement));
    } else {
      inDeclarations = false;
      _statements.push_back(statement);
    }
    // Check for EOF
    AtomToken t = tokenizer->peekNext();
    if (t.str().empty()) {
      _error("Unexpected EOF.", t.line());
      return false;
    }
  }
  // Consume the '}' token
  tokenizer->getNext();
  // Make sure all of the goto statements match up with a label.
  bool ret = true;
  for (auto gotoStatement : _gotos) {
    if (!getLabel(gotoStatement->label(), _labels)) {
      _error("Label '" + gotoStatement->label() + "' does not exist in "
             "function '" + _name + "' for goto statement.",
             gotoStatement->line());
      ret = false;
    }
  }
  return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x820, %rsp            # imm = 0x820
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x690(%rbp)
addq $0x20, %rdi
callq 0x32270
movq -0x690(%rbp), %rdi
movl %eax, 0x8(%rdi)
addq $0x20, %rdi
callq 0x33e20
testb $0x1, %al
jne 0x268ab
jmp 0x26949
leaq -0x49(%rbp), %rdi
movq %rdi, -0x698(%rbp)
callq 0x8760
movq -0x698(%rbp), %rdx
leaq 0x4944f(%rip), %rsi     # 0x6fd18
leaq -0x48(%rbp), %rdi
callq 0xced0
jmp 0x268d4
movq -0x690(%rbp), %rdi
addq $0x20, %rdi
callq 0x32270
movl %eax, -0x69c(%rbp)
jmp 0x268ec
movl -0x69c(%rbp), %esi
leaq -0x48(%rbp), %rdi
callq 0x6d960
jmp 0x268fd
leaq -0x48(%rbp), %rdi
callq 0x8848
leaq -0x49(%rbp), %rdi
callq 0x8460
movb $0x0, -0x1(%rbp)
jmp 0x27cf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2693b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x8848
leaq -0x49(%rbp), %rdi
callq 0x8460
jmp 0x27d01
movq -0x690(%rbp), %rdi
addq $0x58, %rdi
callq 0x6cd20
testb $0x1, %al
jne 0x26a1a
movq -0x690(%rbp), %rdx
addq $0x58, %rdx
leaq 0x493d2(%rip), %rsi     # 0x6fd45
leaq -0xa0(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0xdc30
movq -0x6a8(%rbp), %rsi
leaq 0x4943e(%rip), %rdx     # 0x6fdd2
leaq -0x80(%rbp), %rdi
callq 0xe020
jmp 0x2699f
movq -0x690(%rbp), %rdi
addq $0x20, %rdi
callq 0x32270
movl %eax, -0x6ac(%rbp)
jmp 0x269b7
movl -0x6ac(%rbp), %esi
leaq -0x80(%rbp), %rdi
callq 0x6d960
jmp 0x269c8
leaq -0x80(%rbp), %rdi
callq 0x8848
leaq -0xa0(%rbp), %rdi
callq 0x8848
movb $0x0, -0x1(%rbp)
jmp 0x27cf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x26a09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x8848
leaq -0xa0(%rbp), %rdi
callq 0x8848
jmp 0x27d01
movq -0x690(%rbp), %rsi
addq $0x58, %rsi
movq -0x20(%rbp), %rdx
leaq -0xb0(%rbp), %rdi
callq 0x6d580
leaq -0xb0(%rbp), %rdi
callq 0xd8c0
movb %al, -0x6ad(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x94c0
movb -0x6ad(%rbp), %al
testb $0x1, %al
jne 0x26a62
jmp 0x26b27
movq -0x690(%rbp), %rdx
addq $0x58, %rdx
leaq 0x49022(%rip), %rsi     # 0x6fa96
leaq -0xf0(%rbp), %rdi
movq %rdi, -0x6b8(%rbp)
callq 0xdc30
movq -0x6b8(%rbp), %rsi
leaq 0x49127(%rip), %rdx     # 0x6fbbc
leaq -0xd0(%rbp), %rdi
callq 0xe020
jmp 0x26aa3
movq -0x690(%rbp), %rdi
addq $0x20, %rdi
callq 0x32270
movl %eax, -0x6bc(%rbp)
jmp 0x26abb
movl -0x6bc(%rbp), %esi
leaq -0xd0(%rbp), %rdi
callq 0x6d960
jmp 0x26acf
leaq -0xd0(%rbp), %rdi
callq 0x8848
leaq -0xf0(%rbp), %rdi
callq 0x8848
movb $0x0, -0x1(%rbp)
jmp 0x27cf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x26b16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x8848
leaq -0xf0(%rbp), %rdi
callq 0x8848
jmp 0x27d01
movq -0x690(%rbp), %rsi
addq $0x58, %rsi
movq -0x28(%rbp), %rdx
leaq -0x100(%rbp), %rdi
callq 0x6d6b0
leaq -0x100(%rbp), %rdi
callq 0x332b0
movb %al, -0x6bd(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x9880
movb -0x6bd(%rbp), %al
testb $0x1, %al
jne 0x26b6f
jmp 0x26c34
movq -0x690(%rbp), %rdx
addq $0x58, %rdx
leaq 0x48f15(%rip), %rsi     # 0x6fa96
leaq -0x140(%rbp), %rdi
movq %rdi, -0x6c8(%rbp)
callq 0xdc30
movq -0x6c8(%rbp), %rsi
leaq 0x49043(%rip), %rdx     # 0x6fbe5
leaq -0x120(%rbp), %rdi
callq 0xe020
jmp 0x26bb0
movq -0x690(%rbp), %rdi
addq $0x20, %rdi
callq 0x32270
movl %eax, -0x6cc(%rbp)
jmp 0x26bc8
movl -0x6cc(%rbp), %esi
leaq -0x120(%rbp), %rdi
callq 0x6d960
jmp 0x26bdc
leaq -0x120(%rbp), %rdi
callq 0x8848
leaq -0x140(%rbp), %rdi
callq 0x8848
movb $0x0, -0x1(%rbp)
jmp 0x27cf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x26c23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x8848
leaq -0x140(%rbp), %rdi
callq 0x8848
jmp 0x27d01
jmp 0x26c36
jmp 0x26c38
movq -0x18(%rbp), %rax
movq %rax, -0x6e0(%rbp)
leaq -0x161(%rbp), %rdi
movq %rdi, -0x6d8(%rbp)
callq 0x8760
movq -0x6d8(%rbp), %rdx
leaq 0x48449(%rip), %rsi     # 0x6f0ad
leaq -0x160(%rbp), %rdi
callq 0xced0
jmp 0x26c72
movq -0x6e0(%rbp), %rdi
leaq -0x160(%rbp), %rsi
movl $0x1, %edx
callq 0x6da60
movb %al, -0x6e1(%rbp)
jmp 0x26c92
movb -0x6e1(%rbp), %al
xorb $-0x1, %al
movb %al, -0x6e2(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x8848
leaq -0x161(%rbp), %rdi
callq 0x8460
movb -0x6e2(%rbp), %al
testb $0x1, %al
jne 0x26cc4
jmp 0x26d04
movb $0x0, -0x1(%rbp)
jmp 0x27cf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x26cf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x8848
leaq -0x161(%rbp), %rdi
callq 0x8460
jmp 0x27d01
jmp 0x26d06
movq -0x18(%rbp), %rsi
leaq -0x1b8(%rbp), %rdi
movq %rdi, -0x6f0(%rbp)
callq 0x6bae0
movq -0x6f0(%rbp), %rsi
leaq -0x188(%rbp), %rdi
callq 0xd5c0
jmp 0x26d32
leaq 0x49c35(%rip), %rdi     # 0x7096e
leaq -0x188(%rbp), %rsi
callq 0xd8e0
movb %al, -0x6f1(%rbp)
jmp 0x26d4d
leaq -0x188(%rbp), %rdi
callq 0x8848
leaq -0x1b8(%rbp), %rdi
callq 0x99b0
movb -0x6f1(%rbp), %al
testb $0x1, %al
jne 0x26d74
jmp 0x2739f
movl $0x98, %edi
callq 0x83e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x700(%rbp)
callq 0x34010
jmp 0x26d92
movq -0x700(%rbp), %rsi
leaq -0x1c8(%rbp), %rdi
movq %rdi, -0x710(%rbp)
callq 0x34050
movq -0x710(%rbp), %rdi
callq 0x34080
movq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0x25f20
movb %al, -0x701(%rbp)
jmp 0x26dd4
movb -0x701(%rbp), %al
testb $0x1, %al
jne 0x26e5d
jmp 0x26de0
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1cc(%rbp)
jmp 0x27349
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x26e19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x8848
leaq -0x1b8(%rbp), %rdi
callq 0x99b0
jmp 0x27d01
movq -0x700(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
movl $0x98, %esi
callq 0x83f0
jmp 0x27d01
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2738e
leaq -0x1c8(%rbp), %rdi
callq 0x34080
movq %rax, %rsi
addq $0x10, %rsi
leaq -0x200(%rbp), %rdi
callq 0xdaa0
jmp 0x26e7e
movq -0x690(%rbp), %rdx
addq $0x78, %rdx
leaq -0x1e0(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x6d320
jmp 0x26e9e
leaq -0x1e0(%rbp), %rdi
callq 0x33360
movb %al, -0x711(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0xd400
leaq -0x200(%rbp), %rdi
callq 0x8848
movb -0x711(%rbp), %al
testb $0x1, %al
jne 0x26ed7
jmp 0x27005
leaq -0x1c8(%rbp), %rdi
callq 0x34080
movq %rax, %rsi
addq $0x10, %rsi
leaq -0x260(%rbp), %rdi
callq 0xdaa0
jmp 0x26ef8
leaq 0x48e5e(%rip), %rsi     # 0x6fd5d
leaq -0x240(%rbp), %rdi
leaq -0x260(%rbp), %rdx
callq 0x325f0
jmp 0x26f14
leaq 0x48e4e(%rip), %rdx     # 0x6fd69
leaq -0x220(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0xe020
jmp 0x26f30
leaq -0x1c8(%rbp), %rdi
callq 0x34080
movq %rax, %rdi
callq 0x32270
movl %eax, -0x718(%rbp)
jmp 0x26f4c
movl -0x718(%rbp), %esi
leaq -0x220(%rbp), %rdi
callq 0x6d960
jmp 0x26f60
leaq -0x220(%rbp), %rdi
callq 0x8848
leaq -0x240(%rbp), %rdi
callq 0x8848
leaq -0x260(%rbp), %rdi
callq 0x8848
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1cc(%rbp)
jmp 0x27349
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x8848
jmp 0x2738e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x26ff4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x26fe8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x220(%rbp), %rdi
callq 0x8848
leaq -0x240(%rbp), %rdi
callq 0x8848
leaq -0x260(%rbp), %rdi
callq 0x8848
jmp 0x2738e
jmp 0x27007
movq -0x690(%rbp), %rdi
addq $0x78, %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x340a0
jmp 0x27020
movq -0x18(%rbp), %rsi
leaq -0x290(%rbp), %rdi
callq 0x6bae0
jmp 0x27032
leaq -0x2b0(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0xd5c0
jmp 0x27047
leaq -0x2b0(%rbp), %rdi
callq 0x8690
movb %al, -0x719(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x8848
movb -0x719(%rbp), %al
testb $0x1, %al
jne 0x27074
jmp 0x2713e
leaq -0x2d1(%rbp), %rdi
movq %rdi, -0x728(%rbp)
callq 0x8760
movq -0x728(%rbp), %rdx
leaq 0x489d2(%rip), %rsi     # 0x6fa67
leaq -0x2d0(%rbp), %rdi
callq 0xced0
jmp 0x270a3
leaq -0x290(%rbp), %rdi
callq 0x32270
movl %eax, -0x72c(%rbp)
jmp 0x270b7
movl -0x72c(%rbp), %esi
leaq -0x2d0(%rbp), %rdi
callq 0x6d960
jmp 0x270cb
leaq -0x2d0(%rbp), %rdi
callq 0x8848
leaq -0x2d1(%rbp), %rdi
callq 0x8460
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1cc(%rbp)
jmp 0x2733d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x27382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2712d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x8848
leaq -0x2d1(%rbp), %rdi
callq 0x8460
jmp 0x27382
leaq -0x2f8(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0xd5c0
jmp 0x27153
leaq 0x4891d(%rip), %rdi     # 0x6fa77
leaq -0x2f8(%rbp), %rsi
callq 0xd590
movb %al, -0x72d(%rbp)
jmp 0x2716e
leaq -0x2f8(%rbp), %rdi
callq 0x8848
movb -0x72d(%rbp), %al
testb $0x1, %al
jne 0x27186
jmp 0x271d0
movq -0x18(%rbp), %rsi
leaq -0x328(%rbp), %rdi
callq 0x6ae20
jmp 0x27198
leaq -0x328(%rbp), %rdi
callq 0x99b0
movl $0x2, -0x1cc(%rbp)
jmp 0x2733d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x8848
jmp 0x27382
leaq -0x348(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0xd5c0
jmp 0x271e5
leaq 0x49782(%rip), %rdi     # 0x7096e
leaq -0x348(%rbp), %rsi
callq 0xd8e0
movb %al, -0x72e(%rbp)
jmp 0x27200
leaq -0x348(%rbp), %rdi
callq 0x8848
movb -0x72e(%rbp), %al
testb $0x1, %al
jne 0x2721b
jmp 0x2732f
leaq -0x3a8(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0xd5c0
jmp 0x27230
leaq 0x48700(%rip), %rsi     # 0x6f937
leaq -0x388(%rbp), %rdi
leaq -0x3a8(%rbp), %rdx
callq 0x325f0
jmp 0x2724c
leaq 0x48b7f(%rip), %rdx     # 0x6fdd2
leaq -0x368(%rbp), %rdi
leaq -0x388(%rbp), %rsi
callq 0xe020
jmp 0x27268
leaq -0x290(%rbp), %rdi
callq 0x32270
movl %eax, -0x734(%rbp)
jmp 0x2727c
movl -0x734(%rbp), %esi
leaq -0x368(%rbp), %rdi
callq 0x6d960
jmp 0x27290
leaq -0x368(%rbp), %rdi
callq 0x8848
leaq -0x388(%rbp), %rdi
callq 0x8848
leaq -0x3a8(%rbp), %rdi
callq 0x8848
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1cc(%rbp)
jmp 0x2733d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x8848
jmp 0x27382
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x27321
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x27315
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x8848
leaq -0x388(%rbp), %rdi
callq 0x8848
leaq -0x3a8(%rbp), %rdi
callq 0x8848
jmp 0x27382
jmp 0x27331
jmp 0x27333
movl $0x0, -0x1cc(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x99b0
leaq -0x1c8(%rbp), %rdi
callq 0xd400
movl -0x1cc(%rbp), %eax
movl %eax, -0x738(%rbp)
testl %eax, %eax
je 0x2737d
jmp 0x27367
movl -0x738(%rbp), %eax
subl $0x1, %eax
je 0x27cf3
jmp 0x27378
jmp 0x26d06
jmp 0x26d06
leaq -0x290(%rbp), %rdi
callq 0x99b0
leaq -0x1c8(%rbp), %rdi
callq 0xd400
jmp 0x27d01
movq -0x18(%rbp), %rsi
leaq -0x3d8(%rbp), %rdi
movq %rdi, -0x750(%rbp)
callq 0x6ae20
movq -0x750(%rbp), %rdi
callq 0x99b0
movq -0x690(%rbp), %rsi
movq -0x20(%rbp), %rax
movq %rax, -0x748(%rbp)
addq $0x10, %rsi
leaq -0x3e8(%rbp), %rdi
movq %rdi, -0x740(%rbp)
callq 0x34110
movq -0x748(%rbp), %rdi
movq -0x740(%rbp), %rsi
callq 0xce30
jmp 0x27400
leaq -0x3e8(%rbp), %rdi
callq 0x94c0
movq -0x18(%rbp), %rax
movq %rax, -0x760(%rbp)
leaq -0x409(%rbp), %rdi
movq %rdi, -0x758(%rbp)
callq 0x8760
movq -0x758(%rbp), %rdx
leaq 0x4862b(%rip), %rsi     # 0x6fa63
leaq -0x408(%rbp), %rdi
callq 0xced0
jmp 0x27446
movq -0x760(%rbp), %rdi
leaq -0x408(%rbp), %rsi
movl $0x1, %edx
callq 0x6da60
movb %al, -0x761(%rbp)
jmp 0x27466
movb -0x761(%rbp), %al
xorb $-0x1, %al
movb %al, -0x762(%rbp)
leaq -0x408(%rbp), %rdi
callq 0x8848
leaq -0x409(%rbp), %rdi
callq 0x8460
movb -0x762(%rbp), %al
testb $0x1, %al
jne 0x27498
jmp 0x274f5
movb $0x0, -0x1(%rbp)
jmp 0x27cf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x3e8(%rbp), %rdi
callq 0x94c0
jmp 0x27d01
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x274e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x408(%rbp), %rdi
callq 0x8848
leaq -0x409(%rbp), %rdi
callq 0x8460
jmp 0x27d01
movb $0x1, -0x40a(%rbp)
movq -0x18(%rbp), %rsi
leaq -0x460(%rbp), %rdi
movq %rdi, -0x770(%rbp)
callq 0x6bae0
movq -0x770(%rbp), %rsi
leaq -0x430(%rbp), %rdi
callq 0xd5c0
jmp 0x27528
leaq 0x48536(%rip), %rdi     # 0x6fa65
leaq -0x430(%rbp), %rsi
callq 0xd8e0
movb %al, -0x771(%rbp)
jmp 0x27543
leaq -0x430(%rbp), %rdi
callq 0x8848
leaq -0x460(%rbp), %rdi
callq 0x99b0
movb -0x771(%rbp), %al
testb $0x1, %al
jne 0x2756a
jmp 0x279ee
movq -0x690(%rbp), %rsi
movq -0x18(%rbp), %rax
movq %rax, -0x7a0(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x798(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x790(%rbp)
movq %rsi, %rax
addq $0x78, %rax
movq %rax, -0x788(%rbp)
movq %rsi, %rax
addq $0x90, %rax
movq %rax, -0x780(%rbp)
movq %rsi, %rax
addq $0xa8, %rax
movq %rax, -0x7a8(%rbp)
movq %rsi, %rax
addq $0xc0, %rax
movq %rax, -0x7b0(%rbp)
addq $0x10, %rsi
leaq -0x480(%rbp), %rdi
movq %rdi, -0x7b8(%rbp)
callq 0x34110
movq -0x7b8(%rbp), %r11
movq -0x7b0(%rbp), %r10
movq -0x7a8(%rbp), %rdi
movq -0x7a0(%rbp), %rsi
movq -0x798(%rbp), %rdx
movq -0x790(%rbp), %rcx
movq -0x788(%rbp), %r8
movq -0x780(%rbp), %r9
movq %rsp, %rax
movq %r11, 0x10(%rax)
movq %r10, 0x8(%rax)
movq %rdi, (%rax)
movl $0x0, 0x18(%rax)
leaq -0x470(%rbp), %rdi
callq 0x27d10
jmp 0x27642
leaq -0x480(%rbp), %rdi
callq 0x94c0
leaq -0x470(%rbp), %rdi
callq 0x34140
testb $0x1, %al
jne 0x276c5
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1cc(%rbp)
jmp 0x279af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x27697
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x8848
leaq -0x460(%rbp), %rdi
callq 0x99b0
jmp 0x27d01
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x94c0
jmp 0x27d01
leaq -0x490(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0x34160
leaq -0x490(%rbp), %rdi
callq 0x33410
movb %al, -0x7b9(%rbp)
leaq -0x490(%rbp), %rdi
callq 0x10dc0
movb -0x7b9(%rbp), %al
testb $0x1, %al
jne 0x27705
jmp 0x2785f
testb $0x1, -0x40a(%rbp)
jne 0x277f1
movq -0x690(%rbp), %rdx
addq $0x58, %rdx
leaq 0x4866f(%rip), %rsi     # 0x6fd93
leaq -0x4d0(%rbp), %rdi
callq 0xdc30
jmp 0x27732
leaq 0x48697(%rip), %rdx     # 0x6fdd0
leaq -0x4b0(%rbp), %rdi
leaq -0x4d0(%rbp), %rsi
callq 0xe020
jmp 0x2774e
leaq -0x470(%rbp), %rdi
callq 0x341f0
movq %rax, %rdi
callq 0x32270
movl %eax, -0x7c0(%rbp)
jmp 0x2776a
movl -0x7c0(%rbp), %esi
leaq -0x4b0(%rbp), %rdi
callq 0x6d960
jmp 0x2777e
leaq -0x4b0(%rbp), %rdi
callq 0x8848
leaq -0x4d0(%rbp), %rdi
callq 0x8848
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1cc(%rbp)
jmp 0x279af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x279dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x277e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x4b0(%rbp), %rdi
callq 0x8848
leaq -0x4d0(%rbp), %rdi
callq 0x8848
jmp 0x279dd
movq -0x690(%rbp), %rax
addq $0x90, %rax
movq %rax, -0x7d0(%rbp)
leaq -0x4e0(%rbp), %rdi
movq %rdi, -0x7c8(%rbp)
leaq -0x470(%rbp), %rsi
callq 0x34160
movq -0x7d0(%rbp), %rdi
movq -0x7c8(%rbp), %rsi
callq 0x34210
jmp 0x27834
leaq -0x4e0(%rbp), %rdi
callq 0x10dc0
jmp 0x27884
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x4e0(%rbp), %rdi
callq 0x10dc0
jmp 0x279dd
movq -0x690(%rbp), %rdi
movb $0x0, -0x40a(%rbp)
addq $0xd8, %rdi
leaq -0x470(%rbp), %rsi
callq 0x34240
jmp 0x27882
jmp 0x27884
movq -0x18(%rbp), %rsi
leaq -0x510(%rbp), %rdi
callq 0x6bae0
jmp 0x27896
leaq -0x530(%rbp), %rdi
leaq -0x510(%rbp), %rsi
callq 0xd5c0
jmp 0x278ab
leaq -0x530(%rbp), %rdi
callq 0x8690
movb %al, -0x7d1(%rbp)
leaq -0x530(%rbp), %rdi
callq 0x8848
movb -0x7d1(%rbp), %al
testb $0x1, %al
jne 0x278d8
jmp 0x27999
leaq -0x551(%rbp), %rdi
movq %rdi, -0x7e0(%rbp)
callq 0x8760
movq -0x7e0(%rbp), %rdx
leaq 0x4816e(%rip), %rsi     # 0x6fa67
leaq -0x550(%rbp), %rdi
callq 0xced0
jmp 0x27907
leaq -0x510(%rbp), %rdi
callq 0x32270
movl %eax, -0x7e4(%rbp)
jmp 0x2791b
movl -0x7e4(%rbp), %esi
leaq -0x550(%rbp), %rdi
callq 0x6d960
jmp 0x2792f
leaq -0x550(%rbp), %rdi
callq 0x8848
leaq -0x551(%rbp), %rdi
callq 0x8460
movb $0x0, -0x1(%rbp)
movl $0x1, -0x1cc(%rbp)
jmp 0x279a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x279d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x2798b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x550(%rbp), %rdi
callq 0x8848
leaq -0x551(%rbp), %rdi
callq 0x8460
jmp 0x279d1
movl $0x0, -0x1cc(%rbp)
leaq -0x510(%rbp), %rdi
callq 0x99b0
leaq -0x470(%rbp), %rdi
callq 0xfcd0
movl -0x1cc(%rbp), %eax
testl %eax, %eax
je 0x279cc
jmp 0x279c7
jmp 0x27cf3
jmp 0x274fc
leaq -0x510(%rbp), %rdi
callq 0x99b0
leaq -0x470(%rbp), %rdi
callq 0xfcd0
jmp 0x27d01
movq -0x18(%rbp), %rsi
leaq -0x588(%rbp), %rdi
callq 0x6ae20
leaq -0x588(%rbp), %rdi
callq 0x99b0
movq -0x690(%rbp), %rax
movb $0x1, -0x589(%rbp)
addq $0xc0, %rax
movq %rax, -0x598(%rbp)
movq -0x598(%rbp), %rdi
callq 0x342b0
movq %rax, -0x5a0(%rbp)
movq -0x598(%rbp), %rdi
callq 0x342e0
movq %rax, -0x5a8(%rbp)
leaq -0x5a0(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x34310
testb $0x1, %al
jne 0x27a67
jmp 0x27ce8
leaq -0x5a0(%rbp), %rdi
callq 0x34350
movq %rax, %rsi
leaq -0x5b8(%rbp), %rdi
movq %rdi, -0x7f0(%rbp)
callq 0x34370
movq -0x7f0(%rbp), %rdi
callq 0x343a0
movq %rax, %rsi
leaq -0x5e8(%rbp), %rdi
callq 0x343c0
jmp 0x27aa6
movq -0x690(%rbp), %rdx
addq $0xa8, %rdx
leaq -0x5c8(%rbp), %rdi
leaq -0x5e8(%rbp), %rsi
callq 0x6d7e0
jmp 0x27ac9
leaq -0x5c8(%rbp), %rdi
callq 0x343f0
xorb $-0x1, %al
movb %al, -0x7f1(%rbp)
leaq -0x5c8(%rbp), %rdi
callq 0x10150
leaq -0x5e8(%rbp), %rdi
callq 0x8848
movb -0x7f1(%rbp), %al
testb $0x1, %al
jne 0x27b04
jmp 0x27cbd
leaq -0x5b8(%rbp), %rdi
callq 0x343a0
movq %rax, %rsi
leaq -0x688(%rbp), %rdi
callq 0x343c0
jmp 0x27b21
leaq 0x482ad(%rip), %rsi     # 0x6fdd5
leaq -0x668(%rbp), %rdi
leaq -0x688(%rbp), %rdx
callq 0x325f0
jmp 0x27b3d
leaq 0x48299(%rip), %rdx     # 0x6fddd
leaq -0x648(%rbp), %rdi
leaq -0x668(%rbp), %rsi
callq 0xe020
jmp 0x27b59
movq -0x690(%rbp), %rdx
addq $0x58, %rdx
leaq -0x628(%rbp), %rdi
leaq -0x648(%rbp), %rsi
callq 0xdfd0
jmp 0x27b79
leaq 0x4827c(%rip), %rdx     # 0x6fdfc
leaq -0x608(%rbp), %rdi
leaq -0x628(%rbp), %rsi
callq 0xe020
jmp 0x27b95
leaq -0x5b8(%rbp), %rdi
callq 0x343a0
movq %rax, %rdi
callq 0x32270
movl %eax, -0x7f8(%rbp)
jmp 0x27bb1
movl -0x7f8(%rbp), %esi
leaq -0x608(%rbp), %rdi
callq 0x6d960
jmp 0x27bc5
leaq -0x608(%rbp), %rdi
callq 0x8848
leaq -0x628(%rbp), %rdi
callq 0x8848
leaq -0x648(%rbp), %rdi
callq 0x8848
leaq -0x668(%rbp), %rdi
callq 0x8848
leaq -0x688(%rbp), %rdi
callq 0x8848
movb $0x0, -0x589(%rbp)
jmp 0x27cbd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x27cda
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x5e8(%rbp), %rdi
callq 0x8848
jmp 0x27cda
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x27caf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x27ca3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x27c97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x27c8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x608(%rbp), %rdi
callq 0x8848
leaq -0x628(%rbp), %rdi
callq 0x8848
leaq -0x648(%rbp), %rdi
callq 0x8848
leaq -0x668(%rbp), %rdi
callq 0x8848
leaq -0x688(%rbp), %rdi
callq 0x8848
jmp 0x27cda
leaq -0x5b8(%rbp), %rdi
callq 0xff10
leaq -0x5a0(%rbp), %rdi
callq 0x34410
jmp 0x27a4b
leaq -0x5b8(%rbp), %rdi
callq 0xff10
jmp 0x27d01
movb -0x589(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x820, %rsp            # imm = 0x820
popq %rbp
retq
movq -0x58(%rbp), %rdi
callq 0x8750
nopw (%rax,%rax)