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

Disassembly:
sub esp, 0xac
push ebx
push ebp
push esi
push edi
mov edi, dword [esp + 0xc0]
xor esi, esi
mov ebx, dword [esp + 0xc4]
imul ebp, ebx, 0x544
push 0x2c
mov eax, dword [edi]
mov ecx, dword [edi + 0x28]
mov dword [esp + 0x8c], eax
mov eax, dword [edi + 0x24]
add ebp, edi
mov dword [esp + 0x84], ecx
push esi
mov dword [esp + 0x50], 0
lea eax, [ecx + eax*4]
mov dword [esp + 0x94], eax
mov eax, dword [edi + 0xabc]
mov ecx, dword [eax + 0x28]
mov eax, 0x24924925
mul ecx
lea eax, [esp + 0x98]
sub ecx, edx
shr ecx, 1
add ecx, edx
shr ecx, 3
push eax
mov dword [esp + 0x78], ecx
call sub.VCRUNTIME140.dll_memset
mov eax, dword [ebp + 0x44]
add esp, 0xc
mov dword [ebp + 0x2c], esi
mov ecx, dword [edi + 0x18]
cdq
xor eax, edx
mov dword [esp + 0xac], 0x7d00
sub eax, edx
mov byte [esp + 0x90], 0
mov edx, dword [edi + 0x1c]
lea ecx, [ecx + ecx*4]
shl ecx, 3
add ecx, edx
mov dword [esp + 0x64], eax
mov dword [esp + 0x84], eax
test ebx, ebx
jne 0x10159ce7
cmp edx, ecx
jae 0x10159d05
nop dword [eax]
movsx eax, word [edx + 0xc]
mov dword [edx + 0x18], eax
movsx eax, word [edx + 0xe]
mov dword [edx + 0x1c], eax
add edx, 0x28
cmp edx, ecx
jb 0x10159cd0
jmp 0x10159d05
cmp edx, ecx
jae 0x10159d05
nop dword [eax + eax]
movsx eax, word [edx + 0xe]
mov dword [edx + 0x18], eax
movsx eax, word [edx + 0xc]
mov dword [edx + 0x1c], eax
add edx, 0x28
cmp edx, ecx
jb 0x10159cf0
mov eax, dword [esp + 0x80]
cmp eax, dword [esp + 0x8c]
jae 0x1015a4e7
nop dword [eax]
mov ebx, dword [eax]
xor edi, edi
mov dword [esp + 0x54], 0
mov dword [esp + 0x38], 0x7d00
mov dword [esp + 0x28], 0xffff8300
mov eax, dword [ebx + 0x24]
mov dword [esp + 0x10], 0x7d00
mov dword [esp + 0x14], 0xffff8300
mov dword [esp + 0x44], 0
mov al, byte [eax + 3]
movsx edx, al
mov ecx, edx
mov dword [esp + 0x40], 0
neg ecx
mov dword [esp + 0x20], 0x7d00
test al, al
mov dword [esp + 0x18], 0xffff8300
mov dword [esp + 0x3c], edi
cmovns ecx, edx
mov dword [esp + 0x50], 0x7d00
mov dword [esp + 0x34], 0xffff8300
mov dword [esp + 0x58], 0x7d00
mov dword [esp + 0x5c], 0xffff8300
mov dword [esp + 0x70], edi
mov dword [esp + 0x74], edi
mov dword [esp + 0x78], 0x7d00
mov dword [esp + 0x7c], 0xffff8300
cmp ecx, dword [esp + 0x64]
jne 0x10159e03
mov al, byte [ebx + 3]
movsx edx, al
mov ecx, edx
neg ecx
test al, al
cmovns ecx, edx
cmp ecx, dword [esp + 0x64]
jne 0x10159e03
mov dword [esp + 0x68], ebx
nop dword [eax]
mov ebx, dword [ebx + 0x24]
mov al, byte [ebx + 3]
movsx edx, al
mov ecx, edx
neg ecx
test al, al
cmovns ecx, edx
cmp ecx, dword [esp + 0x64]
jne 0x10159e00
cmp ebx, dword [esp + 0x68]
jne 0x10159de0
jmp 0x10159e03
mov ebx, dword [ebx + 0x20]
mov edx, dword [esp + 0x10]
mov eax, edi
mov dword [esp + 0x68], ebx
mov byte [esp + 0x1e], 0
mov ecx, dword [esp + 0x44]
movzx ecx, cx
mov dword [esp + 0x30], ecx
mov dword [esp + 0x2c], edx
test eax, eax
je 0x1015a28b
mov ecx, dword [ebx + 0x18]
mov edx, ecx
cmp ecx, dword [esp + 0x38]
mov edi, dword [esp + 0x2c]
cmovge edx, dword [esp + 0x38]
cmp ecx, dword [esp + 0x28]
mov dword [esp + 0x38], edx
cmovle ecx, dword [esp + 0x28]
cmp dword [ebx + 0x1c], edi
mov eax, ecx
mov dword [esp + 0x28], eax
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x30]
movzx eax, ax
mov dword [esp + 0x4c], edx
movzx edx, word [ebx]
mov ecx, edx
cmovge ecx, eax
movzx eax, cx
mov ecx, edx
mov dword [esp + 0x30], eax
mov eax, dword [ebx + 0x1c]
cmp eax, edi
cmovge eax, edi
mov edi, dword [ebx + 0x1c]
cmp edi, dword [esp + 0x14]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x40]
movzx eax, ax
cmovle ecx, eax
movzx eax, cx
mov ecx, edi
cmovle ecx, dword [esp + 0x14]
mov edi, dword [esp + 0x3c]
mov dword [esp + 0x2c], eax
mov dword [esp + 0x14], ecx
test dl, 3
jne 0x10159ecc
mov eax, dword [ebx + 0x1c]
cmp eax, dword [esp + 0x20]
cmovge eax, dword [esp + 0x20]
mov edx, eax
mov eax, dword [ebx + 0x1c]
mov dword [esp + 0x20], edx
cmp eax, dword [esp + 0x18]
jle 0x10159ecc
mov dword [esp + 0x18], eax
mov dword [esp + 0x20], edx
movsx eax, byte [ebx + 3]
mov edx, dword [esp + 0x30]
cmp eax, dword [esp + 0x84]
jne 0x10159ef9
mov eax, dword [esp + 0x2c]
movzx eax, ax
mov dword [esp + 0x40], eax
movzx eax, dx
mov dword [esp + 0x44], eax
cmp ebx, dword [esp + 0x68]
jne 0x1015a2a3
test edi, edi
je 0x1015a1be
mov eax, dword [edi + 0x28]
cmp dword [esi + 0x24], eax
jne 0x1015a1be
mov al, byte [eax + 2]
cmp al, byte [ebx + 2]
jne 0x1015a034
mov esi, dword [esp + 0x50]
mov ecx, esi
cmp esi, dword [esp + 0x4c]
mov esi, dword [esp + 0x34]
cmovge ecx, dword [esp + 0x4c]
cmp esi, dword [esp + 0x24]
mov eax, dword [esp + 0x70]
mov dword [esp + 0x38], ecx
mov ecx, esi
cmovle ecx, dword [esp + 0x24]
mov esi, dword [esp + 0x10]
cmp dword [esp + 0x58], esi
mov dword [esp + 0x28], ecx
movzx ecx, ax
movzx eax, dx
cmovge ecx, eax
mov dword [edi + 0x28], ebx
movzx edx, cx
mov eax, edx
mov dword [esp + 0x4c], eax
mov eax, dword [esp + 0x58]
cmovge eax, esi
mov esi, eax
mov eax, dword [esp + 0x74]
movzx ecx, ax
mov eax, dword [esp + 0x2c]
movzx eax, ax
mov dword [esp + 0x10], esi
mov esi, dword [esp + 0x14]
cmp dword [esp + 0x5c], esi
cmovle ecx, eax
movzx eax, cx
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x5c]
cmovle eax, esi
mov esi, eax
mov dword [esp + 0x14], esi
mov esi, dword [esp + 0x78]
mov ecx, esi
cmp esi, dword [esp + 0x20]
mov esi, dword [esp + 0x7c]
mov eax, esi
cmovge ecx, dword [esp + 0x20]
cmp esi, dword [esp + 0x18]
mov esi, dword [esp + 0x14]
cmovle eax, dword [esp + 0x18]
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x28]
add eax, dword [esp + 0x38]
sar eax, 1
mov word [edi + 2], ax
mov eax, dword [esp + 0x28]
sub eax, dword [esp + 0x38]
sar eax, 1
mov word [edi + 4], ax
mov al, byte [esp + 0x24]
or al, dl
mov dword [esp + 0x20], ecx
test al, 3
je 0x10159ffb
mov eax, dword [esp + 0x18]
sub eax, ecx
cmp eax, dword [esp + 0x6c]
jge 0x10159ffb
or byte [edi], 1
jmp 0x10159ffe
and byte [edi], 0xfe
mov edx, dword [esp + 0x10]
movzx ecx, dx
movzx eax, si
mov word [edi + 8], ax
sub eax, ecx
mov word [edi + 0xa], ax
mov eax, dword [esp + 0x4c]
movzx eax, ax
mov word [edi + 6], cx
dec dword [ebp + 0x2c]
mov dword [esp + 0x44], eax
mov eax, dword [esp + 0x24]
movzx ecx, ax
mov dword [esp + 0x40], ecx
jmp 0x1015a283
mov eax, ecx
sub eax, dword [esp + 0x10]
cdq
mov ecx, eax
mov eax, dword [esp + 0x5c]
sub eax, dword [esp + 0x58]
xor ecx, edx
sub ecx, edx
cdq
xor eax, edx
sub eax, edx
cmp eax, ecx
jle 0x1015a0c9
mov ecx, dword [esp + 0x4c]
mov esi, ecx
cmp ecx, dword [esp + 0x50]
mov edx, dword [esp + 0x24]
mov eax, edx
cmovge esi, dword [esp + 0x50]
cmp edx, dword [esp + 0x34]
mov dword [esp + 0x38], ecx
cmovle eax, dword [esp + 0x34]
mov dword [esp + 0x34], eax
add eax, esi
sar eax, 1
mov word [edi + 2], ax
mov eax, dword [esp + 0x34]
sub eax, esi
mov dword [edi + 0x28], ebx
sar eax, 1
mov word [edi + 4], ax
mov eax, dword [esp + 0x14]
dec dword [ebp + 0x2c]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x2c]
movzx ecx, ax
mov eax, dword [esp + 0x10]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x30]
movzx eax, ax
mov dword [esp + 0x28], edx
mov edx, dword [esp + 0x10]
mov dword [esp + 0x50], esi
mov dword [esp + 0x40], ecx
mov dword [esp + 0x44], eax
jmp 0x1015a283
mov ecx, dword [esp + 0x50]
mov edx, ecx
cmp ecx, dword [esp + 0x4c]
mov eax, dword [esp + 0x24]
cmovge edx, dword [esp + 0x4c]
mov ecx, dword [esp + 0x34]
cmp ecx, eax
mov dword [esp + 0x38], edx
cmovle ecx, eax
mov dword [esi + 0x28], ebx
mov dword [esp + 0x28], ecx
lea eax, [ecx + edx]
sar eax, 1
mov word [esi + 2], ax
mov eax, ecx
sub eax, edx
sar eax, 1
mov word [esi + 4], ax
mov al, byte [esp + 0x2c]
or al, byte [esp + 0x30]
test al, 3
je 0x1015a120
mov eax, dword [esp + 0x18]
sub eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x6c]
jge 0x1015a120
or byte [esi], 1
mov eax, dword [esp + 0x10]
mov edx, dword [esp + 0x14]
movzx ecx, ax
mov word [esi + 6], cx
movzx eax, dx
mov word [esi + 8], ax
sub eax, ecx
mov ecx, dword [esp + 0x30]
mov word [esi + 0xa], ax
movups xmm0, xmmword [esi]
mov dword [esp + 0x5c], edx
mov dword [esp + 0x14], edx
movups xmmword [edi], xmm0
movups xmm0, xmmword [esi + 0x10]
movups xmmword [edi + 0x10], xmm0
movq xmm0, qword [esi + 0x20]
movq qword [edi + 0x20], xmm0
mov eax, dword [esi + 0x28]
mov dword [edi + 0x28], eax
mov eax, dword [esp + 0x38]
dec dword [ebp + 0x2c]
movzx esi, cx
mov dword [esp + 0x50], eax
mov eax, dword [esp + 0x28]
mov dword [esp + 0x70], esi
mov esi, dword [esp + 0x2c]
movzx edi, si
mov dword [esp + 0x34], eax
mov eax, dword [esp + 0x10]
mov dword [esp + 0x74], edi
mov edi, dword [esp + 0x20]
movzx edx, si
mov dword [esp + 0x10], eax
mov dword [esp + 0x58], eax
mov dword [esp + 0x78], edi
mov edi, dword [esp + 0x18]
movzx eax, cx
mov dword [esp + 0x40], edx
mov edx, dword [esp + 0x10]
mov dword [esp + 0x7c], edi
mov dword [esp + 0x44], eax
jmp 0x1015a283
mov ecx, dword [esp + 0x4c]
mov edx, dword [esp + 0x24]
mov dword [esi + 0x28], ebx
lea eax, [edx + ecx]
sar eax, 1
mov word [esi + 2], ax
mov eax, edx
sub eax, ecx
sar eax, 1
mov word [esi + 4], ax
mov al, byte [esp + 0x2c]
or al, byte [esp + 0x30]
test al, 3
je 0x1015a1f9
mov eax, dword [esp + 0x18]
sub eax, dword [esp + 0x20]
cmp eax, dword [esp + 0x6c]
jge 0x1015a1f9
or byte [esi], 1
mov eax, dword [esp + 0x10]
mov edx, dword [esp + 0x14]
mov edi, dword [esp + 0x30]
movzx ecx, ax
movzx eax, dx
mov word [esi + 8], ax
sub eax, ecx
mov word [esi + 0xa], ax
mov eax, dword [esp + 0x4c]
movzx edi, di
mov dword [esp + 0x50], eax
mov dword [esp + 0x38], eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 0x70], edi
mov edi, dword [esp + 0x2c]
movzx eax, ax
movzx edi, di
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0x30]
mov dword [esp + 0x74], edi
mov edi, dword [esp + 0x20]
mov word [esi + 6], cx
mov ecx, dword [esp + 0x24]
mov dword [esp + 0x3c], esi
mov esi, dword [esp + 0x10]
mov dword [esp + 0x78], edi
mov edi, dword [esp + 0x18]
movzx eax, ax
mov dword [esp + 0x5c], edx
mov dword [esp + 0x14], edx
mov edx, esi
mov dword [esp + 0x34], ecx
mov dword [esp + 0x58], esi
mov dword [esp + 0x7c], edi
mov dword [esp + 0x28], ecx
mov dword [esp + 0x10], esi
mov dword [esp + 0x44], eax
xor eax, eax
xor esi, esi
mov dword [esp + 0x54], eax
cmp ebx, dword [esp + 0x68]
jne 0x1015a2ab
cmp byte [esp + 0x1e], 0
jne 0x1015a4c9
mov byte [esp + 0x1e], 1
jmp 0x1015a2ab
mov edx, dword [esp + 0x10]
mov eax, dword [esp + 0x54]
test eax, eax
jne 0x1015a4c1
mov al, byte [ebx + 3]
mov byte [esp + 0x1f], al
movsx ecx, al
mov eax, ecx
neg eax
cmp byte [esp + 0x1f], 0
cmovge eax, ecx
cmp eax, dword [esp + 0x64]
je 0x1015a2d8
cmp ebx, dword [ebx + 0x24]
jne 0x1015a4bd
xor edx, edx
mov dword [esp + 0x84], ecx
mov ecx, dword [ebp + 0x2c]
xor esi, esi
mov dword [esp + 0x48], edx
mov dword [esp + 0x60], edx
cmp ecx, 0x12
jge 0x1015a30e
cmp dword [ebp + 0x34], edx
jne 0x1015a3d8
lea eax, [ebp + 0x48]
mov dword [ebp + 0x30], 0x12
mov dword [ebp + 0x34], eax
jmp 0x1015a3d8
mov edx, dword [ebp + 0x30]
cmp ecx, edx
jl 0x1015a3d6
cmp edx, 0x2e8ba2e
jge 0x1015a544
mov eax, edx
sar eax, 2
add eax, 4
add eax, edx
mov dword [esp + 0x24], eax
cmp eax, edx
jl 0x1015a33e
cmp eax, 0x2e8ba2e
jle 0x1015a347
mov eax, 0x2e8ba2e
mov dword [esp + 0x24], eax
mov ecx, dword [ebp + 0x34]
lea edi, [ebp + 0x48]
cmp ecx, edi
jne 0x1015a39e
lea ecx, [esp + 0x60]
push ecx
push 0
push eax
push 0
push 0x2c
push dword [esp + 0x9c]
call fcn.10152c10
mov edx, dword [esp + 0x78]
add esp, 0x18
mov dword [ebp + 0x34], eax
mov dword [esp + 0x48], edx
test edx, edx
jne 0x1015a554
mov esi, edi
mov ecx, 0xc6
mov edi, eax
mov eax, dword [esp + 0x24]
rep movsd dword es:[edi], dword [esi]
mov edx, dword [esp + 0x60]
mov ecx, dword [ebp + 0x2c]
mov dword [esp + 0x48], edx
mov dword [ebp + 0x30], eax
jmp 0x1015a3d8
lea edi, [esp + 0x60]
push edi
push ecx
push eax
push edx
push 0x2c
push dword [esp + 0x9c]
call fcn.10152c10
mov edx, dword [esp + 0x78]
add esp, 0x18
mov dword [ebp + 0x34], eax
mov dword [esp + 0x48], edx
test edx, edx
jne 0x1015a554
mov eax, dword [esp + 0x24]
mov ecx, dword [ebp + 0x2c]
mov dword [ebp + 0x30], eax
jmp 0x1015a3d8
mov edx, esi
imul esi, ecx, 0x2c
lea eax, [ecx + 1]
mov dword [ebp + 0x2c], eax
add esi, dword [ebp + 0x34]
test edx, edx
jne 0x1015a554
movups xmm0, xmmword [esp + 0x90]
mov ecx, dword [esp + 0x3c]
lea edi, [esi - 0x2c]
mov al, byte [esp + 0x1f]
test ecx, ecx
movups xmmword [esi], xmm0
cmove edi, ecx
movups xmm0, xmmword [esp + 0xa0]
mov dword [esp + 0x3c], edi
movups xmmword [esi + 0x10], xmm0
movq xmm0, qword [esp + 0xb0]
movq qword [esi + 0x20], xmm0
mov byte [esi + 1], al
mov dword [esi + 0x24], ebx
mov dword [esi + 0x28], ebx
movzx eax, word [ebx]
mov edx, dword [ebx + 0x18]
mov edi, eax
mov ecx, dword [ebx + 0x1c]
mov dword [esp + 0x40], edi
movzx edi, di
mov dword [esp + 0x28], edx
mov dword [esp + 0x38], edx
mov dword [esp + 0x14], ecx
mov dword [esp + 0x10], ecx
mov dword [esp + 0x44], edi
test al, 3
je 0x1015a46a
mov dword [esp + 0x20], 0x7d00
mov dword [esp + 0x18], 0xffff8300
jmp 0x1015a474
mov eax, ecx
mov dword [esp + 0x18], eax
mov dword [esp + 0x20], eax
mov eax, 1
mov edi, dword [esp + 0x3c]
mov dword [esp + 0x54], eax
cmp ebx, dword [ebx + 0x24]
jne 0x1015a4b1
mov word [esi + 2], dx
test byte [ebx], 3
je 0x1015a491
or byte [esi], al
movzx eax, word [ebx + 0x1c]
mov word [esi + 6], ax
movzx eax, word [ebx + 0x1c]
mov word [esi + 8], ax
xor eax, eax
mov word [esi + 0xa], ax
xor esi, esi
mov dword [esp + 0x54], eax
mov dword [esp + 0x3c], edi
mov edx, dword [esp + 0x10]
mov ebx, dword [ebx + 0x20]
jmp 0x10159e12
mov eax, dword [esp + 0x54]
mov ebx, dword [ebx + 0x20]
jmp 0x10159e12
mov eax, dword [esp + 0x80]
add eax, 4
mov dword [esp + 0x80], eax
cmp eax, dword [esp + 0x8c]
jb 0x10159d20
imul ecx, dword [ebp + 0x2c], 0x2c
mov esi, dword [ebp + 0x34]
lea eax, [ecx + esi]
cmp esi, eax
jae 0x1015a585
dec ecx
mov eax, 0xba2e8ba3
mul ecx
add esi, 0xa
mov ebx, edx
shr ebx, 5
inc ebx
nop word [eax + eax]
mov eax, dword [esi + 0x1a]
mov edi, dword [esi + 0x1e]
mov edx, dword [eax + 0x1c]
mov eax, dword [eax + 0x24]
mov ecx, dword [edi + 0x1c]
mov eax, dword [eax + 0x1c]
cmp edx, ecx
jge 0x1015a561
cmp eax, edx
jge 0x1015a531
sub edx, eax
sar edx, 1
add word [esi], dx
mov eax, dword [edi + 0x20]
mov eax, dword [eax + 0x1c]
cmp eax, ecx
jle 0x1015a57d
sub eax, ecx
sar eax, 1
add word [esi], ax
jmp 0x1015a57d
pop edi
pop esi
pop ebp
mov eax, 0x40
pop ebx
add esp, 0xac
ret
pop edi
pop esi
pop ebp
mov eax, edx
pop ebx
add esp, 0xac
ret
cmp eax, edx
jle 0x1015a56c
sub eax, edx
sar eax, 1
add word [esi], ax
mov eax, dword [edi + 0x20]
mov eax, dword [eax + 0x1c]
cmp eax, ecx
jge 0x1015a57d
sub ecx, eax
sar ecx, 1
add word [esi], cx
add esi, 0x2c
sub ebx, 1
jne 0x1015a510
mov eax, dword [esp + 0x48]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0xac
ret