// File: RuiDGPires[P]CrimLang/src/tokenizer.cpp
// Function: Tracker::take(char)
void Tracker::take(char c){
	if (c == '\n'){
		if (this->preproc_line == 1){
			this->current_token.type = crl::Token::Type::PREPROC_END;
			this->current_token.str = "</PP>";
			this->dump();
		}
		this->preproc_line = 0;
		if (state == PState::COMMENT) state = PState::NONE;
		this->line++;
		this->column = 0;
	}

	this->column++;

	eval:
	switch(this->state){
		case PState::NONE:
			if (c == '#'){
				if (this->preproc_line == 0){
					this->preproc_line = 1;			
					this->set_pos();
					this->current_token.type = crl::Token::Type::PREPROC_START;
					this->current_token.str = "<PP>";
					this->dump();
				}else
					throw crl::SyntaxError(line, column, "Unexpected #");
			
			}else if (c == '<' && this->preproc_line == 1){
				state = PState::GLOBAL_FOLDER;
				set_type(crl::Token::Type::GLOBAL_FOLDER);
				this->set_pos();
			}else if (is_letter(c)){
				if (!this->preproc_line) this->preproc_line = -1;
				state = PState::IDENT;
				set_type(crl::Token::Type::IDENT);
				this->push_char(c);
				this->set_pos();
			}else if (is_number(c)){
				if (!this->preproc_line) this->preproc_line = -1;
				state = PState::NUM;
				set_type(crl::Token::Type::INT);
				this->push_char(c);
				this->set_pos();
			}else if (is_symbol(c)){
				if (!this->preproc_line) this->preproc_line = -1;
				state = PState::SYMBOL;
				this->set_pos();
				this->push_char(c);
			}else if (c == '"'){
				if (!this->preproc_line) this->preproc_line = -1;
				state = PState::STRING;
				set_type(crl::Token::Type::STRING);
				this->set_pos();
			}else if (c == '\''){
				if (!this->preproc_line) this->preproc_line = -1;
				state = PState::CHAR;
				set_type(crl::Token::Type::CHAR);
				this->set_pos();
			}else if (is_whitespace(c))
				break;
			else throw crl::SyntaxError(line, column, "Unkown character: " + std::string(1, c));
			break;
		case PState::GLOBAL_FOLDER:
			if (c == '>')
				this->dump();
			else
				this->push_char(c);	
		break;	
		case PState::IDENT:
			if (is_letter(c) || is_number(c) || c == '_')
				this->push_char(c);
			else {
				this->check_keyword();
				this->dump();
				goto eval;
			}
			break;

		case PState::NUM:
			if (is_number(c))
				this->push_char(c);
			else if (c == '.'){
				if (this->current_token.type == crl::Token::Type::INT){
					this->current_token.type = crl::Token::Type::DEC; 
					this->push_char(c);	
				}else throw crl::SyntaxError(line, column, "Invalid numberic format"); 
			} else {
				this->dump();	
				goto eval;
			}
			break;

		case PState::SYMBOL:
			if (is_symbol(c)){
				if (this->parse_symbol(this->current_token.str + c)){
					if (this->state == PState::COMMENT) break;
					this->push_char(c);
				}else{
					if (this->parse_symbol(this->current_token.str)){
						if (this->state == PState::COMMENT) break;
						this->dump();
						goto eval;
					}else throw crl::SyntaxError(line, column, "Unkown symbol: " + this->current_token.str); 
				}
			}else if (this->parse_symbol(this->current_token.str)){
				if (this->state == PState::COMMENT) break;
				this->dump();
				goto eval;
			}else throw crl::SyntaxError(line, column, "Unkown symbol: " + this->current_token.str); 
			
			break;

		case PState::STRING:
			if (c == '\\'){
				this->push_char(c);
				this->str_spec = !this->str_spec;	 // SWITCH STR SPECIAL
			}else if (c == '"'){
				if (!this->str_spec){
					this->dump();
					break;	
				}else{
					this->current_token.str.pop_back();
					this->push_char(c);
					this->str_spec = false;
				}
			}else {
				this->push_char(c);
				this->str_spec = false;
			}
			break;
		case PState::CHAR:
			{
			size_t size = this->current_token.str.size();
			if (size == 0){
				if (c == '\'') throw crl::SyntaxError(line, column, "Empty char is not allowed"); 
				this->push_char(c);
			}else if (size == 1) {
				if (this->current_token.str[0] == '\\'){
					if (c == '\'') this->current_token.str.pop_back();
					this->push_char(c);
				}else{
					if (c != '\'') throw crl::SyntaxError(line, column, "Invalid char: " + this->current_token.str); 
					this->dump();
				}
			}else if (c != '\'') throw crl::SyntaxError(line, column, "Invalid char: " + this->current_token.str);
			else this->dump();
			}
			break;
		default:
			break;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2d0, %rsp            # imm = 0x2D0
movb %sil, %al
movq %rdi, -0x8(%rbp)
movb %al, -0x9(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movsbl -0x9(%rbp), %eax
cmpl $0xa, %eax
jne 0x290d5
movq -0x1f0(%rbp), %rax
cmpl $0x1, 0x40(%rax)
jne 0x2909c
movq -0x1f0(%rbp), %rdi
movl $0x39, 0x20(%rdi)
leaq 0x2d99(%rip), %rsi      # 0x2be24
callq 0x4440
movq -0x1f0(%rbp), %rdi
callq 0x28f80
movq -0x1f0(%rbp), %rax
movl $0x0, 0x40(%rax)
cmpl $0x6, 0x38(%rax)
jne 0x290be
movq -0x1f0(%rbp), %rax
movl $0x0, 0x38(%rax)
movq -0x1f0(%rbp), %rax
movl 0x30(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x30(%rax)
movl $0x0, 0x34(%rax)
movq -0x1f0(%rbp), %rax
movl 0x34(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x34(%rax)
movq -0x1f0(%rbp), %rax
movl 0x38(%rax), %eax
movq %rax, -0x1f8(%rbp)
subq $0x8, %rax
ja 0x29ef5
movq -0x1f8(%rbp), %rax
leaq 0x2c96(%rip), %rcx      # 0x2bda4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsbl -0x9(%rbp), %eax
cmpl $0x23, %eax
jne 0x29254
movq -0x1f0(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jne 0x2916f
movq -0x1f0(%rbp), %rdi
movl $0x1, 0x40(%rdi)
callq 0x28720
movq -0x1f0(%rbp), %rdi
movl $0x37, 0x20(%rdi)
leaq 0x2cd1(%rip), %rsi      # 0x2be2a
callq 0x4440
movq -0x1f0(%rbp), %rdi
callq 0x28f80
jmp 0x2924f
movb $0x1, -0x45(%rbp)
movl $0x50, %edi
callq 0x4190
movq %rax, %rcx
movq -0x1f0(%rbp), %rax
movq %rcx, -0x210(%rbp)
movl 0x30(%rax), %ecx
movl %ecx, -0x208(%rbp)
movl 0x34(%rax), %eax
movl %eax, -0x204(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0x200(%rbp)
callq 0x4590
movq -0x200(%rbp), %rdx
leaq 0x2c71(%rip), %rsi      # 0x2be2f
leaq -0x30(%rbp), %rdi
callq 0x52e0
jmp 0x291c9
movl -0x204(%rbp), %edx
movl -0x208(%rbp), %esi
movq -0x210(%rbp), %rdi
leaq -0x30(%rbp), %rcx
callq 0x90b0
jmp 0x291e7
movq -0x210(%rbp), %rdi
movb $0x0, -0x45(%rbp)
leaq 0x10b6f(%rip), %rsi     # 0x39d68
leaq -0x1ff40(%rip), %rdx    # 0x92c0
callq 0x4550
jmp 0x29f09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2922d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x41e0
leaq -0x31(%rbp), %rdi
callq 0x4360
testb $0x1, -0x45(%rbp)
jne 0x2923e
jmp 0x2924a
movq -0x210(%rbp), %rdi
callq 0x4230
jmp 0x29f00
jmp 0x29598
movsbl -0x9(%rbp), %eax
cmpl $0x3c, %eax
jne 0x29293
movq -0x1f0(%rbp), %rax
cmpl $0x1, 0x40(%rax)
jne 0x29293
movq -0x1f0(%rbp), %rdi
movl $0x8, 0x38(%rdi)
movl $0x38, %esi
callq 0x28770
movq -0x1f0(%rbp), %rdi
callq 0x28720
jmp 0x29596
movsbl -0x9(%rbp), %edi
callq 0x29f10
testb $0x1, %al
jne 0x292a2
jmp 0x292f6
movq -0x1f0(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jne 0x292bd
movq -0x1f0(%rbp), %rax
movl $0xffffffff, 0x40(%rax) # imm = 0xFFFFFFFF
movq -0x1f0(%rbp), %rdi
movl $0x1, 0x38(%rdi)
movl $0x1, %esi
callq 0x28770
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
movq -0x1f0(%rbp), %rdi
callq 0x28720
jmp 0x29594
movsbl -0x9(%rbp), %edi
callq 0x29f60
testb $0x1, %al
jne 0x29305
jmp 0x29359
movq -0x1f0(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jne 0x29320
movq -0x1f0(%rbp), %rax
movl $0xffffffff, 0x40(%rax) # imm = 0xFFFFFFFF
movq -0x1f0(%rbp), %rdi
movl $0x2, 0x38(%rdi)
movl $0x13, %esi
callq 0x28770
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
movq -0x1f0(%rbp), %rdi
callq 0x28720
jmp 0x29592
movsbl -0x9(%rbp), %edi
callq 0x29f90
testb $0x1, %al
jne 0x29368
jmp 0x293ab
movq -0x1f0(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jne 0x29383
movq -0x1f0(%rbp), %rax
movl $0xffffffff, 0x40(%rax) # imm = 0xFFFFFFFF
movq -0x1f0(%rbp), %rdi
movl $0x5, 0x38(%rdi)
callq 0x28720
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
jmp 0x29590
movsbl -0x9(%rbp), %eax
cmpl $0x22, %eax
jne 0x293f8
movq -0x1f0(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jne 0x293cf
movq -0x1f0(%rbp), %rax
movl $0xffffffff, 0x40(%rax) # imm = 0xFFFFFFFF
movq -0x1f0(%rbp), %rdi
movl $0x3, 0x38(%rdi)
movl $0x1c, %esi
callq 0x28770
movq -0x1f0(%rbp), %rdi
callq 0x28720
jmp 0x2958e
movsbl -0x9(%rbp), %eax
cmpl $0x27, %eax
jne 0x29445
movq -0x1f0(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jne 0x2941c
movq -0x1f0(%rbp), %rax
movl $0xffffffff, 0x40(%rax) # imm = 0xFFFFFFFF
movq -0x1f0(%rbp), %rdi
movl $0x4, 0x38(%rdi)
movl $0x1b, %esi
callq 0x28770
movq -0x1f0(%rbp), %rdi
callq 0x28720
jmp 0x2958c
movsbl -0x9(%rbp), %edi
callq 0x2a100
testb $0x1, %al
jne 0x29454
jmp 0x29459
jmp 0x29ef7
movb $0x1, -0x8a(%rbp)
movl $0x50, %edi
callq 0x4190
movq %rax, %rcx
movq -0x1f0(%rbp), %rax
movq %rcx, -0x230(%rbp)
movl 0x30(%rax), %ecx
movl %ecx, -0x224(%rbp)
movl 0x34(%rax), %eax
movl %eax, -0x220(%rbp)
movsbl -0x9(%rbp), %eax
movl %eax, -0x21c(%rbp)
leaq -0x89(%rbp), %rdi
movq %rdi, -0x218(%rbp)
callq 0x4590
movl -0x21c(%rbp), %edx
movq -0x218(%rbp), %rcx
leaq -0x88(%rbp), %rdi
movl $0x1, %esi
callq 0x5640
jmp 0x294ca
leaq 0x296b(%rip), %rsi      # 0x2be3c
leaq -0x68(%rbp), %rdi
leaq -0x88(%rbp), %rdx
callq 0x5890
jmp 0x294e3
movl -0x220(%rbp), %edx
movl -0x224(%rbp), %esi
movq -0x230(%rbp), %rdi
leaq -0x68(%rbp), %rcx
callq 0x90b0
jmp 0x29501
movq -0x230(%rbp), %rdi
movb $0x0, -0x8a(%rbp)
leaq 0x10852(%rip), %rsi     # 0x39d68
leaq -0x2025d(%rip), %rdx    # 0x92c0
callq 0x4550
jmp 0x29f09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x29564
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x29558
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x41e0
leaq -0x88(%rbp), %rdi
callq 0x41e0
leaq -0x89(%rbp), %rdi
callq 0x4360
testb $0x1, -0x8a(%rbp)
jne 0x2957b
jmp 0x29587
movq -0x230(%rbp), %rdi
callq 0x4230
jmp 0x29f00
jmp 0x2958e
jmp 0x29590
jmp 0x29592
jmp 0x29594
jmp 0x29596
jmp 0x29598
jmp 0x29ef7
movsbl -0x9(%rbp), %eax
cmpl $0x3e, %eax
jne 0x295b4
movq -0x1f0(%rbp), %rdi
callq 0x28f80
jmp 0x295c4
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
jmp 0x29ef7
movsbl -0x9(%rbp), %edi
callq 0x29f10
testb $0x1, %al
jne 0x295ec
movsbl -0x9(%rbp), %edi
callq 0x29f60
testb $0x1, %al
jne 0x295ec
movsbl -0x9(%rbp), %eax
cmpl $0x5f, %eax
jne 0x295fe
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
jmp 0x2961b
movq -0x1f0(%rbp), %rdi
callq 0x28ce0
movq -0x1f0(%rbp), %rdi
callq 0x28f80
jmp 0x290e5
jmp 0x29ef7
movsbl -0x9(%rbp), %edi
callq 0x29f60
testb $0x1, %al
jne 0x2962f
jmp 0x29644
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
jmp 0x29787
movsbl -0x9(%rbp), %eax
cmpl $0x2e, %eax
jne 0x29774
movq -0x1f0(%rbp), %rax
cmpl $0x13, 0x20(%rax)
jne 0x2967a
movq -0x1f0(%rbp), %rdi
movl $0x14, 0x20(%rdi)
movsbl -0x9(%rbp), %esi
callq 0x28740
jmp 0x29772
movb $0x1, -0xb2(%rbp)
movl $0x50, %edi
callq 0x4190
movq %rax, %rcx
movq -0x1f0(%rbp), %rax
movq %rcx, -0x248(%rbp)
movl 0x30(%rax), %ecx
movl %ecx, -0x240(%rbp)
movl 0x34(%rax), %eax
movl %eax, -0x23c(%rbp)
leaq -0xb1(%rbp), %rdi
movq %rdi, -0x238(%rbp)
callq 0x4590
movq -0x238(%rbp), %rdx
leaq 0x2780(%rip), %rsi      # 0x2be4f
leaq -0xb0(%rbp), %rdi
callq 0x52e0
jmp 0x296dd
movl -0x23c(%rbp), %edx
movl -0x240(%rbp), %esi
movq -0x248(%rbp), %rdi
leaq -0xb0(%rbp), %rcx
callq 0x90b0
jmp 0x296fe
movq -0x248(%rbp), %rdi
movb $0x0, -0xb2(%rbp)
leaq 0x10655(%rip), %rsi     # 0x39d68
leaq -0x2045a(%rip), %rdx    # 0x92c0
callq 0x4550
jmp 0x29f09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2974a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x41e0
leaq -0xb1(%rbp), %rdi
callq 0x4360
testb $0x1, -0xb2(%rbp)
jne 0x29761
jmp 0x2976d
movq -0x248(%rbp), %rdi
callq 0x4230
jmp 0x29f00
jmp 0x29785
movq -0x1f0(%rbp), %rdi
callq 0x28f80
jmp 0x290e5
jmp 0x29787
jmp 0x29ef7
movsbl -0x9(%rbp), %edi
callq 0x29f90
testb $0x1, %al
jne 0x2979e
jmp 0x29994
movq -0x1f0(%rbp), %rsi
movsbl -0x9(%rbp), %edx
leaq -0xd8(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x2a320
movq -0x1f0(%rbp), %rdi
movq -0x258(%rbp), %rsi
callq 0x28790
movb %al, -0x249(%rbp)
jmp 0x297d7
leaq -0xd8(%rbp), %rdi
callq 0x41e0
movb -0x249(%rbp), %al
testb $0x1, %al
jne 0x297ef
jmp 0x29833
movq -0x1f0(%rbp), %rax
cmpl $0x6, 0x38(%rax)
jne 0x2981e
jmp 0x29ef7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x41e0
jmp 0x29f00
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
jmp 0x2998f
movq -0x1f0(%rbp), %rsi
leaq -0xf8(%rbp), %rdi
movq %rdi, -0x268(%rbp)
callq 0x4150
movq -0x1f0(%rbp), %rdi
movq -0x268(%rbp), %rsi
callq 0x28790
movb %al, -0x259(%rbp)
jmp 0x29868
leaq -0xf8(%rbp), %rdi
callq 0x41e0
movb -0x259(%rbp), %al
testb $0x1, %al
jne 0x29880
jmp 0x298c0
movq -0x1f0(%rbp), %rax
cmpl $0x6, 0x38(%rax)
jne 0x298af
jmp 0x29ef7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x41e0
jmp 0x29f00
movq -0x1f0(%rbp), %rdi
callq 0x28f80
jmp 0x290e5
movb $0x1, -0x119(%rbp)
movl $0x50, %edi
callq 0x4190
movq -0x1f0(%rbp), %rdx
movq %rax, -0x278(%rbp)
movl 0x30(%rdx), %eax
movl %eax, -0x270(%rbp)
movl 0x34(%rdx), %eax
movl %eax, -0x26c(%rbp)
leaq 0x256f(%rip), %rsi      # 0x2be67
leaq -0x118(%rbp), %rdi
callq 0x5410
jmp 0x29906
movl -0x26c(%rbp), %edx
movl -0x270(%rbp), %esi
movq -0x278(%rbp), %rdi
leaq -0x118(%rbp), %rcx
callq 0x90b0
jmp 0x29927
movq -0x278(%rbp), %rdi
movb $0x0, -0x119(%rbp)
leaq 0x1042c(%rip), %rsi     # 0x39d68
leaq -0x20683(%rip), %rdx    # 0x92c0
callq 0x4550
jmp 0x29f09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x29973
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x41e0
testb $0x1, -0x119(%rbp)
jne 0x2997e
jmp 0x2998a
movq -0x278(%rbp), %rdi
callq 0x4230
jmp 0x29f00
jmp 0x29af0
movq -0x1f0(%rbp), %rsi
leaq -0x140(%rbp), %rdi
movq %rdi, -0x288(%rbp)
callq 0x4150
movq -0x1f0(%rbp), %rdi
movq -0x288(%rbp), %rsi
callq 0x28790
movb %al, -0x279(%rbp)
jmp 0x299c9
leaq -0x140(%rbp), %rdi
callq 0x41e0
movb -0x279(%rbp), %al
testb $0x1, %al
jne 0x299e1
jmp 0x29a21
movq -0x1f0(%rbp), %rax
cmpl $0x6, 0x38(%rax)
jne 0x29a10
jmp 0x29ef7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x41e0
jmp 0x29f00
movq -0x1f0(%rbp), %rdi
callq 0x28f80
jmp 0x290e5
movb $0x1, -0x161(%rbp)
movl $0x50, %edi
callq 0x4190
movq -0x1f0(%rbp), %rdx
movq %rax, -0x298(%rbp)
movl 0x30(%rdx), %eax
movl %eax, -0x290(%rbp)
movl 0x34(%rdx), %eax
movl %eax, -0x28c(%rbp)
leaq 0x240e(%rip), %rsi      # 0x2be67
leaq -0x160(%rbp), %rdi
callq 0x5410
jmp 0x29a67
movl -0x28c(%rbp), %edx
movl -0x290(%rbp), %esi
movq -0x298(%rbp), %rdi
leaq -0x160(%rbp), %rcx
callq 0x90b0
jmp 0x29a88
movq -0x298(%rbp), %rdi
movb $0x0, -0x161(%rbp)
leaq 0x102cb(%rip), %rsi     # 0x39d68
leaq -0x207e4(%rip), %rdx    # 0x92c0
callq 0x4550
jmp 0x29f09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x29ad4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x41e0
testb $0x1, -0x161(%rbp)
jne 0x29adf
jmp 0x29aeb
movq -0x298(%rbp), %rdi
callq 0x4230
jmp 0x29f00
jmp 0x29ef7
movsbl -0x9(%rbp), %eax
cmpl $0x5c, %eax
jne 0x29b23
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
movq -0x1f0(%rbp), %rax
movb 0x3c(%rax), %cl
xorb $-0x1, %cl
andb $0x1, %cl
movb %cl, 0x3c(%rax)
jmp 0x29b90
movsbl -0x9(%rbp), %eax
cmpl $0x22, %eax
jne 0x29b73
movq -0x1f0(%rbp), %rax
testb $0x1, 0x3c(%rax)
jne 0x29b4a
movq -0x1f0(%rbp), %rdi
callq 0x28f80
jmp 0x29ef7
movq -0x1f0(%rbp), %rdi
callq 0x43b0
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
movq -0x1f0(%rbp), %rax
movb $0x0, 0x3c(%rax)
jmp 0x29b8e
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
movq -0x1f0(%rbp), %rax
movb $0x0, 0x3c(%rax)
jmp 0x29b90
jmp 0x29ef7
movq -0x1f0(%rbp), %rdi
callq 0x4200
movq %rax, -0x170(%rbp)
cmpq $0x0, -0x170(%rbp)
jne 0x29cd0
movsbl -0x9(%rbp), %eax
cmpl $0x27, %eax
jne 0x29cbb
movb $0x1, -0x192(%rbp)
movl $0x50, %edi
callq 0x4190
movq %rax, %rcx
movq -0x1f0(%rbp), %rax
movq %rcx, -0x2b0(%rbp)
movl 0x30(%rax), %ecx
movl %ecx, -0x2a8(%rbp)
movl 0x34(%rax), %eax
movl %eax, -0x2a4(%rbp)
leaq -0x191(%rbp), %rdi
movq %rdi, -0x2a0(%rbp)
callq 0x4590
movq -0x2a0(%rbp), %rdx
leaq 0x225f(%rip), %rsi      # 0x2be77
leaq -0x190(%rbp), %rdi
callq 0x52e0
jmp 0x29c26
movl -0x2a4(%rbp), %edx
movl -0x2a8(%rbp), %esi
movq -0x2b0(%rbp), %rdi
leaq -0x190(%rbp), %rcx
callq 0x90b0
jmp 0x29c47
movq -0x2b0(%rbp), %rdi
movb $0x0, -0x192(%rbp)
leaq 0x1010c(%rip), %rsi     # 0x39d68
leaq -0x209a3(%rip), %rdx    # 0x92c0
callq 0x4550
jmp 0x29f09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x29c93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x41e0
leaq -0x191(%rbp), %rdi
callq 0x4360
testb $0x1, -0x192(%rbp)
jne 0x29caa
jmp 0x29cb6
movq -0x2b0(%rbp), %rdi
callq 0x4230
jmp 0x29f00
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
jmp 0x29ef3
cmpq $0x1, -0x170(%rbp)
jne 0x29e0d
movq -0x1f0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x45f0
movsbl (%rax), %eax
cmpl $0x5c, %eax
jne 0x29d20
movsbl -0x9(%rbp), %eax
cmpl $0x27, %eax
jne 0x29d0b
movq -0x1f0(%rbp), %rdi
callq 0x43b0
movq -0x1f0(%rbp), %rdi
movsbl -0x9(%rbp), %esi
callq 0x28740
jmp 0x29e08
movsbl -0x9(%rbp), %eax
cmpl $0x27, %eax
je 0x29dfc
movb $0x1, -0x1b9(%rbp)
movl $0x50, %edi
callq 0x4190
movq -0x1f0(%rbp), %rdx
movq %rax, -0x2c0(%rbp)
movl 0x30(%rdx), %eax
movl %eax, -0x2b8(%rbp)
movl 0x34(%rdx), %eax
movl %eax, -0x2b4(%rbp)
leaq 0x212c(%rip), %rsi      # 0x2be91
leaq -0x1b8(%rbp), %rdi
callq 0x5410
jmp 0x29d73
movl -0x2b4(%rbp), %edx
movl -0x2b8(%rbp), %esi
movq -0x2c0(%rbp), %rdi
leaq -0x1b8(%rbp), %rcx
callq 0x90b0
jmp 0x29d94
movq -0x2c0(%rbp), %rdi
movb $0x0, -0x1b9(%rbp)
leaq 0xffbf(%rip), %rsi      # 0x39d68
leaq -0x20af0(%rip), %rdx    # 0x92c0
callq 0x4550
jmp 0x29f09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x29de0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0x41e0
testb $0x1, -0x1b9(%rbp)
jne 0x29deb
jmp 0x29df7
movq -0x2c0(%rbp), %rdi
callq 0x4230
jmp 0x29f00
movq -0x1f0(%rbp), %rdi
callq 0x28f80
jmp 0x29ef1
movsbl -0x9(%rbp), %eax
cmpl $0x27, %eax
je 0x29ee3
movb $0x1, -0x1e1(%rbp)
movl $0x50, %edi
callq 0x4190
movq -0x1f0(%rbp), %rdx
movq %rax, -0x2d0(%rbp)
movl 0x30(%rdx), %eax
movl %eax, -0x2c8(%rbp)
movl 0x34(%rdx), %eax
movl %eax, -0x2c4(%rbp)
leaq 0x203f(%rip), %rsi      # 0x2be91
leaq -0x1e0(%rbp), %rdi
callq 0x5410
jmp 0x29e60
movl -0x2c4(%rbp), %edx
movl -0x2c8(%rbp), %esi
movq -0x2d0(%rbp), %rdi
leaq -0x1e0(%rbp), %rcx
callq 0x90b0
jmp 0x29e81
movq -0x2d0(%rbp), %rdi
movb $0x0, -0x1e1(%rbp)
leaq 0xfed2(%rip), %rsi      # 0x39d68
leaq -0x20bdd(%rip), %rdx    # 0x92c0
callq 0x4550
jmp 0x29f09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x29eca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x41e0
testb $0x1, -0x1e1(%rbp)
jne 0x29ed5
jmp 0x29ee1
movq -0x2d0(%rbp), %rdi
callq 0x4230
jmp 0x29f00
movq -0x1f0(%rbp), %rdi
callq 0x28f80
jmp 0x29ef1
jmp 0x29ef3
jmp 0x29ef7
jmp 0x29ef7
addq $0x2d0, %rsp            # imm = 0x2D0
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x4580
nopl (%rax)