Function at 0x5360d0
Capabilities:
Check os version
Encode data using base64

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0xd0
mov esi, esp
mov dword [esi + 0xb8], ebp
mov dword [esi + 0xbc], esp
mov dword [esi + 0xc8], 0xffffffff
mov dword [esi + 0xc4], 0x5798d0
mov dword [esi + 0x98], ecx
lea eax, [esi + 0xc0]
mov dword [esi + 0x14], edx
mov ecx, dword fs:[0]
mov dword [esi + 0xc0], ecx
mov dword fs:[0], eax
mov eax, dword [edx]
mov ecx, dword [edx + 4]
mov dword [esi + 0x18], eax
mov eax, dword [eax + 0x50]
mov dword [esi + 8], ecx
mov ecx, dword [edx + 8]
test eax, eax
mov dword [esi + 0x30], eax
mov dword [esi], ecx
je 0x53615f
mov ecx, dword [esi]
sub ecx, eax
jbe 0x53615d
mov edx, dword [esi + 8]
cmp byte [edx + eax], 0xc0
jge 0x53615f
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push 0x59faa8
push edx
push eax
call fcn.0057fc70
jne 0x53614c
test ecx, ecx
je 0x5374c4
mov ecx, dword [esi + 8]
movzx ebx, byte [ecx + eax]
movzx ecx, bl
test bl, bl
jns 0x5361c6
mov edx, dword [esi + 8]
and ecx, 0x1f
movzx edi, byte [edx + eax + 1]
and edi, 0x3f
cmp bl, 0xdf
jbe 0x53630c
movzx edx, byte [edx + eax + 2]
shl edi, 6
and edx, 0x3f
or edx, edi
cmp bl, 0xf0
jb 0x536326
mov edi, dword [esi + 8]
and ecx, 7
shl edx, 6
shl ecx, 0x12
movzx edi, byte [edi + eax + 3]
and edi, 0x3f
or edi, edx
or ecx, edi
cmp ecx, 0x110000
je 0x5374c4
cmp ecx, 0x70
je 0x5361e2
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push eax
call fcn.00526dd0
add esp, 4
cmp eax, 0x50
jne 0x5375fe
mov eax, dword [esi + 0x18]
cmp dword [eax + 0x40], 0
jne 0x53752c
mov dword [eax + 0x40], 0xffffffff
mov dword [eax + 0x4c], 0
mov ecx, dword [eax + 0x50]
mov eax, ecx
mov eax, dword [esi]
test ecx, ecx
mov dword [esi + 0x30], ecx
mov dword [esi + 4], ecx
je 0x536247
mov eax, dword [esi]
mov edx, dword [esi + 4]
sub eax, edx
jbe 0x536245
mov ecx, dword [esi + 8]
cmp byte [ecx + edx], 0xc0
jge 0x536247
mov ecx, dword [esi + 8]
mov edx, dword [esi]
mov dword [esi + 0xc8], 0
push 0x59faa8
push edx
push dword [esi + 4]
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
jne 0x536220
test eax, eax
je 0x5362c1
mov eax, dword [esi + 8]
mov ecx, dword [esi + 4]
movzx ecx, byte [eax + ecx]
movzx eax, cl
test cl, cl
mov dword [esi + 0x24], eax
jns 0x536344
mov eax, dword [esi + 8]
mov ebx, dword [esi + 4]
mov edi, dword [esi + 0x24]
movzx edx, byte [eax + ebx + 1]
and edi, 0x1f
and edx, 0x3f
cmp cl, 0xdf
jbe 0x53631f
mov dword [esi + 0x24], edi
mov edi, eax
movzx eax, byte [eax + ebx + 2]
shl edx, 6
and eax, 0x3f
or eax, edx
cmp cl, 0xf0
jb 0x536339
movzx ecx, byte [edi + ebx + 3]
shl eax, 6
and ecx, 0x3f
or ecx, eax
mov eax, dword [esi + 0x24]
and eax, 7
shl eax, 0x12
or eax, ecx
cmp eax, 0x110000
mov dword [esi + 0x24], eax
jne 0x536344
lea ecx, [esi + 0x34]
lea eax, [esi + 0x30]
mov dword [esi + 0x48], 0x59fad0
mov dword [esi + 0x4c], 1
mov dword [esi + 0x58], 0
mov edx, 0x59fad8
mov dword [esi + 0xc8], 0
mov dword [esi + 0x50], ecx
lea ecx, [esi + 0x48]
mov dword [esi + 0x34], eax
mov dword [esi + 0x38], 0x4adf60
mov dword [esi + 0x54], 1
call fcn.0057f680
jmp 0x537739
shl ecx, 6
or ecx, edi
cmp ecx, 0x70
je 0x5361e2
jmp 0x5361cb
shl edi, 6
or edi, edx
jmp 0x536341
shl ecx, 0xc
or ecx, edx
cmp ecx, 0x70
jne 0x5361cb
jmp 0x5361e2
mov edi, dword [esi + 0x24]
shl edi, 0xc
or edi, eax
mov dword [esi + 0x24], edi
mov edi, dword [esi + 4]
mov eax, dword [esi + 0x18]
cmp dword [esi], edi
lea eax, [eax + 0x50]
mov dword [esi + 0x28], eax
je 0x536448
mov eax, dword [esi + 0x18]
mov edx, dword [esi]
mov ecx, dword [eax + 0x54]
mov eax, dword [eax + 0x58]
mov dword [esi + 0xc8], 0
mov dword [esi + 0x10], ecx
mov ecx, dword [esi + 8]
mov dword [esi + 0xc], eax
push edi
call fcn.00526dd0
add esp, 4
cmp eax, 0xa
jne 0x53639f
inc dword [esi + 0x10]
mov dword [esi + 0xc], 1
jne 0x5363a8
mov ecx, 0x59fae8
call fcn.0057fb10
jmp 0x537739
inc dword [esi + 0xc]
je 0x537649
mov eax, dword [esi + 0x28]
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push dword [eax]
call fcn.00526dd0
add esp, 4
mov edi, 1
cmp eax, 0x80
jb 0x5363df
mov edi, 2
cmp eax, 0x800
jb 0x5363df
cmp eax, 0x10000
mov edi, 4
sbb edi, 0
add edi, dword [esi + 4]
mov eax, dword [esi + 0x18]
mov ecx, dword [esi + 0x10]
mov edx, dword [esi + 0xc]
mov dword [eax + 0x50], edi
mov dword [eax + 0x54], ecx
mov dword [eax + 0x58], edx
mov eax, dword [esi]
je 0x536422
mov eax, dword [esi]
sub eax, edi
jbe 0x536420
mov ecx, dword [esi + 8]
cmp byte [ecx + edi], 0xbf
jg 0x536422
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push 0x59fb08
push edx
push edi
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
jne 0x536407
test eax, eax
je 0x536448
mov eax, dword [esi + 8]
movzx eax, byte [eax + edi]
test al, al
jns 0x536433
cmp al, 0xe0
mov ecx, dword [esi + 0x14]
call fcn.00526160
mov eax, dword [esi + 0x28]
mov eax, dword [eax]
cmp eax, dword [esi]
jne 0x536508
mov ecx, dword [esi + 0x28]
cmp dword [esi], 0
mov eax, dword [ecx + 8]
mov dword [esi + 0x5c], eax
movsd xmm0, qword [ecx]
movsd qword [esi + 0x54], xmm0
movsd xmm0, qword [ecx]
movsd qword [esi + 0x48], xmm0
mov eax, dword [ecx + 8]
mov dword [esi + 0x50], eax
je 0x5364a7
js 0x5375ea
movzx eax, byte [0x5fd2ec]
mov ebx, dword [esi]
xor ecx, ecx
mov edx, ebx
call fcn.0056a9f0
mov edi, eax
test eax, eax
jne 0x5364ae
mov ecx, 1
mov edx, ebx
mov dword [esi + 0xc8], 0
call fcn.0057f230
jmp 0x537739
mov ebx, dword [esi]
mov edi, 1
push ebx
push dword [esi + 8]
push edi
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
movsd xmm1, qword [esi + 0x50]
mov eax, dword [esi + 0x98]
movsd xmm0, qword [esi + 0x48]
movsd qword [eax + 0x30], xmm1
movsd xmm1, qword [esi + 0x58]
movsd qword [eax + 0x28], xmm0
movsd qword [eax + 0x38], xmm1
mov dword [eax], 0xa
mov dword [eax + 0x1c], ebx
mov dword [eax + 0x20], edi
mov dword [eax + 0x24], ebx
mov eax, dword [esi + 0x18]
inc dword [eax + 0x40]
mov eax, dword [esi + 0xc0]
mov dword fs:[0], eax
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push eax
call fcn.00526dd0
add esp, 4
mov ecx, dword [esi + 0x28]
cmp eax, 0x7b
mov edi, dword [ecx]
mov dword [esi + 0xa8], edi
jne 0x53690b
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push edi
call fcn.00526dd0
add esp, 4
mov ecx, 1
cmp eax, 0x80
jb 0x53655d
mov ecx, 2
cmp eax, 0x800
jb 0x53655d
cmp eax, 0x10000
mov ecx, 4
sbb ecx, 0
mov eax, dword [esi + 0xa8]
add eax, ecx
jb 0x537658
mov dword [esi + 0xa8], eax
mov eax, dword [esi + 0x18]
mov ecx, dword [eax + 0x58]
inc ecx
mov dword [esi + 0x94], ecx
je 0x537667
mov ecx, dword [eax + 0x54]
mov edx, dword [esi]
mov dword [esi + 0xa4], ecx
mov ecx, dword [esi + 8]
push dword [eax + 0x50]
call fcn.00526dd0
add esp, 4
mov edx, dword [esi + 0x94]
xor ecx, ecx
cmp eax, 0xa
mov eax, 1
sete cl
cmove edx, eax
mov eax, dword [esi + 0x18]
add dword [esi + 0xa4], ecx
mov dword [esi + 0x94], edx
add eax, 0x44
mov dword [esi + 0x20], eax
jmp 0x5365e0
mov ecx, dword [esi + 0x18]
mov eax, dword [ecx + 0x48]
mov ebx, dword [esi + 4]
mov byte [eax + edx], bl
inc edx
mov dword [ecx + 0x4c], edx
mov eax, dword [esi + 0x28]
mov edx, dword [esi]
mov edi, dword [eax]
cmp edi, edx
je 0x536a86
mov eax, dword [esi + 0x18]
mov dword [esi + 0x10], edi
mov ecx, dword [eax + 0x54]
mov eax, dword [eax + 0x58]
mov dword [esi + 0xc], ecx
mov ecx, dword [esi + 8]
mov dword [esi + 4], eax
push edi
call fcn.00526dd0
add esp, 4
cmp eax, 0xa
jne 0x536630
inc dword [esi + 0xc]
mov dword [esi + 4], 1
jne 0x536639
jmp 0x53762b
inc dword [esi + 4]
je 0x53763a
mov eax, dword [esi + 0x28]
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push dword [eax]
call fcn.00526dd0
add esp, 4
mov edi, 1
cmp eax, 0x80
jb 0x536670
mov edi, 2
cmp eax, 0x800
jb 0x536670
cmp eax, 0x10000
mov edi, 4
sbb edi, 0
add edi, dword [esi + 0x10]
mov eax, dword [esi + 0x18]
mov ecx, dword [esi + 0xc]
mov edx, dword [esi + 4]
mov dword [eax + 0x50], edi
mov dword [eax + 0x54], ecx
mov dword [eax + 0x58], edx
mov eax, dword [esi]
je 0x5366a3
mov eax, dword [esi]
sub eax, edi
jbe 0x53669d
mov ecx, dword [esi + 8]
cmp byte [ecx + edi], 0xbf
jg 0x5366a3
jmp 0x537612
jne 0x537612
test eax, eax
je 0x536a7c
mov eax, dword [esi + 8]
movzx eax, byte [eax + edi]
test al, al
jns 0x5366b8
cmp al, 0xe0
mov ecx, dword [esi + 0x14]
call fcn.00526160
mov eax, dword [esi + 0x28]
mov edx, dword [esi]
mov edi, dword [eax]
cmp edx, edi
je 0x536a86
test edi, edi
mov eax, edx
mov dword [esi + 0x30], edi
je 0x5366ef
mov eax, dword [esi]
sub eax, edi
jbe 0x537536
mov ecx, dword [esi + 8]
cmp byte [ecx + edi], 0xc0
jl 0x537536
test eax, eax
je 0x537568
mov ecx, dword [esi + 8]
movzx edx, byte [ecx + edi]
movzx eax, dl
test dl, dl
jns 0x536760
movzx ebx, byte [ecx + edi + 1]
and eax, 0x1f
and ebx, 0x3f
cmp dl, 0xdf
jbe 0x536756
mov dword [esi + 0xc], ebx
movzx ebx, byte [ecx + edi + 2]
mov dword [esi + 4], ebx
mov ebx, dword [esi + 0xc]
and dword [esi + 4], 0x3f
shl ebx, 6
add dword [esi + 4], ebx
cmp dl, 0xf0
mov ebx, dword [esi + 4]
jb 0x53675b
movzx edx, byte [ecx + edi + 3]
and eax, 7
shl ebx, 6
shl eax, 0x12
and edx, 0x3f
or edx, ebx
or eax, edx
cmp eax, 0x110000
jne 0x536760
jmp 0x537568
shl eax, 6
jmp 0x53675e
shl eax, 0xc
or eax, ebx
cmp eax, 0x7d
je 0x536a7c
mov eax, dword [esi]
test edi, edi
mov dword [esi + 0x30], edi
je 0x536789
mov eax, dword [esi]
sub eax, edi
jbe 0x53754f
mov ecx, dword [esi + 8]
cmp byte [ecx + edi], 0xc0
jl 0x53754f
test eax, eax
je 0x5375a9
mov ebx, dword [esi + 8]
movzx ecx, byte [ebx + edi]
movzx edx, cl
test cl, cl
jns 0x5367f6
movzx eax, byte [ebx + edi + 1]
and edx, 0x1f
and eax, 0x3f
cmp cl, 0xdf
jbe 0x53681b
mov dword [esi + 4], edx
movzx edx, byte [ebx + edi + 2]
shl eax, 6
and edx, 0x3f
or edx, eax
cmp cl, 0xf0
mov eax, edx
jb 0x536851
movzx ecx, byte [ebx + edi + 3]
mov edx, dword [esi + 4]
shl eax, 6
and edx, 7
and ecx, 0x3f
shl edx, 0x12
or ecx, eax
or edx, ecx
cmp edx, 0x110000
je 0x5375a9
cmp edx, 0x80
jae 0x536828
mov eax, dword [esi + 0x18]
mov dword [esi + 4], edx
mov edx, dword [eax + 0x4c]
cmp edx, dword [eax + 0x44]
jne 0x5365d0
mov ecx, dword [esi + 0x20]
call fcn.00418a00
mov ecx, dword [esi + 0x18]
mov edx, dword [ecx + 0x4c]
jmp 0x5365d3
shl edx, 6
or edx, eax
cmp edx, 0x80
jb 0x5367f6
mov eax, edx
cmp edx, 0x800
mov dword [esi + 0x48], 0
jae 0x536863
shr eax, 6
and dl, 0x3f
mov ebx, 2
or al, 0xc0
or dl, 0x80
mov byte [esi + 0x48], al
mov byte [esi + 0x49], dl
jmp 0x5368bd
mov edx, dword [esi + 4]
shl edx, 0xc
or edx, eax
cmp edx, 0x80
jb 0x5367f6
jmp 0x536828
cmp edx, 0x10000
jae 0x53688f
shr eax, 0xc
mov ebx, 3
or al, 0xe0
mov byte [esi + 0x48], al
mov eax, edx
and dl, 0x3f
shr eax, 6
or dl, 0x80
and al, 0x3f
or al, 0x80
mov byte [esi + 0x49], al
mov byte [esi + 0x4a], dl
jmp 0x5368bd
shr eax, 0x12
mov ebx, 4
or al, 0xf0
mov byte [esi + 0x48], al
mov eax, edx
shr eax, 0xc
and al, 0x3f
or al, 0x80
mov byte [esi + 0x49], al
mov eax, edx
and dl, 0x3f
shr eax, 6
or dl, 0x80
and al, 0x3f
or al, 0x80
mov byte [esi + 0x4a], al
mov byte [esi + 0x4b], dl
mov ecx, dword [esi + 0x18]
mov dword [esi + 4], ebx
mov eax, dword [ecx + 0x44]
mov edi, dword [ecx + 0x4c]
sub eax, edi
cmp eax, ebx
jae 0x5368e5
mov ecx, dword [esi + 0x20]
mov edx, edi
push ebx
call fcn.0057bdc0
add esp, 4
mov eax, dword [esi + 0x18]
mov edi, dword [eax + 0x4c]
jmp 0x5368e8
mov eax, dword [esi + 0x18]
mov eax, dword [eax + 0x48]
mov ebx, dword [esi + 4]
add eax, edi
push ebx
lea ecx, [esi + 0x48]
push ecx
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov eax, dword [esi + 0x18]
add edi, ebx
mov dword [eax + 0x4c], edi
jmp 0x5365e0
mov eax, dword [esi + 0x18]
mov edx, dword [esi]
mov ecx, dword [eax + 0x54]
mov eax, dword [eax + 0x58]
mov dword [esi + 0xa4], ecx
mov ecx, dword [esi + 8]
mov dword [esi + 0x94], eax
push edi
call fcn.00526dd0
add esp, 4
mov dword [esi + 4], eax
cmp dword [esi + 4], 0x5c
jne 0x536a5a
mov eax, dword [esi + 0x28]
mov ecx, dword [esi + 8]
mov edx, dword [esi]
mov eax, dword [eax]
mov dword [esi + 4], eax
push eax
call fcn.00526dd0
add esp, 4
mov ecx, 1
cmp eax, 0x80
jb 0x536976
mov ecx, 2
cmp eax, 0x800
jb 0x536976
cmp eax, 0x10000
mov ecx, 4
sbb ecx, 0
mov eax, dword [esi + 4]
add eax, ecx
jb 0x537676
mov dword [esi + 4], eax
mov eax, dword [esi + 0x18]
mov ecx, dword [eax + 0x58]
inc ecx
mov dword [esi + 0x24], ecx
je 0x537685
mov ecx, dword [eax + 0x54]
mov edx, dword [esi]
mov dword [esi + 0x14], ecx
mov ecx, dword [esi + 8]
push dword [eax + 0x50]
call fcn.00526dd0
add esp, 4
mov ecx, dword [esi + 0x28]
xor edx, edx
cmp eax, 0xa
mov edi, dword [esi + 0x24]
mov ebx, dword [esi]
sete byte [esi + 0xc]
mov eax, dword [ecx + 8]
mov dword [esi + 0x50], eax
movsd xmm0, qword [ecx]
mov ecx, 1
cmove edi, ecx
test ebx, ebx
mov dword [esi + 0x24], edi
movsd qword [esi + 0x48], xmm0
je 0x536a00
js 0x53769e
movzx eax, byte [0x5fd2ec]
mov ebx, dword [esi]
xor ecx, ecx
mov edx, ebx
call fcn.0056a9f0
mov ecx, eax
test eax, eax
mov edx, 0
je 0x5376a8
movzx eax, byte [esi + 0xc]
mov edi, dword [esi + 0x14]
mov dword [esi], ecx
mov dl, al
add edi, edx
push ebx
push dword [esi + 8]
push ecx
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov eax, dword [esi + 0x50]
mov ecx, dword [esi + 0x98]
movsd xmm0, qword [esi + 0x48]
mov edx, dword [esi + 0x24]
mov dword [ecx + 0x30], eax
mov eax, dword [esi]
movsd qword [ecx + 0x28], xmm0
mov dword [ecx], 0x1f
mov dword [ecx + 0x1c], ebx
mov dword [ecx + 0x20], eax
mov eax, dword [esi + 4]
mov dword [ecx + 0x24], ebx
mov dword [ecx + 0x34], eax
mov eax, 0x3c
mov dword [ecx + 0x38], edi
mov dword [ecx + eax], edx
jmp 0x5364ee
mov ecx, dword [esi + 0x14]
call fcn.00526eb0
test al, al
mov dword [esi + 0xc], 0x80000000
je 0x536a75
mov ecx, dword [esi + 0x14]
call fcn.00526160
mov dword [esi], ecx
jmp 0x5371c9
mov edx, dword [esi]
cmp edi, edx
jne 0x536b2b
mov ecx, dword [esi + 0x28]
test edx, edx
mov eax, dword [ecx + 8]
mov dword [esi + 0x5c], eax
movsd xmm0, qword [ecx]
movsd qword [esi + 0x54], xmm0
movsd xmm0, qword [ecx]
movsd qword [esi + 0x48], xmm0
mov eax, dword [ecx + 8]
mov dword [esi + 0x50], eax
je 0x536ada
js 0x537694
movzx eax, byte [0x5fd2ec]
mov ebx, dword [esi]
xor ecx, ecx
mov edx, ebx
call fcn.0056a9f0
mov edi, eax
test eax, eax
jne 0x536ae1
mov ecx, 1
mov edx, ebx
call fcn.0057f230
jmp 0x537739
mov ebx, dword [esi]
mov edi, 1
push ebx
push dword [esi + 8]
push edi
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
movsd xmm1, qword [esi + 0x50]
mov ecx, dword [esi + 0x98]
movsd xmm0, qword [esi + 0x48]
mov eax, 0x24
movsd qword [ecx + 0x30], xmm1
movsd xmm1, qword [esi + 0x58]
movsd qword [ecx + 0x28], xmm0
movsd qword [ecx + 0x38], xmm1
mov dword [ecx], 0xa
mov dword [ecx + 0x1c], ebx
mov dword [ecx + 0x20], edi
mov dword [ecx + eax], ebx
jmp 0x5364ee
mov ecx, dword [esi + 8]
push edi
call fcn.00526dd0
add esp, 4
cmp eax, 0x7d
mov dword [esi + 0x34], eax
jne 0x5376b9
mov ecx, dword [esi + 0x14]
call fcn.00526eb0
mov eax, dword [esi + 0x18]
lea ecx, [esi + 0x48]
mov edx, dword [eax + 0x48]
mov eax, dword [eax + 0x4c]
mov dword [esi + 0x1c], edx
push 2
push 0x5a0110
mov dword [esi + 0xc], eax
push eax
call fcn.004b46e0
add esp, 0xc
cmp dword [esi + 0x48], 0
je 0x536cde
mov ecx, dword [esi + 0x6c]
mov eax, dword [esi + 0x84]
mov edi, dword [esi + 0x78]
mov ebx, dword [esi + 0x7c]
mov dword [esi + 0x10], ecx
cmp ecx, 0xffffffff
mov ecx, dword [esi + 0x80]
lea edx, [eax - 1]
mov dword [esi + 0x20], eax
mov dword [esi], ebx
mov dword [esi + 0x14], edi
mov dword [esi + 0xa0], edx
mov dword [esi + 8], ecx
je 0x536d29
mov ecx, dword [esi + 0x64]
mov eax, ecx
mov dword [esi + 4], ecx
add ecx, edx
cmp ecx, ebx
jae 0x536ff9
mov eax, dword [esi + 0x50]
mov edx, ebx
mov ebx, dword [esi + 0x20]
mov dword [esi + 0x90], eax
mov eax, dword [esi + 0x54]
mov dword [esi + 0x8c], eax
mov eax, dword [esi + 0x60]
sub ebx, eax
mov dword [esi + 0x40], eax
mov dword [esi + 0x9c], ebx
mov ebx, dword [esi + 0x58]
mov dword [esi + 0x44], ebx
movzx ecx, byte [edi + ecx]
mov edi, 1
xor eax, eax
mov ebx, 1
shld eax, ebx, cl
shl edi, cl
test cl, 0x20
mov ecx, 0
cmovne eax, edi
cmovne edi, ecx
and eax, dword [esi + 0x8c]
and edi, dword [esi + 0x90]
or edi, eax
je 0x536c71
mov eax, dword [esi + 0x10]
mov ecx, dword [esi + 0x44]
mov edi, dword [esi + 0x20]
mov ebx, dword [esi + 4]
cmp ecx, eax
cmova eax, ecx
mov ecx, dword [esi + 0x14]
cmp eax, edi
mov dword [esi + 0x2c], eax
cmova edi, eax
lea edx, [ecx + ebx]
mov ecx, eax
cmp edi, ecx
je 0x536c9a
mov eax, ecx
add ecx, ebx
cmp ecx, dword [esi]
jae 0x537387
mov ebx, dword [esi + 8]
lea ecx, [eax + 1]
movzx ebx, byte [ebx + eax]
cmp bl, byte [edx + eax]
mov ebx, dword [esi + 4]
je 0x536c3d
sub ebx, dword [esi + 0x44]
mov edx, dword [esi]
mov dword [esi + 0x10], 0
lea ebx, [ebx + eax + 1]
jmp 0x536c7e
mov ebx, dword [esi + 4]
mov dword [esi + 0x10], 0
add ebx, dword [esi + 0x20]
mov edi, dword [esi + 0x14]
mov eax, dword [esi + 0xa0]
mov dword [esi + 4], ebx
lea ecx, [ebx + eax]
cmp ecx, edx
jb 0x536be9
jmp 0x536ff9
mov ecx, dword [esi + 0x44]
mov edx, dword [esi]
cmp dword [esi + 0x10], ecx
jae 0x536eeb
dec ecx
cmp ecx, dword [esi + 0x20]
jae 0x5373af
lea edi, [ecx + ebx]
cmp edi, edx
jae 0x5373ce
mov eax, dword [esi + 8]
mov edx, dword [esi + 0x14]
movzx eax, byte [eax + ecx]
cmp al, byte [edx + edi]
mov edi, edx
mov edx, dword [esi]
je 0x536c9f
mov eax, dword [esi + 0x9c]
add ebx, dword [esi + 0x40]
mov dword [esi + 0x10], eax
jmp 0x536c81
cmp byte [esi + 0x56], 0
jne 0x536ff9
mov ebx, dword [esi + 0x4c]
mov edx, dword [esi + 0x7c]
mov edi, dword [esi + 0x78]
movzx eax, byte [esi + 0x54]
test ebx, ebx
mov ecx, edx
je 0x536e76
mov ecx, edx
sub ecx, ebx
jbe 0x536e70
cmp byte [edi + ebx], 0xc0
jge 0x536e76
mov ecx, edi
push 0x5ec484
push edx
push ebx
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
mov ecx, dword [esi + 0x64]
mov eax, ecx
mov dword [esi + 4], ecx
add ecx, edx
cmp ecx, ebx
jae 0x536ff9
mov edx, dword [esi + 0x58]
mov eax, dword [esi + 0x20]
cmp edx, eax
mov ebx, eax
mov dword [esi + 0x2c], edx
cmova ebx, edx
mov dword [esi + 0x10], ebx
lea ebx, [edx - 1]
mov dword [esi + 0x40], ebx
mov ebx, 1
sub ebx, edx
mov edx, dword [esi + 0x40]
mov dword [esi + 0xac], ebx
mov ebx, dword [esi + 0x54]
cmp edx, eax
mov eax, dword [esi + 0x50]
mov dword [esi + 0x8c], ebx
mov dword [esi + 0x90], eax
jae 0x53740c
mov eax, dword [esi + 0x60]
mov dword [esi + 0xb4], eax
mov eax, dword [esi + 8]
add eax, edx
mov dword [esi + 0x9c], eax
jmp 0x536db2
mov ebx, dword [esi + 4]
mov edi, edx
mov edx, dword [esi]
add ebx, dword [esi + 0x20]
mov eax, dword [esi + 0xa0]
mov dword [esi + 4], ebx
lea ecx, [ebx + eax]
cmp ecx, edx
jae 0x536ff9
movzx ecx, byte [edi + ecx]
mov ebx, 1
xor eax, eax
mov edx, 1
shld eax, edx, cl
shl ebx, cl
test cl, 0x20
mov ecx, 0
mov edx, edi
cmovne eax, ebx
cmovne ebx, ecx
and eax, dword [esi + 0x8c]
and ebx, dword [esi + 0x90]
or ebx, eax
je 0x536d94
mov ebx, dword [esi + 4]
mov edi, dword [esi + 0x2c]
lea ecx, [edx + ebx]
cmp dword [esi + 0x10], edi
je 0x536e23
lea edx, [ebx + edi]
mov eax, edi
cmp edx, dword [esi]
jae 0x53749b
mov edx, dword [esi + 8]
lea edi, [eax + 1]
movzx edx, byte [edx + eax]
cmp dl, byte [ecx + eax]
je 0x536df0
add ebx, dword [esi + 0xac]
mov edx, dword [esi]
mov edi, dword [esi + 0x14]
add ebx, eax
jmp 0x536d9e
mov eax, dword [esi + 0x40]
mov edi, dword [esi + 0x9c]
mov edx, dword [esi + 0x2c]
lea ecx, [eax + ebx]
mov eax, dword [esi]
sub edx, 1
jb 0x536eeb
cmp ecx, eax
jae 0x5373ee
movzx eax, byte [edi]
dec edi
mov byte [esi + 0x44], al
mov eax, dword [esi + 0x14]
movzx ebx, byte [esi + 0x44]
cmp bl, byte [eax + ecx]
mov eax, dword [esi]
lea ecx, [ecx - 1]
je 0x536e34
mov ebx, dword [esi + 4]
mov edi, dword [esi + 0x14]
mov edx, eax
add ebx, dword [esi + 0xb4]
jmp 0x536d9e
jne 0x536d13
test ecx, ecx
mov dword [esi + 4], ebx
je 0x536ecb
mov ah, byte [edi + ebx]
mov dword [esi], edi
movzx ecx, ah
test ah, ah
jns 0x536ee3
movzx ebx, byte [edi + ebx + 1]
and ecx, 0x1f
and ebx, 0x3f
cmp ah, 0xe0
jb 0x536ed4
mov dword [esi + 8], edx
mov edx, dword [esi + 4]
shl ebx, 6
movzx edx, byte [edi + edx + 2]
and edx, 0x3f
or edx, ebx
cmp ah, 0xf0
jb 0x536edb
mov ebx, dword [esi + 4]
and ecx, 7
shl edx, 6
shl ecx, 0x12
movzx ebx, byte [edi + ebx + 3]
and ebx, 0x3f
or ebx, edx
or ecx, ebx
jmp 0x536ee0
test al, al
jne 0x536eeb
jmp 0x536ff9
shl ecx, 6
or ecx, ebx
jmp 0x536ee3
shl ecx, 0xc
or ecx, edx
mov edx, dword [esi + 8]
test al, al
je 0x536fed
mov edi, dword [esi + 4]
test edi, edi
je 0x536f24
cmp edi, dword [esi + 0xc]
mov ebx, dword [esi + 0x1c]
jae 0x536f2e
cmp byte [ebx + edi], 0xbf
jg 0x536f30
mov edx, dword [esi + 0xc]
mov dword [esi + 0xc8], 0
mov ecx, ebx
push 0x5a0114
push edi
push 0
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
mov ebx, dword [esi + 0x1c]
mov eax, 1
jmp 0x536f50
jne 0x536f00
test edi, edi
js 0x537701
movzx eax, byte [0x5fd2ec]
xor ecx, ecx
mov edx, edi
call fcn.0056a9f0
test eax, eax
je 0x537712
push edi
push ebx
mov dword [esi + 0x10], eax
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov eax, ebx
mov ebx, dword [esi + 0xc]
add edi, 2
cmp ebx, edi
jbe 0x536f93
cmp byte [eax + edi], 0xbf
jg 0x536f95
mov ecx, dword [esi + 0x1c]
mov dword [esi + 0xc8], 3
mov edx, ebx
push 0x5a0124
push ebx
push edi
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
jne 0x536f70
sub ebx, edi
je 0x536fce
js 0x53772a
movzx eax, byte [0x5fd2ec]
xor ecx, ecx
mov edx, ebx
call fcn.0056a9f0
test eax, eax
jne 0x536fd3
mov ecx, 1
mov edx, ebx
mov dword [esi + 0xc8], 3
call fcn.0057f230
jmp 0x537739
mov eax, 1
mov ecx, dword [esi + 0x1c]
add ecx, edi
push ebx
push ecx
mov dword [esi + 8], eax
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov al, 2
jmp 0x5371bb
cmp ecx, 0x110000
jne 0x53731b
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0xc]
lea edx, [esi + 0x48]
mov dword [esi + 0xc8], 0
mov dword [esi + 0x4c], eax
mov dword [esi + 0x50], ecx
mov dword [esi + 0x54], 0
mov dword [esi + 0x58], ecx
lea ecx, [esi + 0x34]
mov dword [esi + 0x48], 0x3a
mov dword [esi + 0x5c], 1
mov dword [esi + 0x60], 0x3a
call fcn.004a0950
cmp dword [esi + 0x34], 0
je 0x53707a
mov edi, dword [esi + 0x38]
mov ebx, dword [esi + 0x1c]
test edi, edi
je 0x5370f5
cmp edi, dword [esi + 0xc]
jae 0x5370fc
cmp byte [ebx + edi], 0xbf
jg 0x537102
mov edx, dword [esi + 0xc]
mov ecx, ebx
push 0x5a0134
push edi
push 0
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0xc]
lea edx, [esi + 0x48]
mov dword [esi + 0x4c], eax
mov dword [esi + 0x50], ecx
mov dword [esi + 0x54], 0
mov dword [esi + 0x58], ecx
lea ecx, [esi + 0x34]
mov dword [esi + 0x48], 0x3d
mov dword [esi + 0x5c], 1
mov dword [esi + 0x60], 0x3d
call fcn.004a0950
cmp dword [esi + 0x34], 0
je 0x537247
mov edi, dword [esi + 0x38]
mov edx, dword [esi + 0xc]
test edi, edi
je 0x53727e
cmp edi, edx
jae 0x537278
mov eax, dword [esi + 0x1c]
cmp byte [eax + edi], 0xbf
jg 0x53727e
mov ecx, dword [esi + 0x1c]
push 0x5a0154
push edi
push 0
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
mov eax, 1
jmp 0x537122
jne 0x537060
test edi, edi
js 0x5376db
movzx eax, byte [0x5fd2ec]
xor ecx, ecx
mov edx, edi
call fcn.0056a9f0
test eax, eax
je 0x5376e2
push edi
push ebx
mov dword [esi + 0x10], eax
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov eax, ebx
mov ebx, dword [esi + 0xc]
mov dword [esi + 4], edi
inc edi
cmp ebx, edi
jbe 0x537166
cmp byte [eax + edi], 0xbf
jg 0x537168
mov ecx, dword [esi + 0x1c]
mov dword [esi + 0xc8], 2
mov edx, ebx
push 0x5a0144
push ebx
push edi
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
jne 0x537143
sub ebx, edi
je 0x5371a1
js 0x5376f0
movzx eax, byte [0x5fd2ec]
xor ecx, ecx
mov edx, ebx
call fcn.0056a9f0
test eax, eax
jne 0x5371a6
mov ecx, 1
mov edx, ebx
mov dword [esi + 0xc8], 2
call fcn.0057f230
jmp 0x537739
mov eax, 1
mov ecx, dword [esi + 0x1c]
add ecx, edi
push ebx
push ecx
mov dword [esi + 8], eax
push eax
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov al, 1
mov dword [esi], eax
mov eax, dword [esi + 4]
mov edi, dword [esi + 0x10]
mov dword [esi + 0xc], ebx
mov dword [esi + 0x14], ebx
movzx ecx, word [esi + 0xb1]
mov edx, dword [esi + 0x98]
mov ebx, dword [esi + 0x28]
cmp dword [esi + 0x24], 0x50
mov word [edx + 0x1d], cx
movzx ecx, byte [esi + 0xb3]
mov byte [edx + 0x1f], cl
mov ecx, dword [ebx + 8]
mov dword [edx + 0x34], ecx
mov ecx, dword [esi + 4]
movsd xmm0, qword [ebx]
movsd qword [edx + 0x2c], xmm0
mov dword [edx + 4], ecx
mov dword [edx + 8], edi
mov dword [edx + 0xc], eax
mov ecx, dword [esi + 0xc]
mov eax, dword [esi + 8]
mov edi, dword [esi + 0xa4]
mov dword [edx + 0x10], ecx
mov dword [edx + 0x14], eax
mov eax, dword [esi + 0x14]
mov ecx, dword [esi + 0xa8]
mov dword [edx + 0x18], eax
mov eax, dword [esi]
mov byte [edx + 0x1c], al
mov dword [edx + 0x20], ecx
mov ecx, dword [esi + 0x94]
mov dword [edx + 0x24], edi
mov dword [edx + 0x28], ecx
sete byte [edx + 0x38]
mov dword [edx], 0x22
jmp 0x5364ee
mov ecx, dword [esi + 0xc]
call fcn.00538420
mov dword [esi + 4], eax
mov ebx, dword [esi + 0xc]
push ebx
push dword [esi + 0x1c]
mov edi, edx
push edx
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov dword [esi], 0
mov eax, ebx
mov dword [esi + 0xc], 0x80000001
jmp 0x5371c9
jne 0x5370dd
mov ecx, edi
mov dword [esi + 0x20], edi
call fcn.00538420
mov dword [esi + 4], eax
mov dword [esi + 0x10], edx
mov ebx, dword [esi + 0x20]
push ebx
mov edi, dword [esi + 0x1c]
push edi
push dword [esi + 0x10]
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
inc ebx
mov dword [esi], ebx
jne 0x5372ab
mov ecx, dword [esi + 0xc]
jmp 0x5372de
mov edx, dword [esi + 0xc]
mov ecx, edx
sub ecx, ebx
jbe 0x5372dc
cmp byte [edi + ebx], 0xbf
jg 0x5372de
mov ecx, dword [esi + 0x1c]
mov dword [esi + 0xc8], 1
push 0x5a0164
push edx
push dword [esi]
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
jne 0x5372ba
mov dword [esi + 0xc8], 1
mov dword [esi + 0x14], ecx
call fcn.00538420
mov dword [esi + 0xc], eax
mov dword [esi + 8], edx
mov eax, dword [esi + 0x1c]
add eax, dword [esi]
push dword [esi + 0x14]
push eax
push dword [esi + 8]
call sub.VCRUNTIME140.dll_memcpy
add esp, 0xc
mov edi, dword [esi + 0x10]
mov eax, dword [esi + 0x20]
mov dword [esi], 0
jmp 0x5371c9
mov eax, 1
cmp ecx, 0x80
jb 0x537343
mov eax, 2
cmp ecx, 0x800
jb 0x537343
cmp ecx, 0x10000
mov eax, 4
sbb eax, 0
mov ebx, dword [esi + 4]
add ebx, eax
je 0x53735d
mov ecx, dword [esi]
mov eax, edx
sub eax, ebx
jbe 0x537363
cmp byte [ecx + ebx], 0xbf
jg 0x537369
jmp 0x536d15
mov ecx, dword [esi]
mov eax, edx
jmp 0x537369
jne 0x536d15
test eax, eax
mov dword [esi + 4], ebx
je 0x536eeb
movzx eax, byte [ecx + ebx]
test al, al
jns 0x536eeb
cmp al, 0xe0
jmp 0x536eeb
mov ecx, dword [esi + 0x2c]
mov edx, dword [esi]
mov dword [esi + 0xc8], 0
add ecx, ebx
cmp edx, ecx
cmova ecx, edx
push 0x5ec3dc
call fcn.0057f710
add esp, 4
jmp 0x537739
mov edx, dword [esi + 0x20]
mov dword [esi + 0xc8], 0
push 0x5ec3bc
call fcn.0057f710
add esp, 4
jmp 0x537739
mov edx, dword [esi]
mov dword [esi + 0xc8], 0
mov ecx, edi
push 0x5ec3cc
call fcn.0057f710
add esp, 4
jmp 0x537739
mov edx, dword [esi]
mov dword [esi + 0xc8], 0
push 0x5ec3cc
call fcn.0057f710
add esp, 4
jmp 0x537739
xor ebx, ebx
movzx ecx, byte [edi + ecx]
mov edi, 1
xor eax, eax
mov edx, 1
shld eax, edx, cl
shl edi, cl
test cl, 0x20
cmovne eax, edi
cmovne edi, ebx
and eax, dword [esi + 0x8c]
and edi, dword [esi + 0x90]
or edi, eax
je 0x53747a
mov eax, dword [esi + 4]
mov ecx, dword [esi + 0x14]
mov edi, dword [esi + 0x2c]
add ecx, eax
cmp dword [esi + 0x10], edi
je 0x537500
mov edx, dword [esi + 4]
mov eax, edi
add edx, edi
cmp edx, dword [esi]
jae 0x53749b
mov edx, dword [esi + 8]
lea edi, [eax + 1]
movzx edx, byte [edx + eax]
cmp dl, byte [ecx + eax]
je 0x537447
mov ecx, dword [esi + 4]
add ecx, dword [esi + 0xac]
add ecx, eax
mov dword [esi + 4], ecx
jmp 0x537480
mov eax, dword [esi + 0x20]
add dword [esi + 4], eax
mov eax, dword [esi + 4]
mov ecx, dword [esi + 0xa0]
mov edi, dword [esi + 0x14]
add ecx, eax
cmp ecx, dword [esi]
jb 0x53740e
jmp 0x536ff9
mov ecx, dword [esi + 4]
mov edx, dword [esi]
mov dword [esi + 0xc8], 0
add ecx, dword [esi + 0x2c]
cmp edx, ecx
cmova ecx, edx
push 0x5ec3dc
call fcn.0057f710
add esp, 4
jmp 0x537739
lea ecx, [esi + 0x34]
lea eax, [esi + 0x30]
mov dword [esi + 0x48], 0x59fad0
mov dword [esi + 0x4c], 1
mov dword [esi + 0x58], 0
mov edx, 0x59fad8
mov dword [esi + 0x50], ecx
lea ecx, [esi + 0x48]
mov dword [esi + 0x34], eax
mov dword [esi + 0x38], 0x4adf60
mov dword [esi + 0x54], 1
call fcn.0057f680
cmp dword [esi + 0x2c], 0
je 0x536eeb
mov ecx, dword [esi + 0x40]
mov edx, dword [esi + 0x20]
mov dword [esi + 0xc8], 0
push 0x5ec3bc
call fcn.0057f710
add esp, 4
jmp 0x537739
mov ecx, 0x5a0184
call fcn.0057f9f0
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push 0x59faa8
push edx
push edi
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push 0x59faa8
push edx
push edi
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
lea ecx, [esi + 0x34]
lea eax, [esi + 0x30]
mov dword [esi + 0x48], 0x59fad0
mov dword [esi + 0x4c], 1
mov dword [esi + 0x58], 0
mov edx, 0x59fad8
mov dword [esi + 0x50], ecx
lea ecx, [esi + 0x48]
mov dword [esi + 0x34], eax
mov dword [esi + 0x38], 0x4adf60
mov dword [esi + 0x54], 1
call fcn.0057f680
jmp 0x537739
lea ecx, [esi + 0x34]
lea eax, [esi + 0x30]
mov dword [esi + 0x48], 0x59fad0
mov dword [esi + 0x4c], 1
mov dword [esi + 0x58], 0
mov edx, 0x59fad8
mov dword [esi + 0x50], ecx
lea ecx, [esi + 0x48]
mov dword [esi + 0x34], eax
mov dword [esi + 0x38], 0x4adf60
mov dword [esi + 0x54], 1
call fcn.0057f680
jmp 0x537739
mov dword [esi + 0xc8], 0
call fcn.004634e0
jmp 0x537739
mov ecx, str.assertion_failed:_self.char____p__self.char____P
mov edx, 0x3a
push 0x5a01d0
call fcn.0057f7d0
mov ecx, dword [esi + 8]
mov edx, dword [esi]
push 0x59fb08
push edx
push edi
call fcn.0057fc70
add esp, 0xc
jmp 0x537739
mov ecx, 0x59fae8
call fcn.0057fb10
jmp 0x537739
mov ecx, 0x59faf8
call fcn.0057fb10
jmp 0x537739
mov ecx, 0x59faf8
call fcn.0057fb10
jmp 0x537739
mov ecx, 0x59fb68
call fcn.0057fb10
jmp 0x537739
mov ecx, 0x59fb78
call fcn.0057fb10
jmp 0x537739
mov ecx, 0x59fb68
call fcn.0057fb10
jmp 0x537739
mov ecx, 0x59fb78
call fcn.0057fb10
jmp 0x537739
call fcn.004634e0
jmp 0x537739
call fcn.004634e0
jmp 0x537739
mov ecx, 1
mov edx, ebx
call fcn.0057f230
jmp 0x537739
mov dword [esi + 0x48], 0
lea ecx, [esi + 0x34]
mov edx, 0x59ffec
push 0x5a0174
lea eax, [esi + 0x48]
push eax
call fcn.005870c0
add esp, 8
jmp 0x537739
call fcn.004634e0
jmp 0x537739
mov ecx, 1
mov edx, edi
call fcn.0057f230
jmp 0x537739
mov dword [esi + 0xc8], 2
call fcn.004634e0
jmp 0x537739
mov dword [esi + 0xc8], 0
call fcn.004634e0
jmp 0x537739
mov ecx, 1
mov edx, edi
mov dword [esi + 0xc8], 0
call fcn.0057f230
jmp 0x537739
mov dword [esi + 0xc8], 3
call fcn.004634e0
ud2