// File: /workspace/github_c_makefile_star2_O3/QwazyWabbitWOS[P]lmctf60/g_cmds.c
// Function: Cmd_Kick_f
void Cmd_Kick_f (edict_t *ent)
{
	unsigned long i=0;
	char *p;
	edict_t * target = NULL;
	edict_t * player = NULL;

	char message[MAX_INFO_STRING];

	if (!(ent->client->ctf.extra_flags & CTF_EXTRAFLAGS_REFEREE))
	{
		ctf_SafePrint(ent, PRINT_HIGH, "You are not a Referee\n");
		return;
	}

	p = gi.args();
	if (!sscanf(p, "%lu", &i))
	{
		ctf_SafePrint(ent, PRINT_HIGH, "Usage: kick <number>\nUse \"users\" to list players by number.\n");
		return;
	}

	player = ctf_findplayer(NULL, NULL, CTF_TEAM_IGNORETEAM);
	while (player)
	{
		if (player->client->ctf.ctfid == i)
			target = player;

		player = ctf_findplayer(player, NULL, CTF_TEAM_IGNORETEAM);
	}

	if (!target)
	{
		ctf_SafePrint(ent, PRINT_HIGH, "Couldn't find that target number.\n");
		return;
	}

	// Can't kick a referee unless you are an rcon
	if (target->client->ctf.extra_flags & CTF_EXTRAFLAGS_REFEREE &&
		!(ent->client->ctf.extra_flags & CTF_EXTRAFLAGS_RCON))
	{
		sprintf(message, "%s is a referee.  You cannot kick them.\n", target->client->pers.netname);
		ctf_SafePrint(ent, PRINT_HIGH, message);
	}

	// Can't kick an rcon under any circumstances
	if (target->client->ctf.extra_flags & CTF_EXTRAFLAGS_RCON)
	{
		sprintf(message, "%s is an rcon.  You cannot kick them.\n", target->client->pers.netname);
		ctf_SafePrint(ent, PRINT_HIGH, message);
	}

	sprintf(message, "%s was kicked by %s.\n",
		target->client->pers.netname, ent->client->pers.netname);
	ctf_BSafePrint(PRINT_HIGH, message);
	// clear the kicked player's stats
	stats_clear(target);
	ForceCommand(target, "disconnect\n");
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x210, %rsp            # imm = 0x210
movq %rdi, %rbx
movq $0x0, 0x8(%rsp)
movq 0x58(%rdi), %rax
testb $0x2, 0x1108(%rax)
jne 0x298d5
leaq 0x2b4b3(%rip), %rdx     # 0x54d6f
movl $0x2, %esi
movq %rbx, %rdi
addq $0x210, %rsp            # imm = 0x210
popq %rbx
popq %r14
popq %r15
jmp 0x18da0
movq 0x3ed24(%rip), %rax     # 0x68600
callq *0x148(%rax)
leaq 0x294d6(%rip), %rsi     # 0x52dbf
leaq 0x8(%rsp), %rdx
movq %rax, %rdi
xorl %eax, %eax
callq 0x18fe0
testl %eax, %eax
je 0x29a23
xorl %edi, %edi
xorl %esi, %esi
movl $0xfffffffc, %edx       # imm = 0xFFFFFFFC
callq 0x19170
testq %rax, %rax
je 0x29a1a
xorl %r14d, %r14d
movq 0x58(%rax), %rcx
movq 0x9120(%rcx), %rcx
cmpq 0x8(%rsp), %rcx
cmoveq %rax, %r14
movq %rax, %rdi
xorl %esi, %esi
movl $0xfffffffc, %edx       # imm = 0xFFFFFFFC
callq 0x19170
testq %rax, %rax
jne 0x2991a
testq %r14, %r14
je 0x29a1a
movq 0x58(%r14), %rdx
movl 0x1108(%rdx), %eax
testb $0x2, %al
je 0x2999d
movq 0x58(%rbx), %rcx
testb $0x4, 0x1108(%rcx)
jne 0x2999d
addq $0x2c0, %rdx            # imm = 0x2C0
leaq 0x2ba59(%rip), %rsi     # 0x553cd
leaq 0x10(%rsp), %r15
movq %r15, %rdi
xorl %eax, %eax
callq 0x196f0
movl $0x2, %esi
movq %rbx, %rdi
movq %r15, %rdx
callq 0x18da0
movq 0x58(%r14), %rdx
movl 0x1108(%rdx), %eax
testb $0x4, %al
je 0x299d2
addq $0x2c0, %rdx            # imm = 0x2C0
leaq 0x2ba47(%rip), %rsi     # 0x553f6
leaq 0x10(%rsp), %r15
movq %r15, %rdi
xorl %eax, %eax
callq 0x196f0
movl $0x2, %esi
movq %rbx, %rdi
movq %r15, %rdx
callq 0x18da0
movq 0x58(%r14), %rdx
movl $0x2c0, %ecx            # imm = 0x2C0
addq %rcx, %rdx
addq 0x58(%rbx), %rcx
leaq 0x2ba38(%rip), %rsi     # 0x5541d
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x196f0
movl $0x2, %edi
movq %rbx, %rsi
callq 0x19270
movq %r14, %rdi
callq 0x19260
leaq 0x2ba23(%rip), %rsi     # 0x55433
movq %r14, %rdi
callq 0x18c40
jmp 0x29a37
leaq 0x2b868(%rip), %rdx     # 0x55289
jmp 0x29a2a
leaq 0x2b966(%rip), %rdx     # 0x55390
movl $0x2, %esi
movq %rbx, %rdi
callq 0x18da0
addq $0x210, %rsp            # imm = 0x210
popq %rbx
popq %r14
popq %r15
retq