// File: /workspace/github_c_makefile_star2_O0/enzo1982[P]smooth/classes/gui/widgets/widget.cpp
// Function: smooth::GUI::Widget::Process(int, int, int)
S::Int S::GUI::Widget::Process(Int message, Int wParam, Int lParam)
{
	if (!IsRegistered()) return Error();
	if (!IsVisible())    return Success();

	Window	*window	= container->GetContainerWindow();

	if (window == NIL)   return Success();

	widgets.LockForWrite();

	foreach (Widget *widget, widgets)
	{
		if (widget->Process(message, wParam, lParam) == MessageProcessed) { widgets.Unlock(); return MessageProcessed; }
	}

	widgets.Unlock();

	if (!IsVisible())    return Success();
	if (!IsActive())     return Success();

	EnterProtectedRegion();

	Int	 returnValue = Success();
	Point	 mousePos    = window->GetMousePosition();

	switch (message)
	{
		case SM_MOUSEMOVE:
			{
				Point	 realPosition = GetRealPosition();
				Rect	 visibleArea  = GetVisibleArea();

				if (!mouseOver && window->IsMouseOn(visibleArea) && hitTest.Call(mousePos - realPosition))
				{
					mouseOver = True;

					if (statusText != NIL) window->SetStatusText(statusText);

					if ((tooltipText != NIL || tooltipLayer != NIL) && window->IsFocussed())
					{
						Application::Lock	 lock;

						tipPos	 = mousePos;
						tipTimer = new System::Timer();

						tipTimer->onInterval.Connect(&Widget::ActivateTooltip, this);
						tipTimer->Start(Setup::HoverTime);
					}

					Paint(SP_MOUSEIN);

					onMouseOver.Emit();
				}
				else if (mouseOver && !(window->IsMouseOn(visibleArea) && hitTest.Call(mousePos - realPosition)))
				{
					mouseOver = False;

					leftButtonDown	= False;
					rightButtonDown	= False;

					if (statusText != NIL && window->GetStatusText() == statusText) window->RestoreDefaultStatusText();

					DeactivateTooltip();

					Paint(SP_MOUSEOUT);

					onMouseOut.Emit();
				}
				else if (mouseOver && window->IsMouseOn(visibleArea) && hitTest.Call(mousePos - realPosition))
				{
					Application::Lock	 lock;

					if (tipTimer != NIL && wParam == 0 && (Math::Abs(tipPos.x - mousePos.x) > Setup::HoverWidth / 2 || Math::Abs(tipPos.y - mousePos.y) > Setup::HoverHeight / 2))
					{
						tipPos = mousePos;

						tipTimer->Stop();
						tipTimer->Start(Setup::HoverTime);
					}
				}
			}

			if (mouseDragging)
			{
				onMouseDrag.Emit(mousePos);
			}

			break;
		case SM_LBUTTONDOWN:
			if (mouseOver)
			{
				leftButtonDown = True;

				DeactivateTooltip();

				Paint(SP_MOUSEDOWN);

				if (!focussed)
				{
					focussed = True;

					onGetFocus.Emit();
				}
				else
				{
					onClickInFocus.Emit();
				}

				onLeftButtonDown.Emit(mousePos);

				if (!mouseDragging)
				{
					mouseDragging = True;

					onMouseDragStart.Emit(mousePos);
				}
			}
			else
			{
				if (focussed)
				{
					focussed = False;

					onLoseFocus.Emit();
				}
			}

			break;
		case SM_LBUTTONDBLCLK:
			if (mouseOver)
			{
				leftButtonDown = True;

				Paint(SP_MOUSEDOWN);

				onLeftButtonDown.Emit(mousePos);
				onLeftButtonDoubleClick.Emit(mousePos);
			}

			break;
		case SM_LBUTTONUP:
			if (mouseOver)
			{
				Paint(SP_MOUSEUP);

				onLeftButtonUp.Emit(mousePos);

				if (leftButtonDown)
				{
					leftButtonDown = False;

					onLeftButtonClick.Emit(mousePos);
				}
			}

			if (mouseDragging)
			{
				mouseDragging = False;

				onMouseDragEnd.Emit(mousePos);
			}

			break;
		case SM_RBUTTONDOWN:
		case SM_RBUTTONDBLCLK:
			if (mouseOver)
			{
				OpenContextMenu();

				/* Force mouseOut event.
				 */
				window->Process(SM_MOUSEMOVE, 0, 0);
			}

			break;
		case SM_MOUSEWHEEL:
			{
				UnsignedInt	 scrollLines = 0;

#ifdef __WIN32__
				SystemParametersInfo(104, NIL, &scrollLines, NIL);
#endif

				if (scrollLines <= 0) scrollLines = 3;

				onMouseWheel.Emit(Float(wParam) / 120.0 * scrollLines);
			}

			break;
		case SM_KEYDOWN:
			if (!focussed || !tabstopCapable) break;

			if (wParam == Input::Keyboard::KeyTab)
			{
				Widget	*widget = NIL;

				if (Input::Keyboard::GetKeyState(Input::Keyboard::KeyShift)) widget = container->GetPreviousTabstopWidget(GetHandle());
				else							     widget = container->GetNextTabstopWidget(GetHandle());

				if (widget != NIL)
				{
					focussed = False;

					onLoseFocus.Emit();

					widget->SetFocusByKeyboard();
				}

				returnValue = MessageProcessed;
			}

			break;
		case SM_LOSEFOCUS:
			if (focussed)
			{
				Window	*focusWnd = (Window *) Object::GetObject(wParam, Window::classID);

				if (focusWnd != NIL)
				{
					if ((focusWnd->GetObjectType() == ToolWindow::classID && focusWnd->GetOrder() >= window->GetOrder()) || focusWnd == window) break;
				}

				focussed = False;

				onLoseFocus.Emit();
			}

			break;
	}

	LeaveProtectedRegion();

	return returnValue;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1f0, %rsp            # imm = 0x1F0
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movl %edx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x120(%rbp)
movq (%rdi), %rax
callq *0x88(%rax)
testb $0x1, %al
jne 0x8896a
leaq -0x30(%rbp), %rdi
movq %rdi, -0x130(%rbp)
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x5a9c0
movq -0x130(%rbp), %rdi
callq 0x59680
movl %eax, -0x124(%rbp)
jmp 0x88939
movl -0x124(%rbp), %eax
movl %eax, -0x4(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x5b5b0
jmp 0x89672
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x5b5b0
jmp 0x8967e
movq -0x120(%rbp), %rdi
movq (%rdi), %rax
callq *0x90(%rax)
testb $0x1, %al
jne 0x889d3
leaq -0x50(%rbp), %rdi
movq %rdi, -0x140(%rbp)
callq 0x5ca80
movq -0x140(%rbp), %rdi
callq 0x59680
movl %eax, -0x134(%rbp)
jmp 0x889a2
movl -0x134(%rbp), %eax
movl %eax, -0x4(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x5a410
jmp 0x89672
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x5a410
jmp 0x8967e
movq -0x120(%rbp), %rax
movq 0x190(%rax), %rdi
callq 0x59bc0
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x58(%rbp)
jne 0x88a46
leaq -0x68(%rbp), %rdi
movq %rdi, -0x150(%rbp)
callq 0x5ca80
movq -0x150(%rbp), %rdi
callq 0x59680
movl %eax, -0x144(%rbp)
jmp 0x88a15
movl -0x144(%rbp), %eax
movl %eax, -0x4(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x5a410
jmp 0x89672
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x5a410
jmp 0x8967e
movq -0x120(%rbp), %rdi
addq $0x38, %rdi
callq 0x593b0
movl $0x0, -0x6c(%rbp)
movl $0xffffffff, -0x70(%rbp) # imm = 0xFFFFFFFF
xorl %eax, %eax
cmpl $0x0, -0x6c(%rbp)
movb %al, -0x151(%rbp)
jne 0x88aa1
movq -0x120(%rbp), %rdi
movl -0x70(%rbp), %eax
movl %eax, -0x158(%rbp)
addq $0x38, %rdi
callq 0x5c990
movl %eax, %ecx
movl -0x158(%rbp), %eax
subl $0x1, %ecx
cmpl %ecx, %eax
setl %al
movb %al, -0x151(%rbp)
movb -0x151(%rbp), %al
testb $0x1, %al
jne 0x88ab0
jmp 0x88b33
movq -0x120(%rbp), %rdi
addq $0x38, %rdi
movl -0x70(%rbp), %esi
addl $0x1, %esi
movl %esi, -0x70(%rbp)
callq 0x8af30
movq (%rax), %rax
movq %rax, -0x78(%rbp)
cmpl $0x0, -0x6c(%rbp)
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x88adf
jmp 0x88b23
movq -0x78(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movl -0x1c(%rbp), %ecx
movq (%rdi), %rax
callq *0x80(%rax)
cmpl $-0x1, %eax
jne 0x88b16
movq -0x120(%rbp), %rdi
addq $0x38, %rdi
callq 0x59f70
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x89672
jmp 0x88b18
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x88ad0
jmp 0x88b25
movl -0x6c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x88a64
movq -0x120(%rbp), %rdi
addq $0x38, %rdi
callq 0x59f70
movq -0x120(%rbp), %rdi
movq (%rdi), %rax
callq *0x90(%rax)
testb $0x1, %al
jne 0x88bb5
leaq -0x88(%rbp), %rdi
movq %rdi, -0x168(%rbp)
callq 0x5ca80
movq -0x168(%rbp), %rdi
callq 0x59680
movl %eax, -0x15c(%rbp)
jmp 0x88b7e
movl -0x15c(%rbp), %eax
movl %eax, -0x4(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x5a410
jmp 0x89672
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x5a410
jmp 0x8967e
movq -0x120(%rbp), %rdi
movq (%rdi), %rax
callq *0x98(%rax)
testb $0x1, %al
jne 0x88c27
leaq -0x98(%rbp), %rdi
movq %rdi, -0x178(%rbp)
callq 0x5ca80
movq -0x178(%rbp), %rdi
callq 0x59680
movl %eax, -0x16c(%rbp)
jmp 0x88bf0
movl -0x16c(%rbp), %eax
movl %eax, -0x4(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x5a410
jmp 0x89672
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x5a410
jmp 0x8967e
movq -0x120(%rbp), %rdi
callq 0x5b7c0
leaq -0xb0(%rbp), %rdi
movq %rdi, -0x188(%rbp)
callq 0x5ca80
movq -0x188(%rbp), %rdi
callq 0x59680
movl %eax, -0x17c(%rbp)
jmp 0x88c5a
leaq -0xb0(%rbp), %rdi
callq 0x5a410
movl -0x17c(%rbp), %eax
movl %eax, -0x9c(%rbp)
movq -0x58(%rbp), %rdi
callq 0x5b090
movq %rax, -0xb8(%rbp)
movl -0x14(%rbp), %eax
addl $0xffff8800, %eax       # imm = 0xFFFF8800
movl %eax, %ecx
movq %rcx, -0x190(%rbp)
subl $0x13, %eax
ja 0x8965d
movq -0x190(%rbp), %rax
leaq 0x100a56(%rip), %rcx    # 0x189700
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x5a410
jmp 0x8967e
movq -0x120(%rbp), %rdi
movq (%rdi), %rax
callq *0x48(%rax)
movq -0x120(%rbp), %rdi
movq %rax, -0xc0(%rbp)
movq (%rdi), %rax
callq *0x130(%rax)
movq -0x120(%rbp), %rcx
movq %rax, -0xd0(%rbp)
movq %rdx, -0xc8(%rbp)
xorl %eax, %eax
testb $0x1, 0xd4(%rcx)
movb %al, -0x191(%rbp)
jne 0x88d82
movq -0x58(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x5c060
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x191(%rbp)
jne 0x88d3b
jmp 0x88d82
movq -0x120(%rbp), %rax
addq $0x1a8, %rax            # imm = 0x1A8
movq %rax, -0x1a0(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x5cbd0
movq -0x1a0(%rbp), %rdi
movq %rax, -0xd8(%rbp)
leaq -0xd8(%rbp), %rsi
callq 0x8b370
movb %al, -0x191(%rbp)
movb -0x191(%rbp), %al
testb $0x1, %al
jne 0x88d91
jmp 0x88f30
movq -0x120(%rbp), %rdi
movb $0x1, 0xd4(%rdi)
addq $0x108, %rdi            # imm = 0x108
xorl %esi, %esi
callq 0x5b110
testb $0x1, %al
jne 0x88db3
jmp 0x88dce
movq -0x120(%rbp), %rsi
movq -0x58(%rbp), %rdi
addq $0x108, %rsi            # imm = 0x108
movq (%rdi), %rax
callq *0xd0(%rax)
movq -0x120(%rbp), %rdi
addq $0x120, %rdi            # imm = 0x120
xorl %esi, %esi
callq 0x5b110
testb $0x1, %al
jne 0x88dfc
movq -0x120(%rbp), %rax
cmpq $0x0, 0x138(%rax)
je 0x88f06
movq -0x58(%rbp), %rdi
callq 0x5c260
testb $0x1, %al
jne 0x88e0e
jmp 0x88f06
leaq -0xd9(%rbp), %rdi
callq 0x5c490
movq -0x120(%rbp), %rax
movq -0xb8(%rbp), %rcx
movq %rcx, 0x98(%rax)
movl $0x68, %edi
callq 0x59820
movq %rax, -0x1a8(%rbp)
jmp 0x88e42
movq -0x1a8(%rbp), %rdi
callq 0x59db0
jmp 0x88e50
movq -0x120(%rbp), %rcx
movq -0x1a8(%rbp), %rax
movq %rax, 0xa0(%rcx)
movq 0xa0(%rcx), %rdi
addq $0x48, %rdi
movq 0x17f999(%rip), %rax    # 0x208810
movq %rax, -0xf0(%rbp)
movq $0x0, -0xe8(%rbp)
movq -0xf0(%rbp), %rsi
movq -0xe8(%rbp), %rdx
callq 0x8b3e0
jmp 0x88e9e
movq -0x120(%rbp), %rax
movq 0xa0(%rax), %rdi
movq 0x17fdad(%rip), %rax    # 0x208c60
movl (%rax), %esi
callq 0x59120
jmp 0x88ebc
leaq -0xd9(%rbp), %rdi
callq 0x59490
jmp 0x88f06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x88ef5
movq -0x1a8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
movl $0x68, %esi
callq 0x595b0
leaq -0xd9(%rbp), %rdi
callq 0x59490
jmp 0x8967e
movq -0x120(%rbp), %rdi
movq (%rdi), %rax
movl $0x2, %esi
callq *0x78(%rax)
movq -0x120(%rbp), %rdi
addq $0x2b8, %rdi            # imm = 0x2B8
callq 0x8af60
jmp 0x8920d
movq -0x120(%rbp), %rcx
xorl %eax, %eax
testb $0x1, 0xd4(%rcx)
movb %al, -0x1a9(%rbp)
je 0x88fbe
movq -0x58(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x5c060
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x1aa(%rbp)
jne 0x88f69
jmp 0x88fb0
movq -0x120(%rbp), %rax
addq $0x1a8, %rax            # imm = 0x1A8
movq %rax, -0x1b8(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x5cbd0
movq -0x1b8(%rbp), %rdi
movq %rax, -0xf8(%rbp)
leaq -0xf8(%rbp), %rsi
callq 0x8b370
movb %al, -0x1aa(%rbp)
movb -0x1aa(%rbp), %al
xorb $-0x1, %al
movb %al, -0x1a9(%rbp)
movb -0x1a9(%rbp), %al
testb $0x1, %al
jne 0x88fcd
jmp 0x89065
movq -0x120(%rbp), %rdi
movb $0x0, 0xd4(%rdi)
movb $0x0, 0xd5(%rdi)
movb $0x0, 0xd6(%rdi)
addq $0x108, %rdi            # imm = 0x108
xorl %esi, %esi
callq 0x5b110
testb $0x1, %al
jne 0x88ffd
jmp 0x8902f
movq -0x58(%rbp), %rdi
movq (%rdi), %rax
callq *0xd8(%rax)
movq -0x120(%rbp), %rsi
movq %rax, %rdi
addq $0x108, %rsi            # imm = 0x108
callq 0x59ac0
testb $0x1, %al
jne 0x89026
jmp 0x8902f
movq -0x58(%rbp), %rdi
callq 0x5a0a0
movq -0x120(%rbp), %rdi
callq 0x5df08
movq -0x120(%rbp), %rdi
movq (%rdi), %rax
movl $0x3, %esi
callq *0x78(%rax)
movq -0x120(%rbp), %rdi
addq $0x2d8, %rdi            # imm = 0x2D8
callq 0x8af60
jmp 0x8920b
movq -0x120(%rbp), %rcx
xorl %eax, %eax
testb $0x1, 0xd4(%rcx)
movb %al, -0x1b9(%rbp)
je 0x890e5
movq -0x58(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x5c060
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x1b9(%rbp)
jne 0x8909e
jmp 0x890e5
movq -0x120(%rbp), %rax
addq $0x1a8, %rax            # imm = 0x1A8
movq %rax, -0x1c8(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x5cbd0
movq -0x1c8(%rbp), %rdi
movq %rax, -0x100(%rbp)
leaq -0x100(%rbp), %rsi
callq 0x8b370
movb %al, -0x1b9(%rbp)
movb -0x1b9(%rbp), %al
testb $0x1, %al
jne 0x890f4
jmp 0x89209
leaq -0x101(%rbp), %rdi
callq 0x5c490
movq -0x120(%rbp), %rax
cmpq $0x0, 0xa0(%rax)
je 0x891fd
cmpl $0x0, -0x18(%rbp)
jne 0x891fd
movq -0x120(%rbp), %rax
movl 0x98(%rax), %edi
movl -0xb8(%rbp), %eax
subl %eax, %edi
callq 0x5c600
movl %eax, -0x1cc(%rbp)
jmp 0x89141
movq 0x17f8b0(%rip), %rax    # 0x2089f8
movl (%rax), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x1cc(%rbp), %eax
cmpl %ecx, %eax
jg 0x8919d
movq -0x120(%rbp), %rax
movl 0x9c(%rax), %edi
movl -0xb4(%rbp), %eax
subl %eax, %edi
callq 0x5c600
movl %eax, -0x1d0(%rbp)
jmp 0x89180
movq 0x17fd69(%rip), %rax    # 0x208ef0
movl (%rax), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl -0x1d0(%rbp), %eax
cmpl %ecx, %eax
jle 0x891fd
movq -0x120(%rbp), %rax
movq -0xb8(%rbp), %rcx
movq %rcx, 0x98(%rax)
movq 0xa0(%rax), %rdi
callq 0x5de90
jmp 0x891c0
movq -0x120(%rbp), %rax
movq 0xa0(%rax), %rdi
movq 0x17fa8b(%rip), %rax    # 0x208c60
movl (%rax), %esi
callq 0x59120
jmp 0x891de
jmp 0x891fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x101(%rbp), %rdi
callq 0x59490
jmp 0x8967e
leaq -0x101(%rbp), %rdi
callq 0x59490
jmp 0x8920b
jmp 0x8920d
movq -0x120(%rbp), %rax
testb $0x1, 0xd7(%rax)
je 0x89237
movq -0x120(%rbp), %rdi
addq $0x418, %rdi            # imm = 0x418
leaq -0xb8(%rbp), %rsi
callq 0x8b580
jmp 0x8965d
movq -0x120(%rbp), %rax
testb $0x1, 0xd4(%rax)
je 0x89301
movq -0x120(%rbp), %rdi
movb $0x1, 0xd5(%rdi)
callq 0x5df08
movq -0x120(%rbp), %rdi
movq (%rdi), %rax
movl $0x4, %esi
callq *0x78(%rax)
movq -0x120(%rbp), %rax
testb $0x1, 0xcd(%rax)
jne 0x892a1
movq -0x120(%rbp), %rdi
movb $0x1, 0xcd(%rdi)
addq $0x4d8, %rdi            # imm = 0x4D8
callq 0x8af60
jmp 0x892b4
movq -0x120(%rbp), %rdi
addq $0x538, %rdi            # imm = 0x538
callq 0x8af60
movq -0x120(%rbp), %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
leaq -0xb8(%rbp), %rsi
callq 0x8b580
movq -0x120(%rbp), %rax
testb $0x1, 0xd7(%rax)
jne 0x892ff
movq -0x120(%rbp), %rdi
movb $0x1, 0xd7(%rdi)
addq $0x3f8, %rdi            # imm = 0x3F8
leaq -0xb8(%rbp), %rsi
callq 0x8b580
jmp 0x8932d
movq -0x120(%rbp), %rax
testb $0x1, 0xcd(%rax)
je 0x8932b
movq -0x120(%rbp), %rdi
movb $0x0, 0xcd(%rdi)
addq $0x518, %rdi            # imm = 0x518
callq 0x8af60
jmp 0x8932d
jmp 0x8965d
movq -0x120(%rbp), %rax
testb $0x1, 0xd4(%rax)
je 0x8938f
movq -0x120(%rbp), %rdi
movb $0x1, 0xd5(%rdi)
movq (%rdi), %rax
movl $0x4, %esi
callq *0x78(%rax)
movq -0x120(%rbp), %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
leaq -0xb8(%rbp), %rsi
callq 0x8b580
movq -0x120(%rbp), %rdi
addq $0x358, %rdi            # imm = 0x358
leaq -0xb8(%rbp), %rsi
callq 0x8b580
jmp 0x8965d
movq -0x120(%rbp), %rax
testb $0x1, 0xd4(%rax)
je 0x89403
movq -0x120(%rbp), %rdi
movq (%rdi), %rax
movl $0x5, %esi
callq *0x78(%rax)
movq -0x120(%rbp), %rdi
addq $0x318, %rdi            # imm = 0x318
leaq -0xb8(%rbp), %rsi
callq 0x8b580
movq -0x120(%rbp), %rax
testb $0x1, 0xd5(%rax)
je 0x89401
movq -0x120(%rbp), %rdi
movb $0x0, 0xd5(%rdi)
addq $0x338, %rdi            # imm = 0x338
leaq -0xb8(%rbp), %rsi
callq 0x8b580
jmp 0x89403
movq -0x120(%rbp), %rax
testb $0x1, 0xd7(%rax)
je 0x89434
movq -0x120(%rbp), %rdi
movb $0x0, 0xd7(%rdi)
addq $0x438, %rdi            # imm = 0x438
leaq -0xb8(%rbp), %rsi
callq 0x8b580
jmp 0x8965d
movq -0x120(%rbp), %rax
testb $0x1, 0xd4(%rax)
je 0x8946b
movq -0x120(%rbp), %rdi
callq 0x5b0d0
movq -0x58(%rbp), %rdi
movq (%rdi), %rax
movl $0x7800, %esi           # imm = 0x7800
xorl %ecx, %ecx
movl %ecx, %edx
callq *0x80(%rax)
jmp 0x8965d
movl $0x0, -0x108(%rbp)
cmpl $0x0, -0x108(%rbp)
ja 0x8948d
movl $0x3, -0x108(%rbp)
movq -0x120(%rbp), %rdi
addq $0x458, %rdi            # imm = 0x458
cvtsi2sdl -0x18(%rbp), %xmm0
movsd 0x100248(%rip), %xmm1   # 0x1896f0
divsd %xmm1, %xmm0
movl -0x108(%rbp), %eax
cvtsi2sd %rax, %xmm1
mulsd %xmm1, %xmm0
callq 0x8b6a0
jmp 0x8965d
movq -0x120(%rbp), %rax
testb $0x1, 0xcd(%rax)
je 0x894e5
movq -0x120(%rbp), %rax
testb $0x1, 0xd2(%rax)
jne 0x894ea
jmp 0x8965d
cmpl $0x9, -0x18(%rbp)
jne 0x895a9
movq $0x0, -0x110(%rbp)
movl $0x10, %edi
callq 0x5bc00
testb $0x1, %al
jne 0x8950f
jmp 0x89540
movq -0x120(%rbp), %rdi
movq 0x190(%rdi), %rax
movq %rax, -0x1d8(%rbp)
callq 0x5d050
movq -0x1d8(%rbp), %rdi
movl %eax, %esi
callq 0x5c5c0
movq %rax, -0x110(%rbp)
jmp 0x8956f
movq -0x120(%rbp), %rdi
movq 0x190(%rdi), %rax
movq %rax, -0x1e0(%rbp)
callq 0x5d050
movq -0x1e0(%rbp), %rdi
movl %eax, %esi
callq 0x5a2f0
movq %rax, -0x110(%rbp)
cmpq $0x0, -0x110(%rbp)
je 0x8959f
movq -0x120(%rbp), %rdi
movb $0x0, 0xcd(%rdi)
addq $0x518, %rdi            # imm = 0x518
callq 0x8af60
movq -0x110(%rbp), %rdi
callq 0x5a610
movl $0xffffffff, -0x9c(%rbp) # imm = 0xFFFFFFFF
jmp 0x8965d
movq -0x120(%rbp), %rax
testb $0x1, 0xcd(%rax)
je 0x8965b
movl -0x18(%rbp), %edi
movq 0x17f234(%rip), %rax    # 0x208800
movswl (%rax), %esi
callq 0x5be90
movq %rax, -0x118(%rbp)
cmpq $0x0, -0x118(%rbp)
je 0x89641
movq -0x118(%rbp), %rdi
callq 0x5bb10
movq %rax, %rdi
movq 0x17f6cd(%rip), %rax    # 0x208cc8
movswl (%rax), %esi
callq 0x5bc10
testb $0x1, %al
jne 0x89609
jmp 0x89630
movq -0x118(%rbp), %rdi
callq 0x5bd20
movl %eax, -0x1e4(%rbp)
movq -0x58(%rbp), %rdi
callq 0x5bd20
movl %eax, %ecx
movl -0x1e4(%rbp), %eax
cmpl %ecx, %eax
jge 0x8963d
movq -0x118(%rbp), %rax
cmpq -0x58(%rbp), %rax
jne 0x8963f
jmp 0x8965d
jmp 0x89641
movq -0x120(%rbp), %rdi
movb $0x0, 0xcd(%rdi)
addq $0x518, %rdi            # imm = 0x518
callq 0x8af60
jmp 0x8965d
movq -0x120(%rbp), %rdi
callq 0x594d0
movl -0x9c(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x1f0, %rsp            # imm = 0x1F0
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x5b6b0
nopw (%rax,%rax)