// File: /workspace/github_c_makefile_star2_O0/krinkinmu[P]64bit/rbtree.c
// Function: rb_erase_fix
static void rb_erase_fix(struct rb_node *child, struct rb_node *parent,
			struct rb_tree *tree)
{
	while (rb_black(child) && child != tree->root) {
		if (child == parent->left) {
			struct rb_node *b = parent->right;

			if (rb_red(b)) {
				rb_set_black(b);
				rb_set_red(parent);
				rb_rotate_left(parent, tree);
				b = parent->right;
			}

			if (rb_black(b->left) && rb_black(b->right)) {
				rb_set_red(b);
				child = parent;
				parent = rb_parent(parent);
			} else {
				if (rb_black(b->right)) {
					rb_set_black(b->left);
					rb_set_red(b);
					rb_rotate_right(b, tree);
					b = parent->right;
				}
				rb_set_color(b, rb_color(parent));
				rb_set_black(parent);
				if (b->right)
					rb_set_black(b->right);
				rb_rotate_left(parent, tree);
				child = tree->root;
				break;
			}
		} else {
			struct rb_node *b = parent->left;

			if (rb_red(b)) {
				rb_set_black(b);
				rb_set_red(parent);
				rb_rotate_right(parent, tree);
				b = parent->left;
			}

			if (rb_black(b->right) && rb_black(b->left)) {
				rb_set_red(b);
				child = parent;
				parent = rb_parent(parent);
			} else {
				if (rb_black(b->left)) {
					rb_set_black(b->right);
					rb_set_red(b);
					rb_rotate_left(b, tree);
					b = parent->left;
				}
				rb_set_color(b, rb_color(parent));
				rb_set_black(parent);
				if (b->left)
					rb_set_black(b->left);
				rb_rotate_right(parent, tree);
				child = tree->root;
				break;
			}
		}
	}

	if (child)
		rb_set_black(child);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rdi
callq 0xffffffff8010bea0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x29(%rbp)
jne 0xffffffff8010bbcb
jmp 0xffffffff8010bbdc
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
setne %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
testb $0x1, %al
jne 0xffffffff8010bbe8
jmp 0xffffffff8010be4f
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq (%rcx), %rax
jne 0xffffffff8010bd27
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
callq 0xffffffff8010b760
testb $0x1, %al
jne 0xffffffff8010bc14
jmp 0xffffffff8010bc3f
movq -0x20(%rbp), %rdi
callq 0xffffffff8010b7c0
movq -0x10(%rbp), %rdi
callq 0xffffffff8010b7a0
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xffffffff8010b7e0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rdi
callq 0xffffffff8010bea0
testb $0x1, %al
jne 0xffffffff8010bc51
jmp 0xffffffff8010bc87
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xffffffff8010bea0
testb $0x1, %al
jne 0xffffffff8010bc64
jmp 0xffffffff8010bc87
movq -0x20(%rbp), %rdi
callq 0xffffffff8010b7a0
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x10(%rbp), %rdi
callq 0xffffffff8010b510
movq %rax, -0x10(%rbp)
jmp 0xffffffff8010bd22
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xffffffff8010bea0
testb $0x1, %al
jne 0xffffffff8010bc9a
jmp 0xffffffff8010bcc8
movq -0x20(%rbp), %rax
movq (%rax), %rdi
callq 0xffffffff8010b7c0
movq -0x20(%rbp), %rdi
callq 0xffffffff8010b7a0
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xffffffff8010b8a0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rdi
callq 0xffffffff8010bb50
movq -0x38(%rbp), %rdi
movl %eax, %esi
callq 0xffffffff8010be70
movq -0x10(%rbp), %rdi
callq 0xffffffff8010b7c0
movq -0x20(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xffffffff8010bd05
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xffffffff8010b7c0
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xffffffff8010b7e0
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0xffffffff8010be4f
jmp 0xffffffff8010be4a
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
callq 0xffffffff8010b760
testb $0x1, %al
jne 0xffffffff8010bd41
jmp 0xffffffff8010bd6b
movq -0x28(%rbp), %rdi
callq 0xffffffff8010b7c0
movq -0x10(%rbp), %rdi
callq 0xffffffff8010b7a0
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xffffffff8010b8a0
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xffffffff8010bea0
testb $0x1, %al
jne 0xffffffff8010bd7e
jmp 0xffffffff8010bdb3
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0xffffffff8010bea0
testb $0x1, %al
jne 0xffffffff8010bd90
jmp 0xffffffff8010bdb3
movq -0x28(%rbp), %rdi
callq 0xffffffff8010b7a0
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x10(%rbp), %rdi
callq 0xffffffff8010b510
movq %rax, -0x10(%rbp)
jmp 0xffffffff8010be48
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0xffffffff8010bea0
testb $0x1, %al
jne 0xffffffff8010bdc5
jmp 0xffffffff8010bdf3
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xffffffff8010b7c0
movq -0x28(%rbp), %rdi
callq 0xffffffff8010b7a0
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xffffffff8010b7e0
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rdi
callq 0xffffffff8010bb50
movq -0x40(%rbp), %rdi
movl %eax, %esi
callq 0xffffffff8010be70
movq -0x10(%rbp), %rdi
callq 0xffffffff8010b7c0
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
je 0xffffffff8010be2e
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0xffffffff8010b7c0
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xffffffff8010b8a0
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0xffffffff8010be4f
jmp 0xffffffff8010be4a
jmp 0xffffffff8010bbb4
cmpq $0x0, -0x8(%rbp)
je 0xffffffff8010be5f
movq -0x8(%rbp), %rdi
callq 0xffffffff8010b7c0
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)