// File: roberty65[P]bServer/common/src/rbtree.c
// Function: rb_insert_color
void rb_insert_color(struct rb_node *node, struct rb_root *root)
{
	struct rb_node *parent, *gparent;

	while ((parent = rb_parent(node)) && rb_is_red(parent))
	{
		gparent = rb_parent(parent);

		if (parent == gparent->rb_left)
		{
			{
				register struct rb_node *uncle = gparent->rb_right;
				if (uncle && rb_is_red(uncle))
				{
					rb_set_black(uncle);
					rb_set_black(parent);
					rb_set_red(gparent);
					node = gparent;
					continue;
				}
			}

			if (parent->rb_right == node)
			{
				register struct rb_node *tmp;
				__rb_rotate_left(parent, root);
				tmp = parent;
				parent = node;
				node = tmp;
			}

			rb_set_black(parent);
			rb_set_red(gparent);
			__rb_rotate_right(gparent, root);
		} else {
			{
				register struct rb_node *uncle = gparent->rb_left;
				if (uncle && rb_is_red(uncle))
				{
					rb_set_black(uncle);
					rb_set_black(parent);
					rb_set_red(gparent);
					node = gparent;
					continue;
				}
			}

			if (parent->rb_left == node)
			{
				register struct rb_node *tmp;
				__rb_rotate_right(parent, root);
				tmp = parent;
				parent = node;
				node = tmp;
			}

			rb_set_black(parent);
			rb_set_red(gparent);
			__rb_rotate_left(gparent, root);
		}
	}

	rb_set_black(root->rb_node);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rcx
andq $-0x4, %rcx
movq %rcx, -0x18(%rbp)
xorl %eax, %eax
cmpq $0x0, %rcx
movb %al, -0x41(%rbp)
je 0xcf81
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0xcf8d
jmp 0xd13a
movq -0x18(%rbp), %rax
movq (%rax), %rax
andq $-0x4, %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jne 0xd074
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0xd00f
movq -0x28(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
jne 0xd00f
jmp 0xcfd4
movq -0x28(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xcfe4
movq -0x18(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xcff4
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xcf50
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpq -0x8(%rbp), %rax
jne 0xd042
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xd160
movq -0x18(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xd044
movq -0x18(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xd054
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xd220
jmp 0xd135
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0xd0d5
movq -0x38(%rbp), %rax
movq (%rax), %rax
andq $0x1, %rax
cmpq $0x0, %rax
jne 0xd0d5
jmp 0xd09a
movq -0x38(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xd0aa
movq -0x18(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xd0ba
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xcf50
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x8(%rbp), %rax
jne 0xd108
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xd220
movq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xd10a
movq -0x18(%rbp), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xd11a
movq -0x20(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xd160
jmp 0xcf50
jmp 0xd13c
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rcx
orq $0x1, %rcx
movq %rcx, (%rax)
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)