Function at 0x486560
Capabilities:
Get number of processors

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x50c2df
mov eax, dword fs:[0]
push eax
sub esp, 0x198
mov eax, dword [0x551644]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov ecx, 0x553818
call fcn.004175a0
mov esi, dword [0x552af4]
mov ecx, dword [esi + 0x30]
sub ecx, dword [esi + 0x2c]
mov eax, 0x2aaaaaab
imul ecx
sar edx, 1
mov eax, edx
shr eax, 0x1f
add eax, edx
xor ebx, ebx
cmp eax, 6
jbe 0x4865e5
mov eax, dword [esi + 0x2c]
mov ecx, dword [eax + 0x48]
cmp ecx, ebx
je 0x4865e5
mov edx, dword [eax + 0x50]
cmp edx, ebx
je 0x4865d9
mov eax, dword [eax + 0x4c]
mov edx, dword [edx + 0xc]
imul eax, edx
add eax, ecx
jmp 0x4865e7
mov eax, dword [eax + 0x4c]
xor edx, edx
imul eax, edx
add eax, ecx
jmp 0x4865e7
xor eax, eax
mov ecx, dword [eax + 0x24]
mov esi, dword [eax + 0x20]
mov dword [ebp - 0x158], eax
cmp esi, ecx
je 0x486616
mov eax, ecx
sub eax, ecx
sar eax, 1
lea edi, [eax + eax]
push edi
push ecx
push esi
call fcn.004f5d30
mov ecx, dword [ebp - 0x158]
add esp, 0xc
add edi, esi
mov dword [ecx + 0x24], edi
mov ecx, 0x553818
call fcn.004175a0
mov eax, dword [0x552af4]
mov edx, dword [eax + 0x4c]
cmp edx, ebx
jne 0x486630
xor ecx, ecx
jmp 0x486646
mov ecx, dword [eax + 0x54]
cmp ecx, ebx
je 0x48663c
mov esi, dword [ecx + 0xc]
jmp 0x48663e
xor esi, esi
mov ecx, dword [eax + 0x50]
imul ecx, esi
add ecx, edx
push str.save_04d___.dat
lea edx, [ebp - 0x16c]
push edx
call fcn.0040bbb0
mov eax, dword [0x5515b0]
mov edx, dword [eax + 0xc]
mov ecx, 0x5515b0
mov dword [ebp - 4], ebx
call edx
add eax, 0x10
mov dword [ebp - 0x158], eax
mov edi, 1
mov byte [ebp - 4], 1
mov dword [ebp - 0x160], edi
mov eax, dword [ebp - 0x16c]
push edi
push eax
lea ecx, [ebp - 0x158]
push ecx
call fcn.0040c320
mov eax, dword [ebp - 0x158]
add esp, 0xc
lea edx, [ebp - 0x150]
push edx
push eax
call dword [sym.imp.KERNEL32.dll_FindFirstFileA]
cmp eax, 0xffffffff
je 0x486801
push eax
call dword [sym.imp.KERNEL32.dll_FindClose]
movzx ecx, di
mov dword [ebp - 0x154], ecx
mov ecx, 0x553818
call fcn.004175a0
mov esi, dword [0x552af4]
mov ecx, dword [esi + 0x30]
sub ecx, dword [esi + 0x2c]
mov eax, 0x2aaaaaab
imul ecx
sar edx, 1
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp eax, 6
jbe 0x48671a
mov eax, dword [esi + 0x2c]
mov ecx, dword [eax + 0x48]
cmp ecx, ebx
je 0x48671a
mov edx, dword [eax + 0x50]
cmp edx, ebx
je 0x48670e
mov eax, dword [eax + 0x4c]
mov edx, dword [edx + 0xc]
imul eax, edx
add eax, ecx
jmp 0x48671c
mov eax, dword [eax + 0x4c]
xor edx, edx
imul eax, edx
add eax, ecx
jmp 0x48671c
xor eax, eax
lea esi, [eax + 0x20]
mov eax, dword [esi + 4]
lea ecx, [ebp - 0x154]
cmp ecx, eax
jae 0x4867a6
mov edi, dword [esi]
mov edx, ecx
cmp edi, edx
ja 0x4867a0
mov ecx, dword [esi + 8]
sub edx, edi
sar edx, 1
mov dword [ebp - 0x15c], edx
cmp eax, ecx
jne 0x486786
sub eax, edi
sar eax, 1
cmp eax, 0x7ffffffe
ja 0x4869c9
sub ecx, edi
inc eax
sar ecx, 1
cmp eax, ecx
jbe 0x486786
mov edx, ecx
shr edx, 1
mov edi, 0x7fffffff
sub edi, edx
cmp edi, ecx
jae 0x486770
xor ecx, ecx
jmp 0x486772
add ecx, edx
cmp ecx, eax
jae 0x486778
mov ecx, eax
push ecx
mov ecx, esi
call fcn.0046bc90
mov edx, dword [ebp - 0x15c]
mov eax, dword [esi]
lea edx, [eax + edx*2]
mov eax, dword [esi + 4]
cmp eax, ebx
je 0x486798
mov cx, word [edx]
mov word [eax], cx
mov edi, dword [ebp - 0x160]
jmp 0x4867fd
mov edi, dword [ebp - 0x160]
mov ecx, dword [esi + 8]
cmp eax, ecx
jne 0x4867f0
mov edx, dword [esi]
sub eax, edx
sar eax, 1
cmp eax, 0x7ffffffe
ja 0x4869c9
sub ecx, edx
inc eax
sar ecx, 1
cmp eax, ecx
jbe 0x4867f0
mov edx, ecx
shr edx, 1
mov edi, 0x7fffffff
sub edi, edx
cmp edi, ecx
jae 0x4867da
xor ecx, ecx
jmp 0x4867dc
add ecx, edx
cmp ecx, eax
jae 0x4867e2
mov ecx, eax
push ecx
mov ecx, esi
call fcn.0046bc90
mov edi, dword [ebp - 0x160]
mov eax, dword [esi + 4]
cmp eax, ebx
je 0x4867fd
movzx ecx, di
mov word [eax], cx
add dword [esi + 4], 2
inc edi
mov dword [ebp - 0x160], edi
cmp edi, 0x3e9
jl 0x486681
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx]
mov ecx, 0x5452ec
mov dword [ebp - method.CCriticalLock.virtual_0], vtable.CCriticalLock.0
mov dword [ebp - vtable.CCriticalSection.0], 0x5452ec
call eax
mov dword [ebp - 0x160], 1
mov byte [ebp - 4], 2
cmp dword [0x552af4], ebx
jne 0x4868c1
push 0x64
call fcn.004f4b27
mov esi, eax
add esp, 4
mov dword [ebp - 0x15c], esi
mov byte [ebp - 4], 3
cmp esi, ebx
je 0x4868b9
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x10], eax
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x14], eax
mov dword [esi + 0x2c], ebx
mov dword [esi + 0x30], ebx
mov dword [esi + 0x34], ebx
mov dword [esi + 0x3c], ebx
mov dword [esi + 0x40], ebx
mov dword [esi + 0x44], ebx
mov dword [esi + 0x4c], ebx
mov dword [esi + 0x50], ebx
mov dword [esi + 0x54], ebx
mov dword [esi + 0x58], ebx
mov dword [esi + 0x5c], ebx
mov dword [esi + 0x60], ebx
jmp 0x4868bb
xor esi, esi
mov dword [0x552af4], esi
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx + 4]
mov ecx, 0x5452ec
mov byte [ebp - 4], 1
call eax
mov esi, dword [0x552af4]
mov ecx, dword [esi + 0x30]
sub ecx, dword [esi + 0x2c]
mov eax, 0x2aaaaaab
imul ecx
sar edx, 1
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
cmp ecx, 6
jbe 0x486920
mov eax, dword [esi + 0x2c]
mov ecx, dword [eax + 0x48]
cmp ecx, ebx
je 0x486920
mov edx, dword [eax + 0x50]
cmp edx, ebx
je 0x486914
mov eax, dword [eax + 0x4c]
mov edx, dword [edx + 0xc]
imul eax, edx
add eax, ecx
jmp 0x486922
mov eax, dword [eax + 0x4c]
xor edx, edx
imul eax, edx
add eax, ecx
jmp 0x486922
xor eax, eax
mov edx, dword [eax + 0x24]
sub edx, dword [eax + 0x20]
test edx, 0xfffffffe
jne 0x486a76
mov ecx, 0x553818
mov dword [ebp - 0x154], 1
call fcn.004175a0
mov esi, dword [0x552af4]
mov ecx, dword [esi + 0x30]
sub ecx, dword [esi + 0x2c]
mov eax, 0x2aaaaaab
imul ecx
sar edx, 1
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp eax, 6
jbe 0x486993
mov eax, dword [esi + 0x2c]
mov ecx, dword [eax + 0x48]
cmp ecx, ebx
je 0x486993
mov edx, dword [eax + 0x50]
cmp edx, ebx
je 0x486987
mov eax, dword [eax + 0x4c]
mov edx, dword [edx + 0xc]
imul eax, edx
add eax, ecx
jmp 0x486995
mov eax, dword [eax + 0x4c]
xor edx, edx
imul eax, edx
add eax, ecx
jmp 0x486995
xor eax, eax
lea esi, [eax + 0x20]
mov eax, dword [esi + 4]
lea ecx, [ebp - 0x154]
cmp ecx, eax
jae 0x486a19
mov edi, dword [esi]
mov edx, ecx
cmp edi, edx
ja 0x486a19
mov ecx, dword [esi + 8]
sub edx, edi
sar edx, 1
mov dword [ebp - 0x15c], edx
cmp eax, ecx
jne 0x486a05
sub eax, edi
sar eax, 1
cmp eax, 0x7ffffffe
jbe 0x4869d3
push str.vector_T__too_long
call fcn.004f469d
sub ecx, edi
inc eax
sar ecx, 1
cmp eax, ecx
jbe 0x486a05
mov edx, ecx
shr edx, 1
mov edi, 0x7fffffff
sub edi, edx
cmp edi, ecx
jae 0x4869ef
xor ecx, ecx
jmp 0x4869f1
add ecx, edx
cmp ecx, eax
jae 0x4869f7
mov ecx, eax
push ecx
mov ecx, esi
call fcn.0046bc90
mov edx, dword [ebp - 0x15c]
mov eax, dword [esi]
lea edx, [eax + edx*2]
mov eax, dword [esi + 4]
cmp eax, ebx
je 0x486a72
mov cx, word [edx]
mov word [eax], cx
jmp 0x486a72
mov ecx, dword [esi + 8]
cmp eax, ecx
jne 0x486a63
mov edx, dword [esi]
sub eax, edx
sar eax, 1
cmp eax, 0x7ffffffe
jbe 0x486a37
push str.vector_T__too_long
call fcn.004f469d
sub ecx, edx
inc eax
sar ecx, 1
cmp eax, ecx
jbe 0x486a63
mov edx, ecx
shr edx, 1
mov edi, 0x7fffffff
sub edi, edx
cmp edi, ecx
jae 0x486a53
xor ecx, ecx
jmp 0x486a55
add ecx, edx
cmp ecx, eax
jae 0x486a5b
mov ecx, eax
push ecx
mov ecx, esi
call fcn.0046bc90
mov eax, dword [esi + 4]
cmp eax, ebx
je 0x486a72
mov edx, 1
mov word [eax], dx
add dword [esi + 4], 2
mov eax, dword [ebp - 0x158]
add eax, 0xfffffff0
or edi, 0xffffffff
mov byte [ebp - 4], bl
lea ecx, [eax + 0xc]
mov edx, edi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x486a9d
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [ebp - 0x16c]
add eax, 0xfffffff0
mov dword [ebp - 4], edi
lea ecx, [eax + 0xc]
mov edx, edi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x486ac1
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx]
mov ecx, 0x5452ec
mov dword [ebp - method.CCriticalLock.virtual_0], vtable.CCriticalLock.0
mov dword [ebp - 0x178], ecx
call eax
mov dword [ebp - 0x174], 1
mov dword [ebp - 4], 4
cmp dword [0x552af4], ebx
jne 0x486b6d
push 0x64
call fcn.004f4b27
mov esi, eax
add esp, 4
mov dword [ebp - 0x15c], esi
mov byte [ebp - 4], 5
cmp esi, ebx
je 0x486b65
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x10], eax
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x14], eax
mov dword [esi + 0x2c], ebx
mov dword [esi + 0x30], ebx
mov dword [esi + 0x34], ebx
mov dword [esi + 0x3c], ebx
mov dword [esi + 0x40], ebx
mov dword [esi + 0x44], ebx
mov dword [esi + 0x4c], ebx
mov dword [esi + 0x50], ebx
mov dword [esi + 0x54], ebx
mov dword [esi + 0x58], ebx
mov dword [esi + 0x5c], ebx
mov dword [esi + 0x60], ebx
jmp 0x486b67
xor esi, esi
mov dword [0x552af4], esi
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx + 4]
mov ecx, 0x5452ec
mov dword [ebp - 4], edi
call eax
mov ecx, dword [0x552af4]
mov eax, dword [ecx + 0x4c]
cmp eax, ebx
jne 0x486b91
xor ecx, ecx
jmp 0x486ba7
mov edx, dword [ecx + 0x54]
cmp edx, ebx
je 0x486b9d
mov edx, dword [edx + 0xc]
jmp 0x486b9f
xor edx, edx
mov ecx, dword [ecx + 0x50]
imul ecx, edx
add ecx, eax
push str.qsave_02d.dat
lea edx, [ebp - 0x16c]
push edx
call fcn.0040bbb0
mov eax, dword [0x5515b0]
mov edx, dword [eax + 0xc]
mov ecx, 0x5515b0
mov dword [ebp - 4], 6
call edx
add eax, 0x10
mov dword [ebp - 0x154], eax
xor edi, edi
mov byte [ebp - 4], 7
mov dword [ebp - 0x1a4], ebx
mov dword [ebp - 0x1a0], ebx
mov dword [ebp - 0x19c], ebx
mov dword [ebp - 0x198], ebx
mov dword [ebp - 0x194], ebx
mov dword [ebp - 0x190], ebx
mov dword [ebp - 0x158], 0xffffffff
mov dword [ebp - 0x160], ebx
xor esi, esi
lea eax, [esi + 1]
push eax
mov dword [ebp - 0x15c], eax
mov eax, dword [ebp - 0x16c]
push eax
lea ecx, [ebp - 0x154]
push ecx
call fcn.0040c320
mov eax, dword [ebp - 0x154]
lea edx, [ebp - 0x1a4]
push edx
push eax
call fcn.004680a0
add esp, 0x14
test al, al
je 0x486c7a
mov eax, dword [ebp - 0x194]
mov ecx, dword [ebp - 0x190]
cmp dword [ebp - 0x158], ebx
jl 0x486c6c
cmp dword [ebp - 0x160], ecx
jg 0x486c7a
jl 0x486c6c
cmp edi, eax
jae 0x486c7a
mov edi, eax
mov dword [ebp - 0x160], ecx
mov dword [ebp - 0x158], esi
mov esi, dword [ebp - 0x15c]
cmp esi, 0xf
jl 0x486c13
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx]
mov ecx, 0x5452ec
mov dword [ebp - method.CCriticalLock.virtual_0], vtable.CCriticalLock.0
mov dword [ebp - vtable.CCriticalSection.0], 0x5452ec
call eax
mov dword [ebp - 0x174], 1
mov byte [ebp - 4], 8
cmp dword [0x552af4], ebx
jne 0x486d32
push 0x64
call fcn.004f4b27
mov esi, eax
add esp, 4
mov dword [ebp - 0x15c], esi
mov byte [ebp - 4], 9
cmp esi, ebx
je 0x486d2a
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x10], eax
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x14], eax
mov dword [esi + 0x2c], ebx
mov dword [esi + 0x30], ebx
mov dword [esi + 0x34], ebx
mov dword [esi + 0x3c], ebx
mov dword [esi + 0x40], ebx
mov dword [esi + 0x44], ebx
mov dword [esi + 0x4c], ebx
mov dword [esi + 0x50], ebx
mov dword [esi + 0x54], ebx
mov dword [esi + 0x58], ebx
mov dword [esi + 0x5c], ebx
mov dword [esi + 0x60], ebx
jmp 0x486d2c
xor esi, esi
mov dword [0x552af4], esi
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx + 4]
mov ecx, 0x5452ec
mov byte [ebp - 4], 7
call eax
mov esi, dword [0x552af4]
mov ecx, dword [esi + 0x30]
sub ecx, dword [esi + 0x2c]
mov eax, 0x2aaaaaab
imul ecx
sar edx, 1
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
cmp ecx, 6
jbe 0x486d91
mov eax, dword [esi + 0x2c]
mov ecx, dword [eax + 0x48]
cmp ecx, ebx
je 0x486d91
mov edx, dword [eax + 0x50]
cmp edx, ebx
je 0x486d85
mov eax, dword [eax + 0x4c]
mov edx, dword [edx + 0xc]
imul eax, edx
add eax, ecx
jmp 0x486d93
mov eax, dword [eax + 0x4c]
xor edx, edx
imul eax, edx
add eax, ecx
jmp 0x486d93
xor eax, eax
mov edx, dword [ebp - 0x158]
mov dword [eax + 4], edx
mov eax, dword [ebp - 0x154]
add eax, 0xfffffff0
or edi, 0xffffffff
mov byte [ebp - 4], 6
lea ecx, [eax + 0xc]
mov edx, edi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x486dc4
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [ebp - 0x16c]
add eax, 0xfffffff0
mov dword [ebp - 4], edi
lea ecx, [eax + 0xc]
mov edx, edi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x486de8
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx]
mov ecx, 0x5452ec
mov dword [ebp - method.CCriticalLock.virtual_0], vtable.CCriticalLock.0
mov dword [ebp - 0x178], ecx
call eax
mov dword [ebp - 0x174], 1
mov dword [ebp - 4], 0xa
cmp dword [0x552af4], ebx
jne 0x486e94
push 0x64
call fcn.004f4b27
mov esi, eax
add esp, 4
mov dword [ebp - 0x15c], esi
mov byte [ebp - 4], 0xb
cmp esi, ebx
je 0x486e8c
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x10], eax
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x14], eax
mov dword [esi + 0x2c], ebx
mov dword [esi + 0x30], ebx
mov dword [esi + 0x34], ebx
mov dword [esi + 0x3c], ebx
mov dword [esi + 0x40], ebx
mov dword [esi + 0x44], ebx
mov dword [esi + 0x4c], ebx
mov dword [esi + 0x50], ebx
mov dword [esi + 0x54], ebx
mov dword [esi + 0x58], ebx
mov dword [esi + 0x5c], ebx
mov dword [esi + 0x60], ebx
jmp 0x486e8e
xor esi, esi
mov dword [0x552af4], esi
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx + 4]
mov ecx, 0x5452ec
mov dword [ebp - 4], edi
call eax
mov ecx, dword [0x552af4]
mov eax, dword [ecx + 0x4c]
cmp eax, ebx
jne 0x486eb8
xor ecx, ecx
jmp 0x486ece
mov edx, dword [ecx + 0x54]
cmp edx, ebx
je 0x486ec4
mov edx, dword [edx + 0xc]
jmp 0x486ec6
xor edx, edx
mov ecx, dword [ecx + 0x50]
imul ecx, edx
add ecx, eax
push str.asave_02d.dat
lea edx, [ebp - 0x160]
push edx
call fcn.0040bbb0
mov eax, dword [0x5515b0]
mov edx, dword [eax + 0xc]
mov ecx, 0x5515b0
mov dword [ebp - 4], 0xc
call edx
add eax, 0x10
mov dword [ebp - 0x154], eax
xor edi, edi
mov byte [ebp - 4], 0xd
mov dword [ebp - 0x1a4], ebx
mov dword [ebp - 0x1a0], ebx
mov dword [ebp - 0x19c], ebx
mov dword [ebp - 0x198], ebx
mov dword [ebp - 0x194], ebx
mov dword [ebp - 0x190], ebx
mov dword [ebp - 0x158], 0xffffffff
mov dword [ebp - 0x16c], ebx
xor esi, esi
lea ebx, [ebx]
lea eax, [esi + 1]
push eax
mov dword [ebp - 0x15c], eax
mov eax, dword [ebp - 0x160]
push eax
lea ecx, [ebp - 0x154]
push ecx
call fcn.0040c320
mov eax, dword [ebp - 0x154]
lea edx, [ebp - 0x1a4]
push edx
push eax
call fcn.004680a0
add esp, 0x14
test al, al
je 0x486fa7
mov eax, dword [ebp - 0x194]
mov ecx, dword [ebp - 0x190]
cmp dword [ebp - 0x158], ebx
jl 0x486f99
cmp dword [ebp - 0x16c], ecx
jg 0x486fa7
jl 0x486f99
cmp edi, eax
jae 0x486fa7
mov edi, eax
mov dword [ebp - 0x16c], ecx
mov dword [ebp - 0x158], esi
mov esi, dword [ebp - 0x15c]
cmp esi, 0xf
jl 0x486f40
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx]
mov ecx, 0x5452ec
mov dword [ebp - method.CCriticalLock.virtual_0], vtable.CCriticalLock.0
mov dword [ebp - vtable.CCriticalSection.0], 0x5452ec
call eax
mov dword [ebp - 0x174], 1
mov byte [ebp - 4], 0xe
cmp dword [0x552af4], ebx
jne 0x48705f
push 0x64
call fcn.004f4b27
mov esi, eax
add esp, 4
mov dword [ebp - 0x15c], esi
mov byte [ebp - 4], 0xf
cmp esi, ebx
je 0x487057
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x10], eax
mov edx, dword [0x5515b0]
mov eax, dword [edx + 0xc]
mov ecx, 0x5515b0
call eax
add eax, 0x10
mov dword [esi + 0x14], eax
mov dword [esi + 0x2c], ebx
mov dword [esi + 0x30], ebx
mov dword [esi + 0x34], ebx
mov dword [esi + 0x3c], ebx
mov dword [esi + 0x40], ebx
mov dword [esi + 0x44], ebx
mov dword [esi + 0x4c], ebx
mov dword [esi + 0x50], ebx
mov dword [esi + 0x54], ebx
mov dword [esi + 0x58], ebx
mov dword [esi + 0x5c], ebx
mov dword [esi + 0x60], ebx
jmp 0x487059
xor esi, esi
mov dword [0x552af4], esi
mov edx, dword [vtable.CCriticalSection.0]
mov eax, dword [edx + 4]
mov ecx, 0x5452ec
mov byte [ebp - 4], 0xd
call eax
mov esi, dword [0x552af4]
mov ecx, dword [esi + 0x30]
sub ecx, dword [esi + 0x2c]
mov eax, 0x2aaaaaab
imul ecx
sar edx, 1
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
cmp ecx, 6
jbe 0x4870b6
mov eax, dword [esi + 0x2c]
mov ecx, dword [eax + 0x48]
cmp ecx, ebx
jne 0x4870a2
xor eax, eax
jmp 0x4870b4
mov edx, dword [eax + 0x50]
cmp edx, ebx
je 0x4870ac
mov ebx, dword [edx + 0xc]
mov eax, dword [eax + 0x4c]
imul eax, ebx
add eax, ecx
mov ebx, eax
mov edx, dword [ebp - 0x158]
mov eax, dword [ebp - 0x154]
add eax, 0xfffffff0
mov dword [ebx + 8], edx
mov byte [ebp - 4], 0xc
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x4870e5
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [ebp - 0x160]
add eax, 0xfffffff0
mov dword [ebp - 4], 0xffffffff
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x48710e
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.004f4f8b
mov esp, ebp
pop ebp
ret