// File: /workspace/github_cpp_makefile_star2_O3/lotuskip[P]yuxtapa/server/network.cpp
// Function: Network::receive_n_handle()
bool Network::receive_n_handle()
{
	sockaddr_storage them;
	socklen_t addr_len = sizeof(them);
	unsigned char mid;
	list<Player>::iterator pit;
	char handled = 0;
	short msglen;
	unsigned short ush;
	string s;
	while(handled++ < 20 && // handle at most 20 messages; then return control
		(msglen = recvfrom(s_me, recv_buffer.getw(), BUFFER_SIZE, 0,
			(sockaddr *)&them, &addr_len)) != -1)
	{
		mid = recv_buffer.read_ch();
		switch(mid)
		{
		case MID_HELLO:
		{
			// Check that interaction versions match:
			if(recv_buffer.read_sh() != INTR_VERSION)
			{
				send_buffer.clear();
				send_buffer.add((unsigned char)MID_HELLO_VERSION);
				do_send_to(&them, addr_len);
				break;
			}
			string pl_passw = "";
			ush = recv_buffer.read_sh();
			if(ush != 0xFFFF) // indicates a password has been sent, too
				recv_buffer.read_str(pl_passw);
			recv_buffer.read_str(s); // read nick
			if(num_syms(s) > MAX_NICK_LEN)
			{
				/* Client passed version control but has too long nick??
				 * That means it's a tampered client! Ignore the bastard. */
				break;
			}
			ush = player_hello(ush, pl_passw, s, them, false);
			// Note: player_hello can call something that uses send_buffer!
			send_buffer.clear();
			if(ush == ID_STEAL)
			{
				send_buffer.add((unsigned char)MID_HELLO_STEAL);
				do_send_to(&them, addr_len);
				break;
			}
			/*else*/ if(ush == IP_BANNED)
			{
				send_buffer.add((unsigned char)MID_HELLO_BANNED);
				do_send_to(&them, addr_len);
				break;
			}
			/*else*/ if(ush == SERVER_FULL)
			{
				send_buffer.add((unsigned char)MID_HELLO_FULL);
				do_send_to(&them, addr_len);
				break;
			}
			/*else*/ if(ush == JOIN_OK_ID_OK)
				send_buffer.add((unsigned char)MID_HELLO);
			else
			{
				send_buffer.add((unsigned char)MID_HELLO_NEWID);
				send_buffer.add(ush);
				send_buffer.add(pl_passw);
			}
			do_send_to(&them, addr_len);
			// Send greeting:
			s = Config::greeting_str();
			construct_msg(s, DEF_MSG_COL);
			do_send_to(&them, addr_len);
			list<Player>::iterator pit = (--cur_players.end());
			if(intermission) // send the miniview to the new player
			{
				do_send_to(&them, addr_len, Game::get_miniview());
				Game::construct_team_msgs(pit);
			}
			else
				Game::send_flag_upds(pit);
			time(&(pit->last_switched_cl));

			Game::send_state_change(pit);
			Game::send_team_upds(pit);
			to_chat(pit->nick + " connected.");
			break;
		}
		case MID_BOTHELLO:
		{
			send_buffer.clear();
			// Check that interaction versions match:
			if(recv_buffer.read_sh() != INTR_VERSION)
			{
				send_buffer.add((unsigned char)MID_HELLO_VERSION);
				do_send_to(&them, addr_len);
				to_log("Incompatible bot connection.");
				break;
			}
			ush = recv_buffer.read_sh();
			if((ush = bot_connect(ush, them)) <= HIGHEST_VALID_ID)
			{
				send_buffer.add((unsigned char)MID_HELLO_NEWID);
				send_buffer.add(ush);
				send_buffer.add((unsigned short)Config::int_settings[Config::IS_TURNMS]);
				do_send_to(&them, addr_len);
			}
			break;
		}
		case MID_QUIT:
			if((pit = who_is_this()) != cur_players.end())
				Game::remove_player(pit, " disconnected.");
			break;
		case MID_SAY_ALOUD:
			if(!intermission && (pit = who_is_this()) != cur_players.end()
				&& pit->is_alive() && voices.find(pit->own_pc->getpos()) == voices.end())
			{
				recv_buffer.read_str(s);
				// A proper client wouldn't send too long messages:
				if(num_syms(s) > MSG_WIN_X-3)
					cheat_attempt(pit);
				else
				{
					add_voice(pit->own_pc->getpos(), s);
					event_set.insert(pit->own_pc->getpos());
				}
			}
			break;
		case MID_SAY_CHAT:
			if((pit = who_is_this()) != cur_players.end())
			{
				recv_buffer.read_str(s);
				// Check if it is a !command
				if(!s.empty() && s[0] == '!'
					&& process_cmd(pit, s))
					break;
				// (process_cmd returns true if the command should not be
				// broadcast)

				// Else, we forward the message to all clients (and add the
				// speakers nick to the end). Note that we are using the
				// "receive buffer" for sending, in order to avoid copying.
				if(!pit->muted)
				{
					*(recv_buffer.getw()+1) = *(recv_buffer.getw()+2) = 0;
					recv_buffer.set_amount(msglen);
					recv_buffer.add(pit->nick);
					recv_buffer.add((unsigned char)pit->team);
					broadcast(0xFFFF, recv_buffer);
				}
			}
			break;
		case MID_VIEW_UPD:
			if((pit = who_is_this()) != cur_players.end())
			{
				ush = recv_buffer.read_sh();
				// 't' is an ack from a client "I've received the view
				// update for turn t'. But the message might be delayed;
				// must check if the player has acted since:
				if(ush > pit->last_heard_of)
					pit->last_heard_of = ush;
			}
			break;
		case MID_TAKE_ACTION:
			if(!intermission && (pit = who_is_this()) != cur_players.end()
				&& pit->action_queue.size() < MAX_AXN_QUEUE_SIZE)
			{
				// First check sequentiality. If this action is "timestamped" earlier than
				// the latest action we have actually received from this player, ignore it!
				ush = recv_buffer.read_sh(); // turn
				if(ush >= pit->last_acted_on_turn)
				{
					// This is the latest we've heard from this client:
					if(ush > pit->last_heard_of)
						pit->last_heard_of = ush;

					unsigned char an = recv_buffer.read_ch(); // action number for the turn
					if(ush > pit->last_acted_on_turn || an > pit->last_axn_number)
					{
						// we accept this action, so update the values:
						pit->last_acted_on_turn = ush;
						pit->last_axn_number = an;

						// Now, construct the action:
						if((mid = recv_buffer.read_ch()) == XN_SHOOT) // contains two more values
						{
							// If either coordinate is too large by abs-val (out of screen), kick
							char xcoord = static_cast<char>(recv_buffer.read_ch());
							char ycoord = static_cast<char>(recv_buffer.read_ch());
							if(abs(xcoord) > VIEWSIZE/2 || abs(ycoord) > VIEWSIZE/2
								|| (!xcoord && !ycoord)) // both zero is bad, too
							{
#ifdef DEBUG
								to_log("Read illegal shot coordinates ("
									+ lex_cast(xcoord) + ","
									+ lex_cast(ycoord) + ")!");
#endif
								cheat_attempt(pit);
								break;
							}
							Game::player_action(pit, Axn(mid, xcoord, ycoord));
						}
						else if(mid == XN_MOVE || mid == XN_ZAP || mid == XN_HEAL
							|| mid == XN_CIRCLE_ATTACK || mid == XN_MINE) // one more value
						{
							char dir = static_cast<char>(recv_buffer.read_ch());
							if(dir > MAX_D || dir < 0 || (dir == MAX_D && mid != XN_HEAL))
							{
#ifdef DEBUG
								to_log("Read illegal direction "
									+ lex_cast(dir) + " in "
									+ lex_cast(mid) + "-type xn!");
#endif
								cheat_attempt(pit);
								break;
							}
							Game::player_action(pit, Axn(mid, dir));
						}
						else
							Game::player_action(pit, Axn(mid));
					}
					// else delivery order got messed up
				}
				// else delivery order got messed up
			}
			break;
		case MID_SPAWN_AXN:
			if((pit = who_is_this()) != cur_players.end())
				Game::class_switch(pit, e_Class(recv_buffer.read_ch()));
			break;
		case MID_TEAM_SWITCH:
			if((pit = who_is_this()) != cur_players.end())
				Game::team_switch(pit);
			break;
		case MID_TEAM_INFO:
			if((pit = who_is_this()) != cur_players.end())
				Game::send_team_info(pit);
			break;
		default: break;
		}
	}
	return (handled == 1);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x178, %rsp            # imm = 0x178
leaq -0x2c(%rbp), %rax
movl $0x80, (%rax)
leaq -0xc8(%rbp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movb $0x1, %al
xorl %ecx, %ecx
leaq 0x334d9(%rip), %rdi     # 0x41938
leaq 0x34c5a(%rip), %r15     # 0x430c0
movl %ecx, %r14d
movq %rax, -0x120(%rbp)
movl 0x33cd1(%rip), %r12d    # 0x42148
movq %rdi, %rbx
callq 0x2b118
movl $0x800, %edx            # imm = 0x800
movl %r12d, %edi
movq %rax, %rsi
xorl %ecx, %ecx
leaq -0x1a0(%rbp), %r8
leaq -0x2c(%rbp), %r9
callq 0x42c0
movq %rax, %r13
cmpw $-0x1, %r13w
je 0xf21d
movq %rbx, %rdi
callq 0x2b04c
cmpb $0x9, %al
ja 0xecf2
movzbl %al, %eax
leaq 0x1dd34(%rip), %rcx     # 0x2c1f8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbx, %rdi
callq 0x2b034
cmpw $0x3, %ax
jne 0xea7b
leaq -0x40(%rbp), %rax
movq %rax, -0x50(%rbp)
leaq -0x50(%rbp), %rdi
leaq 0x1ddfe(%rip), %rdx     # 0x2c2f0
movq %rdx, %rsi
callq 0xe01c
movq %rbx, %r13
movq %rbx, %rdi
callq 0x2b034
leaq -0x68(%rbp), %r14
movl %eax, %r12d
cmpw $-0x1, %ax
je 0xe51e
movq %r13, %rdi
leaq -0x50(%rbp), %rsi
callq 0x2b05e
movq %r13, %rdi
leaq -0xd8(%rbp), %rsi
callq 0x2b05e
leaq -0xd8(%rbp), %rdi
callq 0x2b440
cmpw $0xa, %ax
jg 0xecd9
movzwl %r12w, %edi
leaq -0x50(%rbp), %rsi
leaq -0xd8(%rbp), %rdx
leaq -0x1a0(%rbp), %rcx
xorl %r8d, %r8d
callq 0x13141
movl %eax, %r12d
leaq 0x32bbd(%rip), %rdi     # 0x41128
callq 0x2af20
movzwl %r12w, %r12d
leal -0xfffc(%r12), %eax
cmpl $0x3, %eax
ja 0xeb7c
leaq 0x1dc94(%rip), %rcx     # 0x2c220
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x10, %al
jmp 0xeb41
movq %rbx, %rdi
callq 0x2b034
movq %r15, %r12
movq (%r12), %r12
cmpq %r15, %r12
je 0xecf2
movq 0x90(%r12), %rcx
cmpw %ax, 0x10(%rcx)
jne 0xe5a7
movq %rbx, %rdi
leaq -0xd8(%rbp), %rsi
callq 0x2b05e
cmpq $0x0, -0xd0(%rbp)
je 0xe5fe
movq -0xd8(%rbp), %rax
cmpb $0x21, (%rax)
jne 0xe5fe
movq %r12, %rdi
leaq -0xd8(%rbp), %rsi
callq 0x27d54
testb %al, %al
jne 0xecf2
cmpb $0x0, 0xba(%r12)
jne 0xecf2
movq %rbx, %rdi
callq 0x2b118
movb $0x0, 0x2(%rax)
movq %rbx, %rdi
callq 0x2b118
movb $0x0, 0x1(%rax)
movswl %r13w, %esi
movq %rbx, %rdi
callq 0x2b12c
leaq 0x98(%r12), %rsi
movq %rbx, %rdi
callq 0x2af72
movzbl 0xbc(%r12), %esi
movq %rbx, %rdi
callq 0x2af34
movl $0xffff, %edi           # imm = 0xFFFF
movq %rbx, %rsi
callq 0xe3b3
jmp 0xecf2
movq %rbx, %rdi
callq 0x2b034
movq %r15, %rdi
movq (%rdi), %rdi
cmpq %r15, %rdi
je 0xecf2
movq 0x90(%rdi), %rcx
cmpw %ax, 0x10(%rcx)
jne 0xe66f
callq 0x1d0e1
jmp 0xecf2
movq %rbx, %rdi
callq 0x2b034
movq %r15, %r12
movq (%r12), %r12
cmpq %r15, %r12
je 0xecf2
movq 0x90(%r12), %rcx
cmpw %ax, 0x10(%rcx)
jne 0xe69d
leaq -0x40(%rbp), %rax
movq %rax, -0x50(%rbp)
leaq -0x50(%rbp), %r14
movq %r14, %rdi
leaq 0x1dbc5(%rip), %rsi     # 0x2c293
leaq 0x1dbcc(%rip), %rdx     # 0x2c2a1
callq 0xe01c
movq %r12, %rdi
movq %r14, %rsi
callq 0x1bea2
jmp 0xecd9
movq %rbx, %rdi
callq 0x2b034
movq %r15, %r14
movq (%r14), %r14
cmpq %r15, %r14
je 0xecf2
movq 0x90(%r14), %rcx
cmpw %ax, 0x10(%rcx)
jne 0xe6f5
movq %rbx, %rdi
callq 0x2b034
cmpw 0xb8(%r14), %ax
jbe 0xecf2
movw %ax, 0xb8(%r14)
jmp 0xecf2
leaq 0x31cd0(%rip), %rax     # 0x40408
cmpb $0x0, (%rax)
jne 0xecf2
movq %rbx, %rdi
callq 0x2b034
movq %r15, %r13
movq (%r13), %r13
cmpq %r15, %r13
je 0xecf2
movq 0x90(%r13), %rcx
cmpw %ax, 0x10(%rcx)
jne 0xe74c
movq 0x130(%r13), %rax
movq %rax, %rcx
subq 0x110(%r13), %rcx
sarq $0x3, %rcx
cmpq $0x1, %rax
adcq $-0x1, %rcx
imulq $0xaa, %rcx, %rax
movq 0x118(%r13), %rcx
subq 0x120(%r13), %rcx
movq 0x108(%r13), %rdx
movabsq $-0x5555555555555555, %rsi # imm = 0xAAAAAAAAAAAAAAAB
imulq %rsi, %rcx
subq 0xf8(%r13), %rdx
imulq %rsi, %rdx
addq %rcx, %rdx
addq %rax, %rdx
cmpq $0x4, %rdx
ja 0xecf2
movq %rbx, %rdi
callq 0x2b034
movl %eax, %r12d
cmpw 0xe0(%r13), %ax
jb 0xecf2
cmpw 0xb8(%r13), %r12w
jbe 0xe7f3
movw %r12w, 0xb8(%r13)
movq %rbx, %rdi
callq 0x2b04c
cmpw 0xe0(%r13), %r12w
ja 0xe812
cmpb 0xe2(%r13), %al
jbe 0xecf2
movw %r12w, 0xe0(%r13)
movb %al, 0xe2(%r13)
movq %rbx, %rdi
callq 0x2b04c
movl %eax, %r12d
movzbl %al, %esi
cmpb $0xc, %sil
ja 0xeed7
movl $0x1c90, %eax           # imm = 0x1C90
movl %esi, -0x58(%rbp)
btl %esi, %eax
jae 0xed58
movq %rbx, %rdi
callq 0x2b04c
cmpb $0x8, %al
ja 0xe868
setne %cl
cmpb $0xc, %r12b
sete %dl
orb %cl, %dl
jne 0xeec1
movsbl %al, %esi
leaq -0x118(%rbp), %r14
movq %r14, %rdi
callq 0x2ba03
movl $0x17, %r8d
movq %r14, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x1da39(%rip), %rcx     # 0x2c2c7
callq 0x4440
leaq -0xe8(%rbp), %r14
leaq -0x88(%rbp), %r12
movq %r14, -0xf8(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xedd2
movq %rdx, -0xf8(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xe8(%rbp)
jmp 0xedd9
leaq 0x32850(%rip), %rdi     # 0x41128
callq 0x2af20
movq %rbx, %rdi
callq 0x2b034
cmpw $0x3, %ax
jne 0xeac4
movq %rbx, %rdi
callq 0x2b034
movzwl %ax, %edi
leaq -0x1a0(%rbp), %rsi
callq 0x139a1
movl %eax, %r12d
cmpw $-0x5, %ax
ja 0xecf2
leaq 0x3280e(%rip), %rdi     # 0x41128
movl $0x14, %esi
callq 0x2af34
movzwl %r12w, %esi
leaq 0x327f9(%rip), %rdi     # 0x41128
callq 0x2af48
leaq 0x33f65(%rip), %rax     # 0x428a0
movzwl 0x14(%rax), %esi
leaq 0x327e2(%rip), %rdi     # 0x41128
callq 0x2af48
jmp 0xea98
movq %rbx, %rdi
callq 0x2b034
movq %r15, %rdi
movq (%rdi), %rdi
cmpq %r15, %rdi
je 0xecf2
movq 0x90(%rdi), %rcx
cmpw %ax, 0x10(%rcx)
jne 0xe95b
callq 0x1c94c
jmp 0xecf2
leaq 0x31a83(%rip), %rax     # 0x40408
cmpb $0x0, (%rax)
jne 0xecf2
movq %rbx, %rdi
callq 0x2b034
movq %r15, %r12
movq (%r12), %r12
cmpq %r15, %r12
je 0xecf2
movq 0x90(%r12), %rcx
cmpw %ax, 0x10(%rcx)
jne 0xe999
leaq 0x10(%r12), %rdi
callq 0x12496
testb %al, %al
je 0xecf2
movq 0x148(%r12), %rax
movl 0x8(%rax), %eax
movl %eax, -0x50(%rbp)
leaq 0x375b5(%rip), %rdi     # 0x45f90
leaq -0x50(%rbp), %r14
movq %r14, %rsi
callq 0xfa26
movq %rax, %r13
leaq 0x3759f(%rip), %rax     # 0x45f90
addq $0x8, %rax
movq %rax, -0x58(%rbp)
movq %r14, %rdi
callq 0x2b7a6
cmpq -0x58(%rbp), %r13
jne 0xecf2
movq %rbx, %rdi
leaq -0xd8(%rbp), %rsi
callq 0x2b05e
leaq -0xd8(%rbp), %rdi
callq 0x2b440
cmpw $0x37, %ax
jl 0xed0c
movq %r12, %rdi
callq 0xf648
jmp 0xecf2
movq %rbx, %rdi
callq 0x2b034
movq %r15, %r12
movq (%r12), %r12
cmpq %r15, %r12
je 0xecf2
movq 0x90(%r12), %rcx
cmpw %ax, 0x10(%rcx)
jne 0xea48
movq %rbx, %rdi
callq 0x2b04c
movzbl %al, %esi
movq %r12, %rdi
callq 0x1caea
jmp 0xecf2
leaq 0x326a6(%rip), %rdi     # 0x41128
callq 0x2af20
leaq 0x3269a(%rip), %rdi     # 0x41128
movl $0x12, %esi
callq 0x2af34
movl -0x2c(%rbp), %r9d
movl 0x336a6(%rip), %edi     # 0x42148
movswq 0x32686(%rip), %rdx     # 0x41130
leaq 0x32681(%rip), %rsi     # 0x41132
xorl %ecx, %ecx
leaq -0x1a0(%rbp), %r8
callq 0x4050
jmp 0xecf2
leaq 0x3265d(%rip), %rdi     # 0x41128
movl $0x12, %esi
callq 0x2af34
movl -0x2c(%rbp), %r9d
movl 0x33669(%rip), %edi     # 0x42148
movswq 0x32649(%rip), %rdx     # 0x41130
leaq 0x32644(%rip), %rsi     # 0x41132
xorl %ecx, %ecx
leaq -0x1a0(%rbp), %r8
callq 0x4050
leaq -0x40(%rbp), %rax
movq %rax, -0x50(%rbp)
leaq -0x50(%rbp), %r14
movq %r14, %rdi
leaq 0x1d764(%rip), %rsi     # 0x2c276
leaq 0x1d779(%rip), %rdx     # 0x2c292
callq 0xe01c
movq %r14, %rdi
callq 0x14f24
jmp 0xecd9
movb $0x13, %al
jmp 0xeb41
leaq 0x325f2(%rip), %rdi     # 0x41128
xorl %esi, %esi
callq 0x2af34
jmp 0xebac
movb $0x11, %al
movzbl %al, %esi
leaq 0x325dd(%rip), %rdi     # 0x41128
callq 0x2af34
movl -0x2c(%rbp), %r9d
movl 0x335ee(%rip), %edi     # 0x42148
movswq 0x325ce(%rip), %rdx     # 0x41130
leaq 0x325c9(%rip), %rsi     # 0x41132
xorl %ecx, %ecx
leaq -0x1a0(%rbp), %r8
callq 0x4050
jmp 0xecd9
leaq 0x325a5(%rip), %rdi     # 0x41128
movl $0x14, %esi
callq 0x2af34
leaq 0x32594(%rip), %rdi     # 0x41128
movl %r12d, %esi
callq 0x2af48
leaq 0x32585(%rip), %rdi     # 0x41128
leaq -0x50(%rbp), %rsi
callq 0x2af72
movl -0x2c(%rbp), %r9d
movl 0x33592(%rip), %edi     # 0x42148
movswq 0x32572(%rip), %rdx     # 0x41130
leaq 0x3256d(%rip), %rsi     # 0x41132
xorl %ecx, %ecx
leaq -0x1a0(%rbp), %r8
callq 0x4050
callq 0x119d7
leaq -0xd8(%rbp), %rdi
movq %rax, %rsi
callq 0x41f0
leaq -0xd8(%rbp), %rdi
movl $0xf, %esi
callq 0xf3f0
movl -0x2c(%rbp), %r9d
movl 0x33546(%rip), %edi     # 0x42148
movswq 0x32526(%rip), %rdx     # 0x41130
leaq 0x32521(%rip), %rsi     # 0x41132
xorl %ecx, %ecx
leaq -0x1a0(%rbp), %r8
callq 0x4050
movq 0x8(%r15), %r12
leaq 0x317de(%rip), %rax     # 0x40408
cmpb $0x1, (%rax)
jne 0xec65
movl -0x2c(%rbp), %r13d
callq 0x1c26f
movl 0x3350a(%rip), %edi     # 0x42148
movq %rax, %rsi
addq $0xa, %rsi
movswq 0x8(%rax), %rdx
xorl %ecx, %ecx
leaq -0x1a0(%rbp), %r8
movl %r13d, %r9d
callq 0x4050
movq %r12, %rdi
callq 0x19b97
jmp 0xec6d
movq %r12, %rdi
callq 0x1b1ac
leaq 0xc8(%r12), %rdi
callq 0x43b0
movq %r12, %rdi
callq 0x1c8ec
movq %r12, %rdi
callq 0x19e31
movq %r14, -0x78(%rbp)
movq 0x98(%r12), %rsi
movq 0xa0(%r12), %rdx
addq %rsi, %rdx
leaq -0x78(%rbp), %r12
movq %r12, %rdi
callq 0xf988
movq %r12, %rdi
leaq 0x1d5b3(%rip), %rsi     # 0x2c26a
callq 0x47b0
movq %r12, %rdi
callq 0xf579
movq -0x78(%rbp), %rdi
cmpq %r14, %rdi
je 0xecd9
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0xecf2
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0x120(%rbp), %rcx
leal 0x1(%rcx), %eax
cmpb $0x15, %al
movq %rbx, %rdi
jne 0xe466
jmp 0xf21a
movq 0x148(%r12), %rax
movl 0x8(%rax), %eax
movl %eax, -0x50(%rbp)
movq %r14, %rdi
leaq -0xd8(%rbp), %rsi
callq 0x20a43
movq %r14, %rdi
callq 0x2b7a6
movq 0x148(%r12), %rax
movl 0x8(%rax), %eax
movl %eax, -0x50(%rbp)
leaq 0x37292(%rip), %rdi     # 0x45fd8
movq %r14, %rsi
callq 0xfa8a
movq %r14, %rdi
callq 0x2b7a6
jmp 0xecf2
movl -0x58(%rbp), %esi
cmpl $0x5, %esi
jne 0xeed7
movq %rbx, %r14
movq %rbx, %rdi
callq 0x2b04c
movl %eax, %r12d
movq %r14, %rdi
callq 0x2b04c
movsbl %r12b, %esi
movl %esi, %edx
negl %edx
cmovsl %esi, %edx
movb %al, -0x58(%rbp)
movl %eax, %ecx
orb %sil, %cl
je 0xf04a
cmpl $0xb, %edx
ja 0xf04a
movb -0x58(%rbp), %cl
movl %ecx, %eax
sarb $0x7, %al
xorb %al, %cl
subb %al, %cl
cmpb $0xc, %cl
jae 0xf04a
movzbl -0x58(%rbp), %eax
shll $0x10, %eax
movzbl %r12b, %ecx
shll $0x8, %ecx
leal (%rax,%rcx), %esi
addl $0x5, %esi
movq %r13, %rdi
callq 0x1c27c
jmp 0xecf2
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rdx, -0xf0(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xf8(%rbp), %rdi
leaq 0x1d4de(%rip), %rsi     # 0x2c2df
callq 0x47b0
movq %r12, -0x98(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xee2f
movq %rdx, -0x98(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x88(%rbp)
jmp 0xee37
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, -0x90(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xb8(%rbp), %rdi
movl -0x58(%rbp), %esi
callq 0x2ba03
movq -0x98(%rbp), %rcx
movl $0xf, %edi
cmpq %r12, %rcx
je 0xee78
movq -0x88(%rbp), %rdi
movq -0x90(%rbp), %r8
movq -0xb8(%rbp), %rsi
movq -0xb0(%rbp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rdi, %rax
jbe 0xeeb3
movl $0xf, %edi
leaq -0xa8(%rbp), %r9
cmpq %r9, %rsi
je 0xeeae
movq -0xa8(%rbp), %rdi
cmpq %rdi, %rax
jbe 0xeee4
leaq -0x98(%rbp), %rdi
callq 0x4130
jmp 0xeef4
movzbl %al, %esi
shll $0x8, %esi
addl -0x58(%rbp), %esi
movq %r13, %rdi
callq 0x1c27c
jmp 0xecf2
movq %r13, %rdi
callq 0x1c27c
jmp 0xecf2
leaq -0xb8(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x4440
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0xef15
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0xef1b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x70(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq -0x78(%rbp), %rdi
leaq 0x1d3a2(%rip), %rsi     # 0x2c2e4
callq 0x47b0
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xef6b
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0xef71
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x50(%rbp), %rdi
callq 0x14f24
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0xefaa
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0xefc3
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0xefe5
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0x98(%rbp), %rdi
cmpq %r12, %rdi
je 0xf000
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0xf8(%rbp), %rdi
cmpq %r14, %rdi
je 0xf01b
movq -0xe8(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0x118(%rbp), %rdi
leaq -0x108(%rbp), %rax
cmpq %rax, %rdi
je 0xf03d
movq -0x108(%rbp), %rsi
incq %rsi
callq 0x43f0
movq %r13, %rdi
callq 0xf648
jmp 0xecf2
leaq -0x118(%rbp), %r14
movq %r14, %rdi
callq 0x2ba03
leaq -0xf8(%rbp), %r12
movq %r12, %rdi
leaq 0x1d238(%rip), %rsi     # 0x2c2a2
movq %r14, %rdx
callq 0xf846
movq %r12, %rdi
leaq 0x1d246(%rip), %rsi     # 0x2c2c2
callq 0x47b0
leaq -0x88(%rbp), %rsi
movq %rsi, -0x98(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xf0b1
movq %rdx, -0x98(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x88(%rbp)
jmp 0xf0b7
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x90(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movsbl -0x58(%rbp), %esi
leaq -0xb8(%rbp), %r12
movq %r12, %rdi
callq 0x2ba03
leaq -0x78(%rbp), %r14
movq %r14, %rdi
leaq -0x98(%rbp), %rsi
movq %r12, %rdx
callq 0xf794
movq %r14, %rdi
leaq 0x1d1c0(%rip), %rsi     # 0x2c2c4
callq 0x47b0
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0xf12d
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0xf133
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x50(%rbp), %rdi
callq 0x14f24
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0xf16c
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0xf185
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0xf1a7
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0xf1c9
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0xf8(%rbp), %rdi
leaq -0xe8(%rbp), %rax
cmpq %rax, %rdi
je 0xf1eb
movq -0xe8(%rbp), %rsi
incq %rsi
callq 0x43f0
movq -0x118(%rbp), %rdi
leaq -0x108(%rbp), %rax
cmpq %rax, %rdi
je 0xf20d
movq -0x108(%rbp), %rsi
incq %rsi
callq 0x43f0
movq %r13, %rdi
callq 0xf648
jmp 0xecf2
movb $0x14, %r14b
movq -0xd8(%rbp), %rdi
leaq -0xc8(%rbp), %rax
cmpq %rax, %rdi
je 0xf23f
movq -0xc8(%rbp), %rsi
incq %rsi
callq 0x43f0
testb %r14b, %r14b
sete %al
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xf285
jmp 0xf2a3
jmp 0xf2c1
jmp 0xf2e8
jmp 0xf30f
jmp 0xf336
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf379
jmp 0xf379
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0xf2a6
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x43f0
jmp 0xf2a6
movq %rax, %rbx
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0xf2c4
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x43f0
jmp 0xf2c4
movq %rax, %rbx
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0xf2eb
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x43f0
jmp 0xf2eb
movq %rax, %rbx
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0xf312
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x43f0
jmp 0xf312
movq %rax, %rbx
movq -0xf8(%rbp), %rdi
leaq -0xe8(%rbp), %rax
cmpq %rax, %rdi
je 0xf339
movq -0xe8(%rbp), %rsi
incq %rsi
callq 0x43f0
jmp 0xf339
movq %rax, %rbx
movq -0x118(%rbp), %rdi
leaq -0x108(%rbp), %rax
cmpq %rax, %rdi
je 0xf3c6
movq -0x108(%rbp), %rsi
jmp 0xf3b9
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf35b
movq %rax, %rbx
movq -0x78(%rbp), %rdi
cmpq %r14, %rdi
je 0xf3a8
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x43f0
jmp 0xf3a8
jmp 0xf3a5
jmp 0xf3c3
movq %rax, %rbx
leaq -0x50(%rbp), %rdi
callq 0x2b7a6
jmp 0xf3c6
jmp 0xf3c3
jmp 0xf3a5
jmp 0xf3a5
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf3a5
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf3c3
jmp 0xf3c3
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0xf3c6
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x43f0
jmp 0xf3c6
movq %rax, %rbx
movq -0xd8(%rbp), %rdi
leaq -0xc8(%rbp), %rax
cmpq %rax, %rdi
je 0xf3e8
movq -0xc8(%rbp), %rsi
incq %rsi
callq 0x43f0
movq %rbx, %rdi
callq 0x4740