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

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x6fc
mov edx, dword [esp + 0x714]
mov eax, dword [esp + 0x710]
mov ecx, edx
mov dword [esp + 0x54], edx
mov edx, dword [esp + 0x718]
mov dword [esp + 0x68], eax
mov dword [esp + 0x70], edx
mov edx, dword [esp + 0x71c]
mov dword [esp + 0x74], edx
mov edx, dword [eax + 0x180]
mov eax, dword [eax + 0x190]
mov eax, dword [eax + edx*4]
mov dword [esp + 0x28], eax
mov eax, dword [eax + 0x14]
lea edx, [eax*8]
mov dword [esp + 0x30], eax
add eax, eax
cmp eax, 0
mov dword [esp + 0x40], edx
mov edx, eax
mov dword [esp + 0x48], eax
jle 0x700453a1
mov esi, dword [ecx]
test esi, esi
jne 0x700453a3
xor eax, eax
jmp 0x7004532f
mov ebx, dword [ecx + eax*4]
test ebx, ebx
jne 0x700453a3
add eax, 1
cmp eax, edx
jne 0x70045328
mov eax, dword [esp + 0x28]
mov edx, 0x600
lea edi, [eax + 0x160]
and dword [eax + 0x18], 0xffffffef
test edi, 1
jne 0x70045fde
test edi, 2
jne 0x70045ffb
mov ecx, edx
xor eax, eax
shr ecx, 2
test dl, 2
rep stosd dword es:[edi], eax
je 0x70045378
xor eax, eax
add edi, 2
mov word [edi - 2], ax
and edx, 1
je 0x70045380
mov byte [edi], 0
mov eax, dword [esp + 0x28]
mov dword [eax + 0x84], 0
mov dword [esp], eax
call fcn.7003ee50
add esp, 0x6fc
pop ebx
pop esi
pop edi
pop ebp
ret
je 0x70045336
mov eax, dword [esp + 0x28]
mov edx, 0x1b00
mov ebx, dword [eax + 0x18]
mov eax, ebx
and eax, 0x7c0000
shr eax, 0xa
add eax, 0x400
cmp eax, 0x1b00
cmovg eax, edx
mov dword [esp + 0x4c], eax
mov eax, dword [esp + 0x68]
test byte [eax + 0x16], 1
je 0x70045aab
mov eax, ebx
and eax, 0x10
cmp eax, 1
sbb edx, edx
mov dword [esp + 0x5c], edx
mov dword [esp + 0x44], edx
and dword [esp + 0x5c], 1
add dword [esp + 0x44], 1
xor eax, eax
mov ecx, 0x180
lea edi, [esp + 0xf0]
rep stosd dword es:[edi], eax
mov edi, dword [esp + 0x40]
mov dword [esp], edi
call sub.msvcrt.dll_malloc
mov dword [esp], edi
mov esi, eax
mov dword [esp + 0x80], eax
call sub.msvcrt.dll_malloc
mov dword [esp], edi
mov ebp, eax
mov dword [esp + 0x84], eax
call sub.msvcrt.dll_malloc
mov dword [esp + 0x6c], eax
mov eax, dword [esp + 0x28]
mov eax, dword [eax + 0x9c]
cmp eax, 1
jle 0x7004544e
and ebx, 8
jne 0x70045baa
mov ecx, dword [esp + 0x70]
mov dword [esp + 0x50], 0
test ecx, ecx
jne 0x70045a8e
cmp eax, 6
jg 0x70045b24
mov edx, dword [esp + 0x28]
mov dword [esp + 0x58], 0
mov dword [esp + 0x64], 0xffffffff
mov dword [esp + 0x3c], 0
add edx, 0x160
mov dword [esp + 0x78], edx
and edx, 1
mov dword [esp + 0x7c], edx
cmp dword [esp + 0x58], eax
jge 0x70045754
mov edx, dword [esp + 0x58]
test edx, edx
jne 0x70045897
mov eax, dword [esp + 0x28]
mov eax, dword [eax + 0xa0]
mov edx, eax
mov dword [esp + 0x60], eax
lea eax, [eax + eax*8]
lea edx, [edx + eax*2]
mov eax, dword [esp + 0x28]
lea ebp, [esp + 0x90]
add edx, dword [eax + 0x7c0]
lea eax, [edx + 2]
mov dword [esp], eax
mov dword [esp + 0x38], edx
call sub.msvcrt.dll_strlen
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x44]
test eax, eax
jne 0x700456cd
mov eax, dword [esp + 0x38]
cmp byte [eax], 0
je 0x70045509
mov edi, dword [esp + 0x5c]
test edi, edi
je 0x700456cd
mov eax, dword [esp + 0x50]
mov edx, dword [esp + 0x80]
mov edi, dword [esp + 0x40]
test eax, eax
cmove eax, dword [esp + 0x54]
mov dword [esp + 8], edi
mov dword [esp], edx
mov dword [esp + 4], eax
mov dword [esp + 0x1c], edx
call sub.msvcrt.dll_memcpy
mov ebx, dword [esp + 0x2c]
xor eax, eax
mov ecx, 0x180
lea edi, [esp + 0xf0]
rep stosd dword es:[edi], eax
test ebx, ebx
jle 0x70045694
mov edx, dword [esp + 0x30]
mov ax, 0x800
cmp edx, 0x800
cmovle eax, edx
xor ebx, ebx
mov dword [esp + 0x34], eax
lea eax, [esp + 0xf0]
mov dword [esp + 0x20], eax
xor eax, eax
mov esi, dword [esp + 0x38]
mov edi, ebp
mov ecx, 0x18
rep stosd dword es:[edi], eax
movsx eax, byte [esi + 1]
mov dword [esp + 0x94], eax
movsx eax, byte [esi + ebx + 2]
test eax, eax
mov dword [esp + 0x90], eax
js 0x70045701
mov eax, ebx
mov ecx, dword [esp + 0x34]
and eax, 1
xor eax, 1
mov eax, dword [esp + eax*4 + 0x80]
mov dword [esp + 4], 0xffffffff
mov dword [esp], ebp
mov dword [esp + 0x24], eax
mov edx, eax
mov eax, dword [esp + 0x1c]
call fcn.70043130
test ebx, ebx
je 0x70045a45
xor eax, eax
mov dword [esp + eax + 0xa0], 0
add eax, 4
cmp eax, 0x20
jb 0x700455d6
xor eax, eax
mov dword [esp + eax + 0xc0], 0
add eax, 4
cmp eax, 0x20
jb 0x700455eb
mov eax, dword [esp + 0x28]
mov esi, ebp
mov ecx, 0x18
mov edi, dword [esp + 0x20]
rep movsd dword es:[edi], dword [esi]
mov eax, dword [eax + 0x18]
and eax, 0x7c0000
cmp eax, 0x3c0000
jbe 0x70045660
mov ecx, dword [esp + 0x30]
add ebx, 1
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x1c]
mov dword [esp + 4], 1
mov dword [esp], ebp
call fcn.70043130
add dword [esp + 0x20], 0x60
cmp ebx, dword [esp + 0x2c]
je 0x70045682
mov eax, ebx
and eax, 1
mov eax, dword [esp + eax*4 + 0x80]
mov dword [esp + 0x1c], eax
jmp 0x70045571
mov ecx, dword [esp + 0x30]
add ebx, 1
mov edx, dword [esp + 0x24]
mov eax, dword [esp + 0x1c]
mov dword [esp], ebp
call fcn.70043bc0
add dword [esp + 0x20], 0x60
cmp ebx, dword [esp + 0x2c]
jne 0x70045648
mov eax, dword [esp + 0x2c]
and eax, 1
mov eax, dword [esp + eax*4 + 0x80]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x4c]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x48]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x1c]
mov dword [esp], eax
call fcn.700402e0
cmp eax, 0xffffffff
jne 0x70045720
mov ecx, dword [esp + 0x2c]
test ecx, ecx
je 0x70045720
mov eax, dword [esp + 0x44]
sar dword [esp + 0x2c], 1
test eax, eax
je 0x700454f4
mov esi, dword [esp + 0x3c]
test esi, esi
je 0x7004590e
mov edx, dword [esp + 0x40]
mov eax, dword [esp + 0x80]
mov dword [esp + 8], edx
mov edx, dword [esp + 0x3c]
mov dword [esp], eax
mov dword [esp + 0x1c], eax
mov dword [esp + 4], edx
call sub.msvcrt.dll_memcpy
jmp 0x70045533
mov eax, dword [esp + 0x28]
test byte [eax + 0x18], 0x20
jne 0x7004559f
mov dword [esp + 0x90], 0xfffffffd
jmp 0x7004559f
cmp dword [esp + 0x64], eax
mov ebx, eax
ja 0x70045972
mov ebp, dword [esp + 0x58]
mov eax, dword [esp + 0x28]
test ebp, ebp
jne 0x700458d0
mov eax, dword [eax + 0x9c]
mov dword [esp + 0x58], 1
cmp dword [esp + 0x58], eax
jl 0x700454a2
mov edi, dword [esp + 0x44]
test edi, edi
jne 0x70045787
mov edi, dword [esp + 0x28]
mov eax, dword [edi + 0xa0]
lea edx, [eax + eax*8]
lea eax, [eax + edx*2]
add eax, dword [edi + 0x7c0]
cmp byte [eax], 0
je 0x70045b17
mov esi, dword [esp + 0x5c]
test esi, esi
jne 0x70045b17
mov eax, dword [esp + 0x28]
or dword [eax + 0x18], 0x10
mov eax, dword [esp + 0x68]
cmp dword [eax + 0x18], 3
jle 0x70045ac0
mov eax, dword [esp + 0x28]
test byte [eax + 0x18], 0x10
jne 0x70045b31
mov edx, dword [esp + 0x50]
test edx, edx
je 0x70046016
mov edi, dword [esp + 0x74]
mov eax, dword [esp + 0x68]
mov ecx, edi
call fcn.70044b00
test edi, edi
je 0x700457e6
mov eax, dword [esp + 0x40]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x50]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x54]
mov dword [esp], eax
call sub.msvcrt.dll_memcpy
mov eax, dword [esp + 0x68]
cmp dword [eax + 0x18], 3
jg 0x700457fc
mov ecx, dword [esp + 0x70]
test ecx, ecx
je 0x70045aed
mov edi, dword [esp + 0x28]
mov eax, dword [edi + 0xa0]
lea edx, [eax + eax*8]
lea eax, [eax + edx*2]
add eax, dword [edi + 0x7c0]
movsx eax, byte [eax]
mov edx, dword [esp + 0x28]
mov dword [edx + 0x8c], eax
mov eax, dword [esp + 0x30]
mov dword [esp + 0xc], 0xffffffff
mov dword [esp], edx
mov dword [esp + 8], eax
mov eax, dword [esp + 0x6c]
mov dword [esp + 4], eax
call fcn.7003f990
mov eax, dword [esp + 0x50]
test eax, eax
je 0x7004584f
mov dword [esp], eax
call sub.msvcrt.dll_free
mov eax, dword [esp + 0x3c]
test eax, eax
je 0x7004585f
mov dword [esp], eax
call sub.msvcrt.dll_free
mov eax, dword [esp + 0x84]
mov dword [esp], eax
call sub.msvcrt.dll_free
mov eax, dword [esp + 0x80]
mov dword [esp], eax
call sub.msvcrt.dll_free
mov eax, dword [esp + 0x6c]
mov dword [esp + 0x710], eax
add esp, 0x6fc
pop ebx
pop esi
pop edi
pop ebp
jmp sub.msvcrt.dll_free
mov edx, dword [esp + 0x28]
mov ecx, dword [edx + 0xa4]
test ecx, ecx
jne 0x700459fa
mov edx, dword [esp + 0x28]
mov edx, dword [edx + 0xa0]
test edx, edx
je 0x7004600c
xor edx, edx
mov dword [esp + 0x60], 0
jmp 0x700454c4
mov edx, dword [eax + 0xa4]
mov eax, 1
test edx, edx
je 0x700458f4
mov eax, dword [esp + 0x28]
add edx, edx
mov eax, dword [eax + 0x98]
mov dword [esp + 0x1c], eax
sub eax, 1
and eax, edx
mov edx, dword [esp + 0x28]
add dword [esp + 0x58], 1
mov dword [edx + 0xa4], eax
mov eax, dword [edx + 0x9c]
jmp 0x70045498
mov esi, dword [esp + 0x40]
mov dword [esp], esi
call sub.msvcrt.dll_malloc
mov dword [esp + 8], esi
mov edi, eax
mov dword [esp + 0x3c], eax
mov eax, dword [esp + 0x50]
mov dword [esp], edi
test eax, eax
cmove eax, dword [esp + 0x54]
mov dword [esp + 4], eax
call sub.msvcrt.dll_memcpy
mov eax, dword [esp + 0x30]
test eax, eax
lea ecx, [eax - 1]
je 0x700456d9
mov eax, edi
lea esi, [esi]
mov ebx, dword [eax + 4]
sub ecx, 1
add eax, 8
mov edx, dword [eax - 8]
sub edx, ebx
mov dword [eax - 8], edx
sar edx, 1
add ebx, edx
mov dword [eax - 4], ebx
cmp ecx, 0xffffffff
jne 0x70045950
jmp 0x700456d9
mov eax, dword [esp + 0x40]
lea esi, [esp + 0xf0]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x1c]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x6c]
mov dword [esp], eax
call sub.msvcrt.dll_memcpy
mov edx, dword [esp + 0x7c]
mov eax, 0x600
mov edi, dword [esp + 0x78]
test edx, edx
jne 0x70045b85
test edi, 2
jne 0x70045b70
mov ecx, eax
xor edx, edx
shr ecx, 2
test al, 2
rep movsd dword es:[edi], dword [esi]
je 0x700459ce
movzx edx, word [esi]
mov word [edi], dx
mov edx, 2
test al, 1
je 0x700459d9
movzx eax, byte [esi + edx]
mov byte [edi + edx], al
mov eax, dword [esp + 0x28]
mov edx, dword [esp + 0x2c]
mov dword [esp + 0x64], ebx
mov dword [eax + 0x84], edx
mov edx, dword [esp + 0x60]
mov dword [eax + 0xa0], edx
jmp 0x7004572c
mov ebx, dword [edx + 0xa0]
lea edx, [ecx - 1]
mov dword [esp + 0x60], edx
and dword [esp + 0x60], ebx
or dword [esp + 0x60], ecx
mov edi, dword [esp + 0x60]
lea edx, [edi + edi*8]
cmp ebx, edi
lea edx, [edi + edx*2]
jne 0x700454c4
mov edx, dword [esp + 0x28]
add ecx, ecx
mov edx, dword [edx + 0x98]
mov dword [esp + 0x1c], edx
sub edx, 1
and edx, ecx
mov edi, dword [esp + 0x28]
mov dword [edi + 0xa4], edx
jmp 0x70045498
mov eax, ebp
call fcn.70043060
jmp 0x700455fe
mov ebx, dword [esp + 0x1c]
test ebx, ebx
jne 0x70045a7c
mov edi, dword [esp + 0x28]
mov eax, dword [edi + 0x14]
mov edx, dword [edi + 0x128]
imul edx, eax
imul eax, dword [edi + 0x12c]
sub dword [edi + 0x120], edx
sub dword [edi + 0x124], eax
mov eax, dword [esp + 0x28]
mov dword [esp + 0x70], 1
mov eax, dword [eax + 0x9c]
mov edx, dword [esp + 0x28]
mov dword [edx + 0xa4], 0
mov dword [edx + 0xa0], 0
jmp 0x7004546b
mov dword [esp + 0x5c], 0
mov dword [esp + 0x44], 0
jmp 0x700453f4
mov ebx, dword [esp + 0x74]
test ebx, ebx
je 0x700457f0
mov eax, dword [esp + 0x40]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x6c]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x54]
mov dword [esp], eax
call sub.msvcrt.dll_memcpy
jmp 0x700457e6
mov edi, dword [esp + 0x28]
mov eax, dword [edi + 0xa0]
lea edx, [eax + eax*8]
lea eax, [eax + edx*2]
add eax, dword [edi + 0x7c0]
movsx eax, byte [eax]
cmp dword [edi + 0x8c], eax
jne 0x70045815
jmp 0x7004583f
mov eax, dword [esp + 0x28]
and dword [eax + 0x18], 0xffffffef
jmp 0x7004578f
mov edx, dword [esp + 0x70]
mov dword [esp + 0x50], edx
jmp 0x70045a8e
mov edi, dword [esp + 0x74]
mov edx, dword [esp + 0x3c]
mov eax, dword [esp + 0x68]
mov ecx, edi
call fcn.70044b00
test edi, edi
je 0x700457e6
mov eax, dword [esp + 0x40]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x3c]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x54]
mov dword [esp], eax
call sub.msvcrt.dll_memcpy
jmp 0x700457e6
movzx edx, word [esi]
add edi, 2
add esi, 2
sub eax, 2
mov word [edi - 2], dx
jmp 0x700459b6
movzx eax, byte [esp + 0xf0]
lea esi, [esp + 0xf1]
mov byte [edi], al
mov eax, dword [esp + 0x28]
lea edi, [eax + 0x161]
mov eax, 0x5ff
jmp 0x700459aa
lea ebx, [esp + 0x90]
xor eax, eax
mov edi, ebx
mov ecx, 0x18
rep stosd dword es:[edi], eax
mov edi, dword [esp + 0x30]
mov ax, 0x800
mov edx, esi
mov dword [esp], ebx
mov dword [esp + 4], 0xffffffff
cmp edi, 0x800
cmovle eax, edi
mov ecx, eax
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x54]
mov dword [esp + 0x94], 2
mov dword [esp + 0x90], 0x12
call fcn.70043130
mov eax, ebx
call fcn.70043060
mov eax, dword [esp + 0x54]
mov ecx, edi
mov edx, esi
mov dword [esp], ebx
mov dword [esp + 4], 1
mov dword [esp + 0x30], edi
mov edi, ebx
call fcn.70043130
xor eax, eax
mov ecx, 0x18
rep stosd dword es:[edi], eax
mov ecx, dword [esp + 0x1c]
mov eax, esi
mov dword [esp], ebx
mov edx, ebp
mov dword [esp + 4], 0xffffffff
mov dword [esp + 0x94], 2
mov dword [esp + 0x90], 0x11
call fcn.70043130
mov ecx, dword [esp + 0x30]
mov edx, ebp
mov eax, esi
mov dword [esp], ebx
mov dword [esp + 4], 1
call fcn.70043130
mov edi, dword [esp + 0x40]
mov dword [esp], edi
call sub.msvcrt.dll_malloc
mov edx, dword [esp + 0x54]
mov dword [esp + 8], edi
mov dword [esp + 4], edx
mov esi, eax
mov dword [esp], esi
mov dword [esp + 0x50], eax
call sub.msvcrt.dll_memcpy
mov edi, dword [esp + 0x28]
mov ebx, dword [edi + 0x18]
mov edx, dword [edi + 0x154]
mov dword [esp + 0xc], 0xffffffff
mov eax, dword [edi + 0x14]
mov dword [esp], edi
mov dword [esp + 4], ebp
and ebx, 0x20000000
mov dword [esp + 0x1c], edx
mov dword [esp + 8], eax
call fcn.7003f990
mov eax, edi
mov edi, dword [edi + 0x14]
test byte [eax + 0x18], 0x40
mov dword [esp + 0x88], 0
mov dword [esp + 0x8c], 0
jne 0x70045d55
test edi, edi
mov esi, dword [esp + 0x50]
mov ebx, edi
je 0x70045a7c
mov edi, dword [esi]
add ebp, 8
add esi, 8
mov dword [esp + 8], 0
mov eax, dword [ebp - 8]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x28]
mov dword [esp], eax
call fcn.70041150
sub eax, dword [ebp - 8]
add eax, edi
mov edi, dword [esi - 4]
mov dword [esi - 8], eax
mov dword [esp + 8], 1
mov eax, dword [ebp - 4]
mov dword [esp + 4], eax
mov eax, dword [esp + 0x28]
mov dword [esp], eax
call fcn.70041150
sub eax, dword [ebp - 4]
add eax, edi
mov dword [esi - 4], eax
sub ebx, 1
jne 0x70045cfa
jmp 0x70045a7c
test edi, edi
je 0x70045a51
mov esi, dword [esp + 0x50]
test ebx, ebx
mov edx, ebp
lea eax, [edi - 1]
setne byte [esp + 0x2c]
xor ecx, ecx
mov ebp, esi
mov esi, dword [esp + 0x28]
mov dword [esp + 0x38], eax
mov dword [esp + 0x20], 0
jmp 0x70045eb6
mov ebx, ecx
movzx eax, cx
xor bx, bx
imul eax, edi
sar ebx, 9
imul ebx, edi
sar eax, 9
lea ebx, [eax + ebx + 1]
mov eax, edi
sar ebx, 1
neg ebx
shr eax, 0x1f
and al, byte [esp + 0x2c]
mov byte [esp + 0x24], al
je 0x70045efa
test ebx, ebx
je 0x70045efa
cmp ebx, ecx
jne 0x70045dce
lea eax, [ebx + 1]
test ebx, ebx
lea ecx, [ebx - 1]
cmovns eax, ecx
mov ebx, eax
mov eax, dword [ebp]
mov dword [esp + 8], 0
mov dword [esp + 0x3c], edx
mov dword [esp + 0x34], eax
mov eax, dword [edx]
mov dword [esp], esi
mov dword [esp + 4], eax
call fcn.70041150
mov edx, dword [esp + 0x3c]
sub eax, dword [edx]
add eax, ebx
mov dword [esp + 0x88], eax
add eax, dword [esp + 0x34]
mov dword [ebp], eax
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x70045f3d
mov eax, dword [esp + 0x8c]
movsx ecx, ax
cmp eax, ecx
je 0x70045f71
mov ebx, eax
movzx ecx, ax
xor bx, bx
imul ecx, edi
sar ebx, 9
imul ebx, edi
sar ecx, 9
lea ebx, [ecx + ebx + 1]
sar ebx, 1
neg ebx
cmp byte [esp + 0x24], 0
je 0x70045f8c
test ebx, ebx
je 0x70045f8c
cmp eax, ebx
jne 0x70045e63
lea eax, [ebx + 1]
test ebx, ebx
lea ecx, [ebx - 1]
cmovns eax, ecx
mov ebx, eax
mov edi, dword [ebp + 4]
mov dword [esp + 8], 1
mov eax, dword [edx + 4]
mov dword [esp], esi
mov dword [esp + 0x24], edx
mov dword [esp + 4], eax
call fcn.70041150
mov edx, dword [esp + 0x24]
sub eax, dword [edx + 4]
add eax, ebx
mov dword [esp + 0x8c], eax
add eax, edi
mov dword [ebp + 4], eax
mov eax, dword [esp + 0x38]
add ebp, 8
add edx, 8
cmp dword [esp + 0x20], eax
je 0x70045a51
mov ecx, dword [esp + 0x88]
add dword [esp + 0x20], 1
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x70045fc4
movsx edi, word [eax]
add eax, 2
mov dword [esp + 0x1c], eax
movsx eax, cx
cmp eax, ecx
jne 0x70045d86
mov ebx, ecx
mov eax, edi
imul ebx, edi
shr eax, 0x1f
add ebx, 0x200
sar ebx, 0xa
neg ebx
and al, byte [esp + 0x2c]
mov byte [esp + 0x24], al
jne 0x70045db5
mov eax, dword [ebp]
mov dword [esp + 8], 0
mov dword [esp + 0x3c], edx
mov dword [esp + 0x34], eax
mov eax, dword [edx]
mov dword [esp], esi
mov dword [esp + 4], eax
call fcn.70041150
mov edx, dword [esp + 0x3c]
sub eax, dword [edx]
mov dword [esp + 0x88], eax
add eax, ebx
add eax, dword [esp + 0x34]
mov dword [ebp], eax
mov eax, dword [esp + 0x1c]
test eax, eax
jne 0x70045e11
mov edi, dword [esi + 0x124]
add edi, dword [esi + 0x12c]
mov dword [esi + 0x124], edi
sar edi, 0x10
mov eax, edi
shr eax, 0x1f
and al, byte [esp + 0x2c]
mov byte [esp + 0x24], al
mov eax, dword [esp + 0x8c]
movsx ecx, ax
cmp eax, ecx
jne 0x70045e23
imul edi, eax
mov ebx, edi
add ebx, 0x200
sar ebx, 0xa
neg ebx
cmp byte [esp + 0x24], 0
jne 0x70045e4a
mov edi, dword [ebp + 4]
mov dword [esp + 8], 1
mov eax, dword [edx + 4]
mov dword [esp], esi
mov dword [esp + 0x24], edx
mov dword [esp + 4], eax
call fcn.70041150
mov edx, dword [esp + 0x24]
sub eax, dword [edx + 4]
mov dword [esp + 0x8c], eax
add eax, ebx
add edi, eax
mov dword [ebp + 4], edi
jmp 0x70045e96
mov edi, dword [esi + 0x120]
add edi, dword [esi + 0x128]
mov dword [esi + 0x120], edi
sar edi, 0x10
jmp 0x70045ecc
lea edi, [eax + 0x161]
mov dx, 0x5ff
test edi, 2
mov byte [eax + 0x160], 0
je 0x70045361
xor eax, eax
add edi, 2
mov word [edi - 2], ax
sub edx, 2
jmp 0x70045361
mov edx, 1
jmp 0x70045a36
mov ecx, dword [esp + 0x74]
mov edx, dword [esp + 0x54]
mov eax, dword [esp + 0x68]
call fcn.70044b00
jmp 0x700457e6