Function at 0x42ad90
Capabilities:
Get number of processors

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x4df208
mov eax, dword fs:[0]
push eax
sub esp, 0x30
push ebx
push esi
push edi
mov eax, dword [0x504f68]
xor eax, esp
push eax
lea eax, [esp + 0x40]
mov dword fs:[0], eax
mov edi, ecx
mov dword [esp + 0x1c], edi
mov eax, dword [ebp + 8]
mov ecx, dword [eax]
mov dword [esp + 0x30], ecx
test ecx, ecx
je 0x42add4
mov esi, dword [ecx + 0x1c]
jmp 0x42add6
xor esi, esi
mov edx, dword [ebp + 8]
mov eax, dword [edx]
mov dword [esp + 0x34], esi
test esi, esi
jne 0x42ae29
cmp ecx, eax
jne 0x42ae30
mov ecx, dword [ebp + 0xc]
mov dword [edi + 0xc0], ecx
mov ebx, str.name
lea eax, [esp + 0x30]
mov ecx, edx
call fcn.00458f80
mov eax, dword [eax]
test eax, eax
je 0x42ae0f
mov eax, dword [eax + 8]
mov esi, eax
test eax, eax
jne 0x42ae14
mov esi, 0x4ed9d8
lea eax, [edi + 0xb0]
test esi, esi
jne 0x42af4e
xor ecx, ecx
jmp 0x42af62
mov ecx, dword [esi + 8]
test ecx, ecx
jne 0x42ae35
mov ecx, 0x4ed9d8
lea eax, [esp + 0x18]
push eax
call fcn.00408670
lea ebx, [esp + 0x18]
mov dword [esp + 0x48], 0
call fcn.00408790
mov ebx, eax
call fcn.00408810
mov ecx, dword [esp + 0x18]
cmp dword [ecx - 0xc], 0
je 0x42af1a
test esi, esi
je 0x42ae70
mov ecx, dword [esi + 4]
test ecx, ecx
jne 0x42ae75
mov ecx, 0x4ed9d8
lea edx, [esp + 0x24]
push edx
call fcn.00408670
mov edi, dword [esp + 0x1c]
add edi, 0xd0
lea ebx, [esp + 0x24]
mov byte [esp + 0x48], 1
call fcn.0042d6e0
mov ecx, dword [esp + 0x18]
mov esi, eax
mov edi, dword [esi]
lea eax, [ecx - 0x10]
sub edi, 0x10
cmp eax, edi
je 0x42aeed
cmp dword [edi + 0xc], 0
lea ebx, [edi + 0xc]
jl 0x42aee2
mov edx, dword [eax]
cmp edx, dword [edi]
jne 0x42aee2
call fcn.0040a2a0
mov dword [esp + 0x2c], eax
or eax, 0xffffffff
lock xadd dword [ebx], eax
dec eax
test eax, eax
jg 0x42aed7
mov ecx, dword [edi]
mov edx, dword [ecx]
mov eax, dword [edx + 4]
push edi
call eax
mov ecx, dword [esp + 0x2c]
add ecx, 0x10
mov dword [esi], ecx
jmp 0x42aeed
mov ebx, dword [ecx - 0xc]
push ecx
mov eax, esi
call fcn.00408980
mov byte [esp + 0x48], 0
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea edx, [eax + 0xc]
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x42af12
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov edi, dword [esp + 0x1c]
mov esi, dword [esp + 0x34]
mov dword [esp + 0x48], 0xffffffff
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x42af42
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov esi, dword [esi + 0x10]
mov ecx, dword [esp + 0x30]
jmp 0x42add6
mov ecx, esi
lea ebx, [ecx + 2]
mov dx, word [ecx]
add ecx, 2
test dx, dx
jne 0x42af53
sub ecx, ebx
sar ecx, 1
push esi
mov ebx, ecx
call fcn.00408980
mov ecx, dword [ebp + 8]
mov ebx, str.minWidth
lea eax, [esp + 0x30]
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov edx, eax
neg edx
sbb edx, edx
test edx, fcn.0042ce20
je 0x42b03f
test eax, eax
je 0x42b03f
mov eax, dword [eax + 8]
test eax, eax
je 0x42b03f
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
test eax, eax
jge 0x42b03f
mov esi, dword [ebp + 8]
xor eax, eax
mov dword [edi + 0x20], eax
mov ebx, str.minHeight
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov edx, eax
neg edx
sbb edx, edx
test edx, fcn.0042ce20
je 0x42b003
test eax, eax
je 0x42b003
mov eax, dword [eax + 8]
test eax, eax
je 0x42b003
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
test eax, eax
jl 0x42b08d
mov ebx, str.minHeight
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov ecx, eax
neg ecx
sbb ecx, ecx
test ecx, fcn.0042ce20
je 0x42b08d
test eax, eax
je 0x42b08d
mov eax, dword [eax + 8]
test eax, eax
je 0x42b08d
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
jmp 0x42b08f
mov esi, dword [ebp + 8]
mov ebx, str.minWidth
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov ecx, eax
neg ecx
sbb ecx, ecx
test ecx, fcn.0042ce20
je 0x42afbc
test eax, eax
je 0x42afbc
mov eax, dword [eax + 8]
test eax, eax
je 0x42afbc
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
jmp 0x42afbe
xor eax, eax
mov dword [edi + 0x24], eax
mov ebx, str.maxWidth
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov edx, eax
neg edx
sbb edx, edx
test edx, fcn.0042ce20
je 0x42b0ce
test eax, eax
je 0x42b0ce
mov eax, dword [eax + 8]
test eax, eax
je 0x42b0ce
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
jmp 0x42b0d0
xor eax, eax
mov dword [edi + 0x28], eax
mov ebx, str.maxHeight
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov ecx, eax
neg ecx
sbb ecx, ecx
test ecx, fcn.0042ce20
je 0x42b10f
test eax, eax
je 0x42b10f
mov eax, dword [eax + 8]
test eax, eax
je 0x42b10f
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
jmp 0x42b111
xor eax, eax
mov dword [edi + 0x2c], eax
mov ebx, 0x4ef7b8
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [eax]
test eax, eax
je 0x42b131
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b135
xor eax, eax
jmp 0x42b142
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
mov dword [edi + 0x30], eax
mov ebx, 0x4ef7c4
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [eax]
test eax, eax
je 0x42b162
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b166
xor eax, eax
jmp 0x42b173
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
mov dword [edi + 0x34], eax
mov ebx, str.value
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov edx, eax
neg edx
sbb edx, edx
test edx, fcn.0042ce20
je 0x42b1b6
test eax, eax
je 0x42b1a3
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b1a7
xor eax, eax
jmp 0x42b1b9
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
jmp 0x42b1b9
or eax, 0xffffffff
mov dword [edi + 0x10], eax
mov ebx, str.index
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov ecx, eax
neg ecx
sbb ecx, ecx
test ecx, fcn.0042ce20
je 0x42b1fc
test eax, eax
je 0x42b1e9
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b1ed
xor eax, eax
jmp 0x42b1ff
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
jmp 0x42b1ff
or eax, 0xffffffff
mov dword [edi + 0x14], eax
mov ebx, 0x4ef7ec
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [eax]
test eax, eax
je 0x42b221
mov eax, dword [eax + 8]
mov esi, eax
test eax, eax
jne 0x42b226
mov esi, 0x4ed9d8
lea eax, [edi + 0xb4]
test esi, esi
jne 0x42b234
xor ecx, ecx
jmp 0x42b24f
mov ecx, esi
lea ebx, [ecx + 2]
lea esp, [esp]
mov dx, word [ecx]
add ecx, 2
test dx, dx
jne 0x42b240
sub ecx, ebx
sar ecx, 1
push esi
mov ebx, ecx
call fcn.00408980
mov ecx, dword [ebp + 8]
mov ebx, str.tipDelay
lea eax, [esp + 0x30]
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov edx, eax
neg edx
sbb edx, edx
test edx, fcn.0042ce20
je 0x42b298
test eax, eax
je 0x42b285
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b289
xor eax, eax
jmp 0x42b29d
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
jmp 0x42b29d
mov eax, 0x1f4
mov esi, dword [ebp + 8]
mov dword [edi + 0xb8], eax
mov ebx, str.tipTime
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov ecx, eax
neg ecx
sbb ecx, ecx
test ecx, fcn.0042ce20
je 0x42b2e6
test eax, eax
je 0x42b2d3
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b2d7
xor eax, eax
jmp 0x42b2eb
push 0xa
push 0
push eax
call fcn.004ba3db
add esp, 0xc
jmp 0x42b2eb
mov eax, 0xfa0
mov dword [edi + 0xbc], eax
mov ebx, str.style
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [eax]
test eax, eax
je 0x42b310
mov eax, dword [eax + 8]
mov edx, eax
test eax, eax
jne 0x42b315
mov edx, 0x4ed9d8
lea esi, [edi + 0xa8]
test edx, edx
jne 0x42b323
xor eax, eax
jmp 0x42b33f
mov eax, edx
lea ebx, [eax + 2]
jmp 0x42b330
mov cx, word [eax]
add eax, 2
test cx, cx
jne 0x42b330
sub eax, ebx
sar eax, 1
mov ebx, eax
push edx
mov eax, esi
call fcn.00408980
mov ebx, esi
call fcn.00408790
mov ebx, eax
call fcn.00408810
mov eax, dword [edi + 0x20]
cmp dword [edi + 0x30], eax
jge 0x42b362
mov dword [edi + 0x30], eax
mov ecx, dword [edi + 0x28]
cmp ecx, eax
jle 0x42b371
cmp dword [edi + 0x30], ecx
jle 0x42b371
mov dword [edi + 0x30], ecx
mov ecx, dword [edi + 0x24]
cmp dword [edi + 0x34], ecx
jge 0x42b37c
mov dword [edi + 0x34], ecx
mov eax, dword [edi + 0x2c]
cmp eax, ecx
jle 0x42b38b
cmp dword [edi + 0x34], eax
jle 0x42b38b
mov dword [edi + 0x34], eax
mov esi, dword [ebp + 8]
mov ebx, str.visible
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov edx, eax
neg edx
sbb edx, edx
test edx, fcn.0042ce20
je 0x42b3e4
test eax, eax
je 0x42b3bb
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b3bf
xor al, al
jmp 0x42b3e6
movzx eax, word [eax]
cmp ax, 0x31
je 0x42b3e4
cmp ax, 0x74
je 0x42b3e4
cmp ax, 0x54
je 0x42b3e4
cmp ax, 0x79
je 0x42b3e4
cmp ax, 0x59
je 0x42b3e4
xor al, al
jmp 0x42b3e6
mov al, 1
mov byte [edi + 0x9c], al
mov ebx, str.enable
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov ecx, eax
neg ecx
sbb ecx, ecx
test ecx, fcn.0042ce20
je 0x42b442
test eax, eax
je 0x42b419
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b41d
xor al, al
jmp 0x42b444
movzx eax, word [eax]
cmp ax, 0x31
je 0x42b442
cmp ax, 0x74
je 0x42b442
cmp ax, 0x54
je 0x42b442
cmp ax, 0x79
je 0x42b442
cmp ax, 0x59
je 0x42b442
xor al, al
jmp 0x42b444
mov al, 1
mov byte [edi + 0x9d], al
mov ebx, str.mouseEnable
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov edx, eax
neg edx
sbb edx, edx
test edx, fcn.0042ce20
je 0x42b4a0
test eax, eax
je 0x42b477
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b47b
xor al, al
jmp 0x42b4a2
movzx eax, word [eax]
cmp ax, 0x31
je 0x42b4a0
cmp ax, 0x74
je 0x42b4a0
cmp ax, 0x54
je 0x42b4a0
cmp ax, 0x79
je 0x42b4a0
cmp ax, 0x59
je 0x42b4a0
xor al, al
jmp 0x42b4a2
mov al, 1
mov byte [edi + 0x9f], al
mov ebx, str.mouseChildren
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov ecx, eax
neg ecx
sbb ecx, ecx
test ecx, fcn.0042ce20
je 0x42b4fe
test eax, eax
je 0x42b4d5
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b4d9
xor al, al
jmp 0x42b500
movzx eax, word [eax]
cmp ax, 0x31
je 0x42b4fe
cmp ax, 0x74
je 0x42b4fe
cmp ax, 0x54
je 0x42b4fe
cmp ax, 0x79
je 0x42b4fe
cmp ax, 0x59
je 0x42b4fe
xor al, al
jmp 0x42b500
mov al, 1
mov edx, dword [edi]
mov byte [edi + 0xa0], al
mov eax, dword [edx + 0x2c]
mov ecx, edi
call eax
cmp eax, 0x64
mov ebx, str.focus
lea eax, [esp + 0x30]
mov ecx, esi
setle byte [esp + 0x14]
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov ecx, eax
neg ecx
sbb ecx, ecx
test ecx, fcn.0042ce20
je 0x42b571
test eax, eax
je 0x42b544
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b548
xor al, al
jmp 0x42b575
movzx eax, word [eax]
cmp ax, 0x31
je 0x42b56d
cmp ax, 0x74
je 0x42b56d
cmp ax, 0x54
je 0x42b56d
cmp ax, 0x79
je 0x42b56d
cmp ax, 0x59
je 0x42b56d
xor al, al
jmp 0x42b575
mov al, 1
jmp 0x42b575
mov al, byte [esp + 0x14]
mov byte [edi + 0x9e], al
mov ebx, str.transparent
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov edx, eax
neg edx
sbb edx, edx
test edx, fcn.0042ce20
je 0x42b5cd
test eax, eax
je 0x42b5cd
mov eax, dword [eax + 8]
test eax, eax
je 0x42b5cd
movzx eax, word [eax]
cmp ax, 0x31
je 0x42b5c9
cmp ax, 0x74
je 0x42b5c9
cmp ax, 0x54
je 0x42b5c9
cmp ax, 0x79
je 0x42b5c9
cmp ax, 0x59
jne 0x42b5cd
mov al, 1
jmp 0x42b5cf
xor al, al
mov byte [edi + 0xa1], al
mov ebx, str.background
lea eax, [esp + 0x30]
mov ecx, esi
call fcn.00458f80
mov eax, dword [eax]
test eax, eax
je 0x42b5f4
mov eax, dword [eax + 8]
mov edx, eax
test eax, eax
jne 0x42b5f9
mov edx, 0x4ed9d8
lea eax, [edi + 0xa4]
test edx, edx
jne 0x42b607
xor ecx, ecx
jmp 0x42b61f
mov ecx, edx
lea edi, [ecx + 2]
lea esp, [esp]
mov si, word [ecx]
add ecx, 2
test si, si
jne 0x42b610
sub ecx, edi
sar ecx, 1
push edx
mov ebx, ecx
call fcn.00408980
mov ecx, dword [ebp + 8]
push 0x4ed9d8
mov ebx, str.cursor
lea esi, [esp + 0x30]
call fcn.0042fc80
add esp, 4
mov edi, dword [esp + 0x1c]
mov dword [esp + 0x48], 2
mov ecx, dword [eax]
mov esi, dword [edi + 0xac]
lea eax, [ecx - 0x10]
sub esi, 0x10
cmp eax, esi
je 0x42b6aa
cmp dword [esi + 0xc], 0
lea ebx, [esi + 0xc]
jl 0x42b69b
mov edx, dword [eax]
cmp edx, dword [esi]
jne 0x42b69b
call fcn.0040a2a0
mov dword [esp + 0x30], eax
or eax, 0xffffffff
lock xadd dword [ebx], eax
dec eax
test eax, eax
jg 0x42b68c
mov ecx, dword [esi]
mov edx, dword [ecx]
mov eax, dword [edx + 4]
push esi
call eax
mov ecx, dword [esp + 0x30]
add ecx, 0x10
mov dword [edi + 0xac], ecx
jmp 0x42b6aa
mov ebx, dword [ecx - 0xc]
push ecx
lea eax, [edi + 0xac]
call fcn.00408980
mov dword [esp + 0x48], 0xffffffff
mov eax, dword [esp + 0x2c]
add eax, 0xfffffff0
lea edx, [eax + 0xc]
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x42b6d2
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
lea esi, [edi + 0xac]
mov ebx, esi
call fcn.00408790
mov ebx, eax
call fcn.00408810
mov ecx, dword [esi]
cmp dword [ecx - 0xc], 0
je 0x42b709
call fcn.0042d340
mov dword [edi + 0xc8], eax
test eax, eax
jne 0x42b713
mov dword [edi + 0xc8], 0xffffffff
jmp 0x42b713
mov dword [edi + 0xc8], 0
mov ecx, dword [ebp + 0xc]
mov edx, dword [ecx]
mov eax, dword [edx + 0x10]
call eax
mov ecx, dword [ebp + 8]
mov esi, eax
mov ebx, str.state
lea eax, [esp + 0x30]
call fcn.00458f80
mov eax, dword [esp + 0x30]
mov ecx, eax
neg ecx
sbb ecx, ecx
test ecx, fcn.0042ce20
je 0x42b75e
test eax, eax
je 0x42b74d
mov eax, dword [eax + 8]
test eax, eax
jne 0x42b752
mov eax, 0x4ed9d8
mov edx, dword [esi]
push eax
mov eax, dword [edx + 0x14]
mov ecx, esi
call eax
jmp 0x42b76a
mov edx, dword [edi]
mov eax, dword [edx + 0x17c]
mov ecx, edi
call eax
mov ebx, eax
test ebx, ebx
je 0x42b778
mov edx, dword [ebx]
mov eax, dword [edx]
mov ecx, ebx
call eax
mov ecx, dword [edi + 0x50]
test ecx, ecx
je 0x42b786
mov edx, dword [ecx]
mov eax, dword [edx + 4]
call eax
mov ecx, dword [ebp + 8]
mov dword [edi + 0x50], ebx
mov ebx, str.layout
lea eax, [esp + 0x30]
call fcn.00458f80
mov eax, dword [eax]
test eax, eax
je 0x42b7a9
mov eax, dword [eax + 8]
mov ecx, eax
test eax, eax
jne 0x42b7ae
mov ecx, 0x4ed9d8
lea edx, [esp + 0x20]
push edx
call fcn.00408670
lea ebx, [esp + 0x20]
mov dword [esp + 0x48], 3
call fcn.00408790
mov ebx, eax
call fcn.00408810
mov eax, dword [esp + 0x20]
cmp dword [eax - 0xc], 0
jne 0x42b804
mov eax, dword [edi]
mov edx, dword [eax + 0x180]
mov ecx, edi
call edx
mov ebx, eax
test ebx, ebx
je 0x42b7f4
mov eax, dword [ebx]
mov edx, dword [eax]
mov ecx, ebx
call edx
mov ecx, dword [edi + 0x4c]
test ecx, ecx
je 0x42b82a
mov eax, dword [ecx]
mov edx, dword [eax + 4]
call edx
jmp 0x42b82a
mov edx, dword [esi]
push eax
mov eax, dword [edx + 0xc]
mov ecx, esi
call eax
mov ebx, eax
test ebx, ebx
je 0x42b81c
mov edx, dword [ebx]
mov eax, dword [edx]
mov ecx, ebx
call eax
mov ecx, dword [edi + 0x4c]
test ecx, ecx
je 0x42b82a
mov edx, dword [ecx]
mov eax, dword [edx + 4]
call eax
mov ecx, ebx
mov dword [edi + 0x4c], ebx
test ecx, ecx
je 0x42b83e
mov edx, dword [ecx]
mov eax, dword [ebp + 8]
mov edx, dword [edx + 8]
push eax
call edx
push 0
push 0
push 0
push 0
add edi, 0xf0
push edi
call dword [sym.imp.USER32.dll_SetRect]
mov ecx, dword [ebp + 8]
mov ebx, str.paddingView
lea eax, [esp + 0x24]
call fcn.00458f80
mov eax, dword [eax]
test eax, eax
je 0x42b873
mov eax, dword [eax + 8]
mov ecx, eax
test eax, eax
jne 0x42b878
mov ecx, 0x4ed9d8
lea eax, [esp + 0x28]
push eax
call fcn.00408670
mov byte [esp + 0x48], 4
mov ecx, dword [esp + 0x28]
cmp dword [ecx - 0xc], 0
je 0x42b89e
push edi
call fcn.00430110
mov ecx, dword [esp + 0x2c]
add esp, 4
lea eax, [ecx - 0x10]
mov byte [esp + 0x48], 3
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x42b8bf
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0x48], 0xffffffff
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x42b8e7
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov ecx, dword [esp + 0x40]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 8