// File: /workspace/github_cpp_makefile_star2_O2/yanlinlin82[P]icpp/icpp.cpp
// Function: parse_declare()
void parse_declare()
{
	string type_name = parse_type_name();
	string type_prefix = type_name;
	string name = token; next();
	if (token == "(") { // function
		log<3>("[DEBUG] => function '%s', type='%s'\n", name.c_str(), type_name.c_str());
		if (!scopes.empty() && scopes.back().first != "function") {
			err("nesting function is not allowed!\n");
		}
		next();
		vector<pair<string, string>> args; // [ { type, name } ]
		if (token != ")") {
			for (;;) {
				string arg_type_name = parse_type_name();
				string arg_name = token; next();
				args.push_back(make_pair(arg_type_name, arg_name));
				if (token != ",") break;
				next();
			}
		}
		expect_token(")", "function " + name);
		string args_type = "(";
		for (size_t i = 0; i < args.size(); ++i) {
			args_type += (i == 0 ? "" : ",") + args[i].first;
		}
		args_type += ")";
		add_code_symbol(name, args_type, type_name, args.size());
		scopes.push_back(make_pair("function", name));
		current_function = make_tuple(name, args_type, type_name, args.size());
		next();
		expect_token("{", "function '" + name + "', '" + name + type_name + "'");
		size_t offset = add_assembly_code(ENTER);
		stack_frame_table.push_back(make_pair(offset + 1, unordered_map<string, tuple<int, int, string>>()));
		for (size_t i = 0; i < args.size(); ++i) {
			add_argument(args[i].second, args[i].first, args.size() - i + 1);
		}
	} else { // variable
		log<3>("[DEBUG] => variable '%s', type='%s'\n", name.c_str(), type_name.c_str());
		for (;;) {
			if (token == "[") {
				next();
				vector<int> dim;
				for (;;) {
					int size = 0; // size undetermined
					if (token != "]") {
						if (type != number) err("invalid array size '%s'! it should be a number.\n", token.c_str());
						size = eval_number(token);
						if (size <= 0) err("invalid array size '%s'! it should be a positive integer!\n", token.c_str());
						next();
						expect_token("]", "array");
						next();
					}
					dim.push_back(size);
					if (token != "[") break;
					next();
				}
				int size = 1; for (auto d : dim) size *= d;
				if (verbose >= 3) {
					log("array dim = ["); for (size_t i = 0; i < dim.size(); ++i) log("%s%d", (i > 0 ? "," : ""), dim[i]); log("]\n");
				}
				if (!size && token != "=") err("missing array size!\n");
				if (token == "=") {
					next();
					vector<int> dim2 = dim;
					vector<int> cursor;
					vector<pair<vector<int>, int>> init;
					parse_init_value(dim, dim2, cursor, init);
					if (verbose >= 3) {
						for (size_t i = 0; i < init.size(); ++i) {
							log("init[%zd]: [", i);
							for (size_t j = 0; j < init[i].first.size(); ++j) {
								log("%s%d", (j == 0 ? "" : ", "), init[i].first[j]);
							}
							log("] = %d\n", init[i].second);
						}
					}
					size = 1; for (auto d : dim2) size *= d;
					assert(size > 0);
					type_name += array_suffix(dim2);
					auto [ is_global, offset ] = add_variable(name, size, type_name);
					unordered_map<int, pair<string, int>> index_to_val;
					for (size_t i = 0; i < init.size(); ++i) {
						const auto& cursor = init[i].first;
						int val = init[i].second;
						size_t index = 0;
						for (size_t j = 0; j < dim2.size(); ++j) {
							index = index * dim2[j] + cursor[j];
						}
						string s = name + "[";
						for (size_t j = 0; j < cursor.size(); ++j) {
							if (j > 0) s += "][";
							s += to_string(cursor[j]);
						}
						s += "]";
						index_to_val.insert(make_pair(index, make_pair(s, val)));
					}
					if (is_global) {
						for (int i = 0; i < size; ++i) {
							auto it = index_to_val.find(i);
							data_sec[offset + i] = (it == index_to_val.end() ? 0 : it->second.second);
						}
					} else {
						for (int i = 0; i < size; ++i) {
							auto it = index_to_val.find(i);
							add_assembly_code(MOV, (it == index_to_val.end() ? 0 : it->second.second));
							add_assembly_code(LPUT, offset + i, it->second.first);
						}
					}
					symbol_dim.insert(make_pair(name, make_pair(size, dim2)));
				} else {
					type_name += array_suffix(dim);
					add_variable(name, size, type_name);
				}
			} else {
				auto [ is_global, offset ] = add_variable(name, 1, type_name); // TODO: support non-int type
				if (token == "=") {
					next();
					parse_expression(",");
					if (is_global) {
						add_assembly_code(PUT, offset, name + "\t" + type_name);
					} else {
						add_assembly_code(LPUT, offset, name + "\t" + type_name);
					}
				}
			}
			if (token != ",") break;
			next();
			type_name = type_prefix;
			while (token == "*" || token == "&") {
				type_name += token;
				next();
			}
			name = token; next();
			log<3>("[DEBUG] => another variable '%s', type='%s'\n", name.c_str(), type_name.c_str());
		}
		expect_token(";", "variable");
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x568, %rsp            # imm = 0x568
leaq -0x90(%rbp), %rbx
movq %rbx, %rdi
callq 0x58ed
leaq -0x368(%rbp), %rdi
movq %rbx, %rsi
callq 0x3270
leaq 0x17062(%rip), %rsi     # 0x21290
leaq -0x70(%rbp), %rdi
callq 0x3270
callq 0x4fdf
leaq 0x1704d(%rip), %rdi     # 0x21290
leaq 0xc77d(%rip), %rsi      # 0x169c7
callq 0xf4c8
movq -0x70(%rbp), %rsi
movq -0x90(%rbp), %rdx
testb %al, %al
je 0xa355
leaq 0xc7d9(%rip), %rdi      # 0x16a42
xorl %eax, %eax
callq 0xf138
movq 0x17041(%rip), %rdi     # 0x212b8
cmpq %rdi, 0x17032(%rip)     # 0x212b0
je 0xa2a2
addq $-0x40, %rdi
leaq 0xc4a1(%rip), %rsi      # 0x1672c
callq 0xf65a
testb %al, %al
je 0xa2a2
leaq 0xc7cc(%rip), %rdi      # 0x16a67
xorl %eax, %eax
callq 0xf410
callq 0x4fdf
xorps %xmm0, %xmm0
movaps %xmm0, -0x50(%rbp)
andq $0x0, -0x40(%rbp)
leaq 0x16fd6(%rip), %rdi     # 0x21290
leaq 0xc8c7(%rip), %rsi      # 0x16b88
callq 0xf65a
testb %al, %al
je 0xad3b
leaq -0x1e8(%rbp), %rbx
leaq 0x16fb4(%rip), %r14     # 0x21290
leaq -0x140(%rbp), %r15
leaq -0x1a8(%rbp), %r12
leaq 0xbf1b(%rip), %r13      # 0x1620c
movq %rbx, %rdi
callq 0x58ed
movq %r15, %rdi
movq %r14, %rsi
callq 0x3270
callq 0x4fdf
movq %r12, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x106b2
leaq -0x50(%rbp), %rdi
movq %r12, %rsi
callq 0x13d30
movq %r12, %rdi
callq 0xf780
movq %r14, %rdi
movq %r13, %rsi
callq 0xf65a
testb %al, %al
jne 0xad23
callq 0x4fdf
movq %r15, %rdi
callq 0x3368
movq %rbx, %rdi
callq 0x3368
jmp 0xa2f1
leaq 0xc73c(%rip), %rdi      # 0x16a98
xorl %eax, %eax
callq 0xf138
leaq 0x16f26(%rip), %r13     # 0x21290
leaq -0x1a8(%rbp), %rbx
movq %r13, %rdi
leaq 0xc7e7(%rip), %rsi      # 0x16b62
callq 0xf4c8
testb %al, %al
je 0xa4b8
callq 0x4fdf
xorps %xmm0, %xmm0
movaps %xmm0, -0xc0(%rbp)
andq $0x0, -0xb0(%rbp)
andl $0x0, -0x1a8(%rbp)
movq %r13, %rdi
leaq 0xbe5e(%rip), %rsi      # 0x1620e
callq 0xf65a
testb %al, %al
je 0xa488
cmpl $0x2, 0x16ec4(%rip)     # 0x21288
je 0xa3db
movq 0x16ec3(%rip), %rsi     # 0x21290
leaq 0xc6e9(%rip), %rdi      # 0x16abd
xorl %eax, %eax
callq 0xf410
leaq -0x428(%rbp), %rdi
movq %r13, %rsi
callq 0x3270
leaq -0x428(%rbp), %r14
movq %r14, %rdi
callq 0x5650
movl %eax, -0x1a8(%rbp)
movq %r14, %rdi
callq 0x3368
cmpl $0x0, -0x1a8(%rbp)
jg 0xa425
movq 0x16e79(%rip), %rsi     # 0x21290
leaq 0xc6d0(%rip), %rdi      # 0x16aee
xorl %eax, %eax
callq 0xf410
callq 0x4fdf
leaq -0x408(%rbp), %rdi
leaq 0xbdd6(%rip), %rsi      # 0x1620e
leaq -0x1e8(%rbp), %rdx
callq 0xf1f8
leaq -0x528(%rbp), %r15
movq %r15, %rdi
leaq 0xc6d4(%rip), %rsi      # 0x16b29
leaq -0x140(%rbp), %rdx
callq 0xf1f8
leaq -0x408(%rbp), %r12
movq %r12, %rdi
movq %r15, %rsi
callq 0x540c
movq %r15, %rdi
callq 0x3368
movq %r12, %rdi
callq 0x3368
callq 0x4fdf
leaq -0xc0(%rbp), %rdi
movq %rbx, %rsi
callq 0xf2e4
movq %r13, %rdi
leaq 0xc6c1(%rip), %rsi      # 0x16b62
callq 0xf65a
testb %al, %al
jne 0xa5b0
callq 0x4fdf
jmp 0xa39f
leaq -0x388(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x3270
leaq -0x4a8(%rbp), %r15
movq %r15, %rdi
leaq -0x90(%rbp), %rsi
callq 0x3270
leaq -0x388(%rbp), %r14
movq %r14, %rdi
pushq $0x1
popq %rsi
movq %r15, %rdx
callq 0x4477
movq %rdx, -0x38(%rbp)
movl %eax, %r12d
movq %r15, %rdi
callq 0x3368
movq %r14, %rdi
callq 0x3368
movq %r13, %rdi
leaq 0xbcd2(%rip), %rsi      # 0x161e6
callq 0xf4c8
testb %al, %al
je 0xac25
callq 0x4fdf
leaq -0x488(%rbp), %r14
movq %r14, %rdi
leaq 0xbcd5(%rip), %rsi      # 0x1620c
movq %rbx, %rdx
callq 0xf1f8
leaq -0x588(%rbp), %r15
movq %r15, %rdi
movq %r14, %rsi
xorl %edx, %edx
pushq $0x1
popq %rcx
callq 0x7431
movq %r15, %rdi
callq 0x3368
movq %r14, %rdi
callq 0x3368
testb $0x1, %r12b
je 0xaa97
movq %rbx, %rdi
leaq -0x70(%rbp), %rsi
leaq 0xcf05(%rip), %rdx      # 0x17483
callq 0xf35b
leaq -0x468(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
leaq -0x90(%rbp), %rdx
callq 0xf332
pushq $0x7
popq %rdi
movq -0x38(%rbp), %rsi
movq %r14, %rdx
callq 0x4a27
jmp 0xaad2
movq -0xc0(%rbp), %rax
movq -0xb8(%rbp), %rcx
pushq $0x1
popq %r12
cmpq %rcx, %rax
je 0xa5d1
imull (%rax), %r12d
addq $0x4, %rax
jmp 0xa5c2
cmpl $0x2, 0x16ff8(%rip)     # 0x215d0
jle 0xa63f
leaq 0xc54e(%rip), %rdi      # 0x16b2f
xorl %eax, %eax
callq 0xf09e
xorl %r15d, %r15d
movq -0xc0(%rbp), %rax
movq -0xb8(%rbp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rcx, %r15
jae 0xa631
testq %r15, %r15
leaq 0xbbfd(%rip), %rsi      # 0x1620c
leaq 0xce6e(%rip), %rcx      # 0x17484
cmoveq %rcx, %rsi
movl (%rax,%r15,4), %edx
leaq 0xc518(%rip), %rdi      # 0x16b3d
xorl %eax, %eax
callq 0xf09e
incq %r15
jmp 0xa5eb
leaq 0xcdcf(%rip), %rdi      # 0x17407
xorl %eax, %eax
callq 0xf09e
testl %r12d, %r12d
jne 0xa665
movq %r13, %rdi
leaq 0xbb98(%rip), %rsi      # 0x161e6
callq 0xf65a
testb %al, %al
je 0xa665
leaq 0xc4e4(%rip), %rdi      # 0x16b42
xorl %eax, %eax
callq 0xf410
movq %r13, %rdi
leaq 0xbb77(%rip), %rsi      # 0x161e6
callq 0xf4c8
testb %al, %al
je 0xa77b
callq 0x4fdf
leaq -0x50(%rbp), %r15
movq %r15, %rdi
leaq -0xc0(%rbp), %r14
movq %r14, %rsi
callq 0xf728
xorps %xmm0, %xmm0
movaps %xmm0, -0x200(%rbp)
andq $0x0, -0x1f0(%rbp)
movaps %xmm0, -0xe0(%rbp)
andq $0x0, -0xd0(%rbp)
movq %r14, %rdi
movq %r15, %rsi
leaq -0x200(%rbp), %rdx
leaq -0xe0(%rbp), %rcx
callq 0x9f88
cmpl $0x3, 0x16ef8(%rip)     # 0x215d0
jl 0xa7f1
xorl %r12d, %r12d
movq -0xd8(%rbp), %rax
subq -0xe0(%rbp), %rax
sarq $0x5, %rax
cmpq %rax, %r12
jae 0xa7f1
leaq 0xc454(%rip), %rdi      # 0x16b57
movq %r12, %rsi
xorl %eax, %eax
callq 0xf09e
xorl %r15d, %r15d
movq -0xe0(%rbp), %rax
movq %r12, %rdx
shlq $0x5, %rdx
movq (%rax,%rdx), %rcx
movq 0x8(%rax,%rdx), %rsi
subq %rcx, %rsi
sarq $0x2, %rsi
cmpq %rsi, %r15
jae 0xa75f
testq %r15, %r15
leaq 0xbb15(%rip), %rsi      # 0x16252
leaq 0xcd40(%rip), %rax      # 0x17484
cmoveq %rax, %rsi
movl (%rcx,%r15,4), %edx
leaq 0xc3ea(%rip), %rdi      # 0x16b3d
xorl %eax, %eax
callq 0xf09e
incq %r15
jmp 0xa710
addq %rdx, %rax
movl 0x18(%rax), %esi
leaq 0xc3f8(%rip), %rdi      # 0x16b64
xorl %eax, %eax
callq 0xf09e
incq %r12
jmp 0xa6e1
movq %rbx, %rdi
leaq -0xc0(%rbp), %rsi
callq 0x93e8
leaq -0x90(%rbp), %rdi
movq %rbx, %rsi
callq 0x3350
movq %rbx, %rdi
callq 0x3368
leaq -0x3a8(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x3270
leaq -0x4c8(%rbp), %r15
movq %r15, %rdi
leaq -0x90(%rbp), %rsi
callq 0x3270
leaq -0x3a8(%rbp), %r14
movq %r14, %rdi
movl %r12d, %esi
movq %r15, %rdx
callq 0x4477
movq %r15, %rdi
callq 0x3368
movq %r14, %rdi
callq 0x3368
jmp 0xac19
movq -0x50(%rbp), %rax
movq -0x48(%rbp), %rcx
pushq $0x1
popq %rdx
movl %edx, -0x38(%rbp)
cmpq %rcx, %rax
je 0xa813
movl -0x38(%rbp), %edx
imull (%rax), %edx
movl %edx, -0x38(%rbp)
addq $0x4, %rax
jmp 0xa7ff
cmpl $0x0, -0x38(%rbp)
jle 0xb1d4
movq %rbx, %rdi
leaq -0x50(%rbp), %rsi
callq 0x93e8
leaq -0x90(%rbp), %rdi
movq %rbx, %rsi
callq 0x3350
movq %rbx, %rdi
callq 0x3368
leaq -0x3e8(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x3270
leaq -0x508(%rbp), %r15
movq %r15, %rdi
leaq -0x90(%rbp), %rsi
callq 0x3270
leaq -0x3e8(%rbp), %r14
movq %r14, %rdi
movl -0x38(%rbp), %esi
movq %r15, %rdx
callq 0x4477
movb %al, -0x29(%rbp)
movq %rdx, -0x108(%rbp)
movq %r15, %rdi
callq 0x3368
movq %r14, %rdi
callq 0x3368
leaq -0x1b8(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq $0x1, -0x1e0(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x1c8(%rbp) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
xorl %edx, %edx
movq -0xe0(%rbp), %rax
movq -0xd8(%rbp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
cmpq %rcx, %rdx
jae 0xaa30
movq %rdx, -0x208(%rbp)
movq %rdx, %rcx
shlq $0x5, %rcx
leaq (%rax,%rcx), %r13
movl 0x18(%rax,%rcx), %eax
movl %eax, -0x94(%rbp)
movq -0x50(%rbp), %rax
movq -0x48(%rbp), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
xorl %r15d, %r15d
xorl %edx, %edx
cmpq %rdx, %rcx
je 0xa930
movslq (%rax,%rdx,4), %rsi
imulq %rsi, %r15
movq (%r13), %rsi
movslq (%rsi,%rdx,4), %rsi
addq %rsi, %r15
incq %rdx
jmp 0xa913
leaq -0x100(%rbp), %rdi
leaq -0x70(%rbp), %rsi
leaq 0xc220(%rip), %rdx      # 0x16b62
callq 0xf35b
xorl %r12d, %r12d
movq (%r13), %rax
movq 0x8(%r13), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rcx, %r12
jae 0xa9a2
testq %r12, %r12
je 0xa97a
leaq -0x100(%rbp), %rdi
leaq 0xc219(%rip), %rsi      # 0x16b8a
callq 0x3330
movq (%r13), %rax
movl (%rax,%r12,4), %esi
movq %rbx, %rdi
callq 0xf6c8
leaq -0x100(%rbp), %rdi
movq %rbx, %rsi
callq 0x3350
movq %rbx, %rdi
callq 0x3368
incq %r12
jmp 0xa94a
leaq -0x100(%rbp), %r12
movq %r12, %rdi
leaq 0xb85b(%rip), %rsi      # 0x1620e
callq 0x3330
leaq -0x140(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0x3270
leaq -0x1a0(%rbp), %r12
leaq 0x168b8(%rip), %r13     # 0x21290
movl -0x94(%rbp), %eax
movl %eax, -0x120(%rbp)
movq %r15, -0x1a8(%rbp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x10948
leaq -0x1e8(%rbp), %rdi
movq %rbx, %rsi
callq 0x14214
movq %r12, %rdi
callq 0x3368
movq %r14, %rdi
callq 0x3368
leaq -0x100(%rbp), %rdi
callq 0x3368
movq -0x208(%rbp), %rdx
incq %rdx
jmp 0xa8c5
testb $0x1, -0x29(%rbp)
je 0xaae7
xorl %eax, %eax
leaq -0x140(%rbp), %r15
movl %eax, -0x1a8(%rbp)
cmpl -0x38(%rbp), %eax
jge 0xaba1
leaq -0x1e8(%rbp), %rdi
movq %rbx, %rsi
callq 0x145bc
testq %rax, %rax
je 0xaa6b
movl 0x30(%rax), %eax
jmp 0xaa6d
xorl %eax, %eax
movq -0x108(%rbp), %rcx
leaq (,%rcx,4), %rcx
addq 0x16895(%rip), %rcx     # 0x21318
movslq -0x1a8(%rbp), %rdx
movl %eax, (%rcx,%rdx,4)
movl -0x1a8(%rbp), %eax
incl %eax
jmp 0xaa43
movq %rbx, %rdi
leaq -0x70(%rbp), %rsi
leaq 0xc9de(%rip), %rdx      # 0x17483
callq 0xf35b
leaq -0x448(%rbp), %r14
movq %r14, %rdi
movq %rbx, %rsi
leaq -0x90(%rbp), %rdx
callq 0xf332
pushq $0xa
popq %rdi
movq -0x38(%rbp), %rsi
movq %r14, %rdx
callq 0x4a27
movq %r14, %rdi
callq 0x3368
movq %rbx, %rdi
callq 0x3368
jmp 0xac25
xorl %eax, %eax
leaq -0x140(%rbp), %r15
movl %eax, -0x1a8(%rbp)
cmpl -0x38(%rbp), %eax
jge 0xaba1
leaq -0x1e8(%rbp), %rdi
movq %rbx, %rsi
callq 0x145bc
movq %rax, %r12
testq %rax, %rax
je 0xab1d
movl 0x30(%r12), %r13d
jmp 0xab20
xorl %r13d, %r13d
leaq -0x4e8(%rbp), %r14
movq %r14, %rdi
leaq 0xc953(%rip), %rsi      # 0x17484
movq %r15, %rdx
callq 0xf1f8
pushq $0x4
popq %rdi
movl %r13d, %esi
movq %r14, %rdx
callq 0x4a27
movq %r14, %rdi
callq 0x3368
movl -0x1a8(%rbp), %r13d
addq $0x10, %r12
leaq -0x3c8(%rbp), %rdi
movq %r12, %rsi
callq 0x3270
addl -0x108(%rbp), %r13d
pushq $0xa
popq %rdi
movl %r13d, %esi
leaq -0x3c8(%rbp), %r14
movq %r14, %rdx
callq 0x4a27
movq %r14, %rdi
callq 0x3368
movl -0x1a8(%rbp), %eax
incl %eax
leaq 0x166f4(%rip), %r13     # 0x21290
jmp 0xaaf0
movl -0x38(%rbp), %eax
movl %eax, -0x140(%rbp)
leaq -0x138(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0xf728
movq %rbx, %rdi
leaq -0x70(%rbp), %rsi
movq %r15, %rdx
callq 0x10966
leaq 0x168a0(%rip), %rdi     # 0x21470
movq %rbx, %rsi
callq 0x145de
movq %rbx, %rdi
callq 0xf830
leaq -0x138(%rbp), %rdi
callq 0x111bc
leaq -0x1e8(%rbp), %rdi
callq 0x109ba
leaq -0xe0(%rbp), %rdi
callq 0xf850
leaq -0x200(%rbp), %rdi
callq 0x111bc
leaq -0x50(%rbp), %rdi
callq 0x111bc
leaq -0xc0(%rbp), %rdi
callq 0x111bc
movq %r13, %rdi
leaq 0xb5dd(%rip), %rsi      # 0x1620c
callq 0xf65a
testb %al, %al
jne 0xacbf
callq 0x4fdf
leaq -0x90(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x3130
movq %r13, %rdi
leaq 0xb573(%rip), %rsi      # 0x161d1
callq 0xf4c8
testb %al, %al
jne 0xac7a
movq %r13, %rdi
leaq 0xb57a(%rip), %rsi      # 0x161eb
callq 0xf4c8
testb %al, %al
je 0xac90
leaq -0x90(%rbp), %rdi
movq %r13, %rsi
callq 0x3350
callq 0x4fdf
jmp 0xac54
leaq -0x70(%rbp), %rdi
movq %r13, %rsi
callq 0x3130
callq 0x4fdf
movq -0x70(%rbp), %rsi
movq -0x90(%rbp), %rdx
leaq 0xbeda(%rip), %rdi      # 0x16b8d
xorl %eax, %eax
callq 0xf138
jmp 0xa371
leaq 0xb54c(%rip), %rsi      # 0x16212
leaq -0x248(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0xf1f8
leaq 0xbeda(%rip), %rsi      # 0x16bba
leaq -0x228(%rbp), %rdi
leaq -0x1e8(%rbp), %rdx
callq 0xf1f8
leaq -0x248(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x540c
leaq -0x228(%rbp), %rdi
callq 0x3368
leaq -0x248(%rbp), %rdi
callq 0x3368
jmp 0xb1a1
leaq -0x140(%rbp), %rdi
callq 0x3368
leaq -0x1e8(%rbp), %rdi
callq 0x3368
leaq 0xbe46(%rip), %rsi      # 0x16b88
leaq -0x348(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0xf1f8
leaq 0xbd2d(%rip), %rsi      # 0x16a89
leaq -0x328(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0xf5e4
leaq -0x348(%rbp), %rdi
leaq -0x328(%rbp), %rsi
callq 0x540c
leaq -0x328(%rbp), %rdi
callq 0x3368
leaq -0x348(%rbp), %rdi
callq 0x3368
leaq 0xbc29(%rip), %rsi      # 0x169c7
leaq -0x100(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0xf1f8
xorl %r15d, %r15d
leaq 0xb451(%rip), %r13      # 0x1620c
leaq -0x1a8(%rbp), %rbx
leaq -0x100(%rbp), %r14
xorl %r12d, %r12d
movq -0x50(%rbp), %rdx
movq -0x48(%rbp), %rax
subq %rdx, %rax
sarq $0x6, %rax
cmpq %rax, %r12
jae 0xae18
testq %r12, %r12
movq %r13, %rsi
leaq 0xc697(%rip), %rax      # 0x17484
cmoveq %rax, %rsi
addq %r15, %rdx
movq %rbx, %rdi
callq 0xf5e4
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3350
movq %rbx, %rdi
callq 0x3368
incq %r12
addq $0x40, %r15
jmp 0xadcc
leaq 0xbd69(%rip), %rsi      # 0x16b88
leaq -0x100(%rbp), %rdi
callq 0x3330
leaq -0x308(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x3270
leaq -0x2e8(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3270
leaq -0x2c8(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x3270
movq -0x48(%rbp), %rcx
subq -0x50(%rbp), %rcx
shrq $0x6, %rcx
leaq -0x308(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
leaq -0x2c8(%rbp), %rdx
callq 0x47b8
leaq -0x2c8(%rbp), %rdi
callq 0x3368
leaq -0x2e8(%rbp), %rdi
callq 0x3368
leaq -0x308(%rbp), %rdi
callq 0x3368
leaq 0xb87a(%rip), %rax      # 0x1672c
leaq -0x1e0(%rbp), %r14
movq %rax, -0x8(%r14)
leaq -0x70(%rbp), %rsi
movq %r14, %rdi
callq 0x3270
leaq -0x1a8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0xf7a0
leaq 0x163cd(%rip), %rdi     # 0x212b0
leaq -0x1a8(%rbp), %rsi
callq 0x13d30
leaq -0x1a8(%rbp), %rdi
callq 0xf780
movq %r14, %rdi
callq 0x3368
movq -0x48(%rbp), %rax
subq -0x50(%rbp), %rax
sarq $0x6, %rax
leaq -0x1e8(%rbp), %r8
movq %rax, (%r8)
leaq -0x1a8(%rbp), %rdi
leaq -0x70(%rbp), %rsi
leaq -0x100(%rbp), %rdx
leaq -0x90(%rbp), %rcx
callq 0x106e8
leaq 0x165a2(%rip), %rdi     # 0x214e0
leaq -0x1a8(%rbp), %rbx
movq %rbx, %rsi
callq 0xf7da
movq %rbx, %rdi
callq 0xf7fa
callq 0x4fdf
leaq 0xb511(%rip), %rsi      # 0x16472
leaq -0x2a8(%rbp), %rdi
leaq -0x200(%rbp), %rdx
callq 0xf1f8
leaq 0xb7ba(%rip), %rsi      # 0x16735
leaq -0xc0(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0xf5e4
leaq 0xbb01(%rip), %rdx      # 0x16a93
leaq -0x140(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xf309
leaq -0x1e8(%rbp), %rdi
leaq -0x140(%rbp), %rsi
leaq -0x70(%rbp), %rdx
callq 0xf332
leaq -0x1a8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
leaq -0x90(%rbp), %rdx
callq 0xf332
leaq 0xbab9(%rip), %rdx      # 0x16a96
leaq -0x288(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xf309
leaq -0x2a8(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x540c
leaq -0x288(%rbp), %rdi
callq 0x3368
leaq -0x1a8(%rbp), %rdi
callq 0x3368
leaq -0x1e8(%rbp), %rdi
callq 0x3368
leaq -0x140(%rbp), %rdi
callq 0x3368
leaq -0xc0(%rbp), %rdi
callq 0x3368
leaq -0x2a8(%rbp), %rdi
callq 0x3368
leaq 0xc432(%rip), %rsi      # 0x17484
leaq -0x268(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0xf1f8
pushq $0x23
popq %rdi
leaq -0x268(%rbp), %rdx
xorl %esi, %esi
callq 0x4a27
movq %rax, %rbx
leaq -0x268(%rbp), %rdi
callq 0x3368
incq %rbx
leaq -0x110(%rbp), %rax
andq $0x0, -0x10(%rax)
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
movq %rbx, -0x8(%r14)
leaq -0x140(%rbp), %rsi
movq %r14, %rdi
callq 0x107a0
leaq -0x1a8(%rbp), %rbx
leaq -0x1e8(%rbp), %rsi
movq %rbx, %rdi
callq 0xf81a
leaq 0x1625e(%rip), %rdi     # 0x21340
movq %rbx, %rsi
callq 0x13fc2
leaq -0x1a0(%rbp), %rdi
callq 0x1084a
movq %r14, %rdi
callq 0x1084a
leaq -0x140(%rbp), %rdi
callq 0x1084a
pushq $0x1
popq %r15
pushq $0x20
popq %r12
xorl %r13d, %r13d
leaq -0x568(%rbp), %rbx
leaq -0x548(%rbp), %r14
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rax
subq %rsi, %rax
sarq $0x6, %rax
cmpq %rax, %r13
jae 0xb18c
addq %r12, %rsi
movq %rbx, %rdi
callq 0x3270
movq -0x50(%rbp), %rax
leaq (%rax,%r12), %rsi
addq $-0x20, %rsi
movq %r14, %rdi
callq 0x3270
movq -0x48(%rbp), %rdx
subq -0x50(%rbp), %rdx
sarq $0x6, %rdx
addq %r15, %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x46ef
movq %r14, %rdi
callq 0x3368
movq %rbx, %rdi
callq 0x3368
incq %r13
decq %r15
addq $0x40, %r12
jmp 0xb123
leaq -0x100(%rbp), %rdi
callq 0x3368
leaq -0x50(%rbp), %rdi
callq 0xefc2
leaq -0x70(%rbp), %rdi
callq 0x3368
leaq -0x368(%rbp), %rdi
callq 0x3368
leaq -0x90(%rbp), %rdi
callq 0x3368
addq $0x568, %rsp            # imm = 0x568
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xb991(%rip), %rdi      # 0x16b6c
leaq 0xb255(%rip), %rsi      # 0x16437
leaq 0xb98c(%rip), %rcx      # 0x16b75
movl $0x45f, %edx            # imm = 0x45F
callq 0x3150
movq %rax, %rbx
leaq -0x228(%rbp), %rdi
callq 0x3368
jmp 0xb207
movq %rax, %rbx
leaq -0x248(%rbp), %rdi
jmp 0xb466
jmp 0xb56c
movq %rax, %rbx
leaq -0x1a0(%rbp), %rdi
callq 0x1084a
movq %r14, %rdi
callq 0x1084a
leaq -0x140(%rbp), %rdi
callq 0x1084a
jmp 0xb4c5
movq %rax, %rbx
leaq -0x268(%rbp), %rdi
jmp 0xb4bb
jmp 0xb4c2
movq %rax, %rbx
leaq -0x288(%rbp), %rdi
callq 0x3368
jmp 0xb268
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
callq 0x3368
jmp 0xb279
movq %rax, %rbx
leaq -0x1e8(%rbp), %rdi
callq 0x3368
jmp 0xb28a
movq %rax, %rbx
leaq -0x140(%rbp), %rdi
callq 0x3368
jmp 0xb29b
movq %rax, %rbx
leaq -0xc0(%rbp), %rdi
callq 0x3368
leaq -0x2a8(%rbp), %rdi
jmp 0xb4bb
movq %rax, %rbx
jmp 0xb2a7
jmp 0xb4c2
jmp 0xb4c2
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
callq 0xf780
jmp 0xb2d6
movq %rax, %rbx
movq %r14, %rdi
jmp 0xb4bb
jmp 0xb4c2
movq %rax, %rbx
leaq -0x2c8(%rbp), %rdi
callq 0x3368
jmp 0xb2f7
movq %rax, %rbx
leaq -0x2e8(%rbp), %rdi
callq 0x3368
jmp 0xb308
movq %rax, %rbx
leaq -0x308(%rbp), %rdi
jmp 0xb4bb
jmp 0xb470
movq %rax, %rbx
leaq -0x328(%rbp), %rdi
callq 0x3368
jmp 0xb32d
movq %rax, %rbx
leaq -0x348(%rbp), %rdi
jmp 0xb4e4
jmp 0xb470
movq %rax, %rbx
jmp 0xb5d5
movq %rax, %rbx
jmp 0xb5e1
jmp 0xb4c2
jmp 0xb56c
movq %rax, %rbx
leaq -0x468(%rbp), %rdi
jmp 0xb375
jmp 0xb37c
jmp 0xb56c
movq %rax, %rbx
leaq -0x448(%rbp), %rdi
callq 0x3368
jmp 0xb37f
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
jmp 0xb466
jmp 0xb56c
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
callq 0xf830
jmp 0xb3a4
movq %rax, %rbx
leaq -0x138(%rbp), %rdi
callq 0x111bc
jmp 0xb593
jmp 0xb532
jmp 0xb3ec
jmp 0xb3ec
movq %rax, %rbx
leaq -0x508(%rbp), %rdi
callq 0x3368
jmp 0xb3d2
movq %rax, %rbx
leaq -0x3e8(%rbp), %rdi
jmp 0xb40d
movq %rax, %rbx
leaq -0x4c8(%rbp), %rdi
callq 0x3368
jmp 0xb3f7
movq %rax, %rbx
jmp 0xb59f
movq %rax, %rbx
leaq -0x3a8(%rbp), %rdi
jmp 0xb560
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
callq 0x3368
jmp 0xb59f
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
jmp 0xb560
jmp 0xb567
jmp 0xb567
movq %rax, %rbx
leaq -0x488(%rbp), %rdi
jmp 0xb466
jmp 0xb56c
jmp 0xb56c
movq %rax, %rbx
jmp 0xb45f
jmp 0xb56c
movq %rax, %rbx
leaq -0x4a8(%rbp), %rdi
callq 0x3368
leaq -0x388(%rbp), %rdi
callq 0x3368
jmp 0xb5cc
movq %rax, %rbx
jmp 0xb4e9
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
callq 0xf780
jmp 0xb4d1
jmp 0xb4ce
movq %rax, %rbx
jmp 0xb4dd
jmp 0xb567
movq %rax, %rbx
leaq -0x548(%rbp), %rdi
callq 0x3368
jmp 0xb4a6
movq %rax, %rbx
leaq -0x568(%rbp), %rdi
jmp 0xb4bb
jmp 0xb4c2
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
callq 0x3368
jmp 0xb4c5
movq %rax, %rbx
leaq -0x100(%rbp), %rdi
jmp 0xb4e4
movq %rax, %rbx
leaq -0x140(%rbp), %rdi
callq 0x3368
leaq -0x1e8(%rbp), %rdi
callq 0x3368
leaq -0x50(%rbp), %rdi
callq 0xefc2
jmp 0xb5cc
movq %rax, %rbx
leaq -0x3c8(%rbp), %rdi
jmp 0xb58e
movq %rax, %rbx
leaq -0x4e8(%rbp), %rdi
jmp 0xb58e
jmp 0xb532
jmp 0xb532
jmp 0xb56c
jmp 0xb532
jmp 0xb584
movq %rax, %rbx
movq %r12, %rdi
callq 0x3368
leaq -0x140(%rbp), %rdi
jmp 0xb57d
jmp 0xb584
movq %rax, %rbx
jmp 0xb593
movq %rax, %rbx
leaq -0x428(%rbp), %rdi
jmp 0xb560
movq %rax, %rbx
jmp 0xb559
jmp 0xb567
movq %rax, %rbx
leaq -0x528(%rbp), %rdi
callq 0x3368
leaq -0x408(%rbp), %rdi
callq 0x3368
jmp 0xb5c0
movq %rax, %rbx
jmp 0xb5c0
movq %rax, %rbx
jmp 0xb5cc
jmp 0xb584
movq %rax, %rbx
leaq -0x1a8(%rbp), %rdi
callq 0x3368
jmp 0xb587
movq %rax, %rbx
leaq -0x100(%rbp), %rdi
callq 0x3368
leaq -0x1e8(%rbp), %rdi
callq 0x109ba
leaq -0xe0(%rbp), %rdi
callq 0xf850
leaq -0x200(%rbp), %rdi
callq 0x111bc
leaq -0x50(%rbp), %rdi
callq 0x111bc
leaq -0xc0(%rbp), %rdi
callq 0x111bc
leaq -0x70(%rbp), %rdi
callq 0x3368
leaq -0x368(%rbp), %rdi
callq 0x3368
leaq -0x90(%rbp), %rdi
callq 0x3368
movq %rbx, %rdi
callq 0x3310