Function at 0x45f920
Capabilities:
Resolve function by parsing pe exports

Disassembly:
sub esp, 0x78
test byte [0x635984], 1
push ebx
mov ebx, dword [esp + 0x84]
push ebp
push esi
mov esi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push edi
mov edi, dword [sym.imp.KERNEL32.dll_GetModuleHandleW]
jne 0x45f95e
or dword [0x635984], 1
push str.AlphaBlend
push 0x609658
call edi
push eax
call esi
mov dword [0x635980], eax
cmp dword [0x635980], 0
jne 0x45f971
mov dword [0x635980], 0x45cf00
test byte [0x635984], 2
jne 0x45f995
or dword [0x635984], 2
push str.GradientFill
push 0x609658
call edi
push eax
call esi
mov dword [0x63597c], eax
mov edx, dword [esp + 0x94]
mov eax, dword [esp + 0x98]
mov ecx, edx
shr ecx, 0x18
mov esi, eax
shr esi, 0x18
add ecx, esi
shr ecx, 1
mov byte [esp + 0x13], cl
test cl, cl
je 0x45fd0a
mov ecx, dword [ebx]
mov edi, dword [ebx + 8]
mov ebp, dword [ebx + 0xc]
sub edi, dword [ebx]
sub ebp, dword [ebx + 4]
cmp byte [esp + 0x13], 0xff
mov esi, dword [esp + 0x8c]
mov dword [esp + 0x58], ecx
mov ecx, dword [ebx + 4]
mov dword [esp + 0x5c], ecx
mov ecx, dword [ebx + 8]
mov dword [esp + 0x60], ecx
mov ecx, dword [ebx + 0xc]
mov dword [esp + 0x50], edi
mov dword [esp + 0x30], ebp
mov dword [esp + 0x64], ecx
mov dword [esp + 0x18], esi
mov dword [esp + 0x38], 0
mov dword [esp + 0x34], 0
jae 0x45fa5c
xor eax, eax
mov edx, esi
push edx
mov dword [esp + 0x60], eax
mov dword [esp + 0x5c], eax
mov dword [esp + 0x64], edi
mov dword [esp + 0x68], ebp
call dword [sym.imp.GDI32.dll_CreateCompatibleDC]
push ebp
mov esi, eax
mov eax, dword [esp + 0x90]
push edi
push eax
mov dword [esp + 0x24], esi
call dword [sym.imp.GDI32.dll_CreateCompatibleBitmap]
push eax
push esi
mov dword [esp + 0x40], eax
call dword [sym.imp.GDI32.dll_SelectObject]
mov edx, dword [esp + 0x94]
mov dword [esp + 0x34], eax
mov eax, dword [esp + 0x98]
cmp dword [0x63597c], 0
je 0x45fb37
mov ecx, dword [esp + 0x58]
mov dword [esp + 0x68], ecx
mov ecx, dword [esp + 0x5c]
mov dword [esp + 0x6c], ecx
mov ecx, edx
shr ecx, 0x10
movzx cx, cl
shl cx, 8
mov word [esp + 0x70], cx
mov ecx, edx
shr ecx, 8
movzx dx, dl
movzx cx, cl
shl dx, 8
shl cx, 8
mov word [esp + 0x74], dx
mov edx, dword [esp + 0x60]
mov word [esp + 0x72], cx
mov dword [esp + 0x78], edx
mov ecx, 0xff00
mov word [esp + 0x76], cx
mov ecx, dword [esp + 0x64]
mov dword [esp + 0x7c], ecx
mov edx, eax
shr edx, 0x10
movzx cx, dl
shl cx, 8
mov edx, eax
shr edx, 8
mov word [esp + 0x80], cx
movzx cx, dl
push 1
movzx dx, al
shl cx, 8
push 1
mov word [esp + 0x8a], cx
shl dx, 8
lea ecx, [esp + 0x58]
push ecx
mov word [esp + 0x90], dx
push 2
lea edx, [esp + 0x78]
push edx
mov eax, 0xff00
push esi
mov word [esp + 0x9e], ax
mov dword [esp + 0x68], 0
mov dword [esp + 0x6c], 1
call dword [0x63597c]
jmp 0x45fcae
xor ecx, ecx
cmp dword [esp + 0x9c], 0x10
mov esi, 1
setge cl
add ecx, 3
shl esi, cl
mov ebp, ecx
mov dword [esp + 0x28], esi
xor esi, esi
cmp dword [esp + 0x28], esi
jle 0x45fca6
mov di, ax
movzx ecx, al
shr eax, 0x10
shr di, 8
mov dword [esp + 0x3c], eax
mov word [esp + 0x14], di
mov di, dx
mov eax, edx
shr eax, 0x10
shr di, 8
mov dword [esp + 0x40], eax
mov eax, ecx
mov word [esp + 0x16], di
mov edi, dword [esp + 0x28]
neg eax
imul ecx, edi
movzx edx, dl
mov dword [esp + 0x1c], esi
mov dword [esp + 0x48], edx
mov dword [esp + 0x24], edi
mov dword [esp + 0x4c], eax
mov dword [esp + 0x20], ecx
jmp 0x45fbb4
mov edi, dword [esp + 0x24]
movzx eax, byte [esp + 0x14]
movzx ecx, byte [esp + 0x16]
imul eax, edi
imul ecx, esi
add eax, ecx
mov ecx, ebp
sar eax, cl
mov ecx, dword [esp + 0x20]
movzx edx, al
mov eax, dword [esp + 0x1c]
add eax, ecx
mov ecx, ebp
sar eax, cl
movzx ecx, al
movzx eax, byte [esp + 0x3c]
shl ecx, 8
imul eax, edi
or edx, ecx
movzx ecx, byte [esp + 0x40]
imul ecx, esi
add eax, ecx
mov ecx, ebp
sar eax, cl
shl edx, 8
movzx eax, al
or edx, eax
push edx
call dword [sym.imp.GDI32.dll_CreateSolidBrush]
mov ecx, dword [esp + 0x58]
mov edx, dword [esp + 0x5c]
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x60]
mov dword [esp + 0x68], ecx
mov ecx, dword [esp + 0x64]
mov dword [esp + 0x70], eax
mov eax, dword [ebx + 0xc]
mov dword [esp + 0x74], ecx
mov edi, eax
sub edi, dword [ebx + 4]
mov dword [esp + 0x6c], edx
mov ecx, edi
imul ecx, esi
mov edx, ecx
mov ecx, ebp
sar edx, cl
inc esi
mov ecx, edx
mov edx, eax
sub edx, ecx
mov ecx, esi
imul ecx, edi
mov edi, ecx
mov ecx, ebp
sar edi, cl
mov dword [esp + 0x74], edx
sub eax, edi
sub edx, eax
mov dword [esp + 0x6c], eax
test edx, edx
jle 0x45fc79
mov edx, dword [esp + 0x2c]
mov ecx, dword [esp + 0x8c]
push edx
lea eax, [esp + 0x6c]
push eax
push ecx
call dword [sym.imp.USER32.dll_FillRect]
mov edx, dword [esp + 0x2c]
push edx
call dword [sym.imp.GDI32.dll_DeleteObject]
mov eax, dword [esp + 0x48]
mov ecx, dword [esp + 0x4c]
add dword [esp + 0x1c], eax
add dword [esp + 0x20], ecx
dec dword [esp + 0x24]
cmp esi, dword [esp + 0x28]
jl 0x45fbb0
mov edi, dword [esp + 0x50]
mov ebp, dword [esp + 0x30]
mov esi, dword [esp + 0x18]
mov al, byte [esp + 0x13]
cmp al, 0xff
jae 0x45fd0a
mov ecx, dword [ebx]
mov byte [esp + 0x1a], al
mov eax, dword [ebx + 4]
mov byte [esp + 0x18], 0
mov byte [esp + 0x19], 0
mov byte [esp + 0x1b], 1
mov edx, dword [esp + 0x18]
push edx
mov edx, dword [esp + 0x90]
push ebp
push edi
push 0
push 0
push esi
push ebp
push edi
push eax
push ecx
push edx
call dword [0x635980]
mov eax, dword [esp + 0x34]
push eax
push esi
call dword [sym.imp.GDI32.dll_SelectObject]
mov ecx, dword [esp + 0x38]
push ecx
call dword [sym.imp.GDI32.dll_DeleteObject]
push esi
call dword [sym.imp.GDI32.dll_DeleteDC]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x78
ret