Function at 0x571a20
Capabilities:
Write file on windows

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0xc0
mov edi, ecx
mov esi, dword [ebp + 0xc]
mov eax, dword [0x64a040]
xor eax, ebp
mov dword [esp + 0xb8], eax
pcmpeqd xmm0, xmm0
movdqa xmmword [esp + 0x90], xmm0
movdqa xmmword [esp + 0x80], xmm0
movdqa xmmword [esp + 0x70], xmm0
lea ebx, [esp + 0x50]
push 0x7f
push str.file_win.cc
push str.Write
push ebx
call fcn.0051dbb0
add esp, 0x10
lea ecx, [esp + 0x70]
push 0
push 0
call fcn.00536a30
mov dword [esp + 0xa4], 0xa
movzx eax, byte [0x64f42e]
test al, al
jne 0x571fea
mov ecx, 0xffffffff
test esi, esi
js 0x571afb
mov eax, dword [ebp + 0x14]
test eax, eax
js 0x571afb
mov ecx, dword [ebp + 8]
mov edx, dword [ebp + 0x10]
pxor xmm0, xmm0
movdqa xmmword [esp + 0x50], xmm0
mov dword [esp + 0x60], 0
mov dword [esp + 0x5c], esi
mov dword [esp + 0x58], ecx
mov dword [esp + 0xa8], 0xffffffff
lea ecx, [esp + 0xa8]
push ebx
push ecx
push eax
push edx
push dword [edi]
call dword [sym.imp.KERNEL32.dll_WriteFile]
test eax, eax
je 0x571fb8
mov ecx, dword [esp + 0xa8]
mov dword [esp + 0x1c], ecx
mov dword [esp + 0xa8], 0xa
movzx eax, byte [0x64f42e]
test al, al
jne 0x571fc2
call fcn.0057dc60
mov esi, dword [eax]
call fcn.0057dc60
mov dword [eax], 0
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov edi, eax
push 0
call dword [sym.imp.KERNEL32.dll_SetLastError]
mov ebx, dword [esp + 0x70]
test ebx, ebx
je 0x571bae
cmp dword [esp + 0x74], 0
jne 0x571bae
cmp byte [ebx + 0x11], 0
je 0x571bae
mov eax, dword [ebx + 0x20]
add eax, 0x50
mov dword [esp + 0xc], eax
push eax
call dword [sym.imp.KERNEL32.dll_TryAcquireSRWLockExclusive]
test al, al
je 0x571d52
xor eax, eax
mov dword [ebx + 0x1c], eax
mov dword [ebx + 0x18], eax
cmp byte [ebx + 0x2b], 0
jne 0x571b9e
cmp byte [ebx + 0x29], 0
mov eax, dword [ebx + 0x20]
jne 0x571d61
dec dword [eax + 0xb4]
cmp byte [ebx + 0x11], 0
je 0x57201d
cmp byte [ebx + 0x10], 0
je 0x571c4a
mov word [ebx + 0x29], 0
push dword [esp + 0xc]
call dword [sym.imp.KERNEL32.dll_ReleaseSRWLockExclusive]
push edi
call dword [sym.imp.KERNEL32.dll_SetLastError]
call fcn.0057dc60
mov dword [eax], esi
cmp byte [esp + 0x98], 0
je 0x571bd5
mov eax, dword [esp + 0x90]
test eax, eax
jne 0x571c62
mov eax, dword [esp + 0x78]
test eax, eax
je 0x571be3
mov ecx, dword [esp + 0x7c]
mov dword [eax], ecx
mov eax, dword [esp + 0x74]
mov ecx, eax
shr ecx, 0xe
mov edx, eax
shr edx, 0x13
mov edx, dword [edx*4 + 0x6527ec]
bt edx, ecx
jb 0x571f76
mov dword [esp + 0x74], 0
mov eax, dword [esp + 0x70]
mov ecx, eax
shr ecx, 0xe
mov edx, eax
shr edx, 0x13
mov edx, dword [edx*4 + 0x6527ec]
bt edx, ecx
jb 0x571c3f
mov ecx, dword [esp + 0xb8]
xor ecx, ebp
call fcn.005810d5
mov eax, dword [esp + 0x1c]
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret 0x10
push eax
call fcn.00506f30
add esp, 4
jmp 0x571c23
cmp byte [ebx + 0x2a], 0
mov eax, dword [ebx + 0x20]
jne 0x571f84
dec dword [eax + 0xb8]
jmp 0x571b9e
mov dword [esp + 0xc], eax
mov ecx, dword [fcn.0056d830]
cmp ecx, 0x56aca0
jne 0x571d38
xor eax, eax
mov dword [esp + 0x54], eax
mov dword [esp + 0x50], eax
lea eax, [esp + 0x50]
push eax
call dword [sym.imp.KERNEL32.dll_QueryPerformanceCounter]
mov edi, dword [esp + 0x50]
mov esi, dword [esp + 0x54]
mov eax, 0x7bd05af6
cmp eax, edi
mov eax, 0x863
sbb eax, esi
jl 0x572041
mov ecx, 0xf4240
mov eax, edi
mul ecx
imul ecx, esi, 0xf4240
add ecx, edx
push dword [0x64f6a4]
push dword [0x64f6a0]
push ecx
push eax
call fcn.005a13d0
mov ecx, edx
mov dword [esp + 0xa8], eax
mov dword [esp + 0xac], ecx
mov edx, dword [esp + 0x88]
mov esi, dword [esp + 0x8c]
mov dword [esp + 4], eax
sub eax, edx
mov dword [esp + 8], ecx
sbb ecx, esi
seto bl
mov edi, ecx
sar edi, 0x1f
test bl, bl
cmovne eax, edi
add edi, 0x80000000
test bl, bl
cmove edi, ecx
cmp eax, 0xf4240
mov ecx, edi
sbb ecx, 0
jge 0x571d96
mov edi, dword [esp + 0x90]
test edi, edi
je 0x571bd5
lock dec dword [edi]
jne 0x571bd5
jmp 0x57202c
call dword [0x6445dc]
lea esi, [esp + 0xa8]
push esi
call ecx
add esp, 4
mov eax, dword [esi]
mov ecx, dword [esi + 4]
jmp 0x571cdd
push dword [esp + 0xc]
call dword [sym.imp.KERNEL32.dll_AcquireSRWLockExclusive]
jmp 0x571b69
mov ecx, dword [eax + 0x5c]
mov edx, dword [eax + 0xa4]
dec edx
mov dword [eax + 0xa4], edx
cmp ecx, dword [eax + 0x60]
je 0x571d7e
cmp dword [eax + 0xac], edx
jae 0x571d89
mov word [eax + 0x78], 0
jmp 0x571b8a
movzx ecx, word [ecx + 8]
mov word [eax + 0x78], cx
jmp 0x571b8a
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], eax
mov dword [esp + 0x10], esi
xor eax, eax
dec eax
mov ebx, 0x3938700
mov esi, dword [esp + 0xc]
add ebx, dword [esi + 0xf8]
mov ecx, dword [esi + 0xfc]
adc ecx, 0
mov edx, 0x7fffffff
cmovno edx, ecx
cmovo ebx, eax
mov eax, dword [esp + 4]
cmp eax, ebx
mov ebx, dword [esp + 8]
mov ecx, ebx
sbb ecx, edx
jge 0x57212a
mov ecx, dword [esi + 0xf8]
mov eax, dword [esi + 0xfc]
mov esi, dword [esp + 0x18]
mov edx, esi
mov dword [esp + 8], ecx
sub edx, ecx
mov ebx, dword [esp + 0x10]
mov dword [esp + 4], eax
sbb ebx, eax
seto cl
mov eax, ebx
sar eax, 0x1f
test cl, cl
cmovne edx, eax
add eax, 0x80000000
test cl, cl
cmove eax, ebx
mov ecx, edx
add ecx, 1
mov ebx, eax
adc ebx, 0x80000000
cmp ecx, 2
sbb ebx, 0
jb 0x57210a
movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
movq qword [esp + 0x48], xmm0
fild qword [esp + 0x48]
fstp qword [esp + 0x40]
movsd xmm0, qword [esp + 0x40]
mov esi, 0x80000000
divsd xmm0, qword [0x634a90]
sub esp, 8
movsd qword [esp], xmm0
call fcn.005aa8b0
add esp, 8
fstp qword [esp + 0x38]
movsd xmm0, qword [esp + 0x38]
movsd xmm1, qword [0x6350b0]
ucomisd xmm1, xmm0
jb 0x5720dc
maxsd xmm0, qword [0x6350b8]
cvttsd2si ebx, xmm0
mov eax, dword [esp + 0x14]
movd xmm0, eax
xor ecx, ecx
inc ecx
add ecx, eax
adc esi, edi
movd xmm1, edi
cmp ecx, 2
sbb esi, 0
punpckldq xmm0, xmm1
movq qword [esp + 0x30], xmm0
fild qword [esp + 0x30]
fstp qword [esp + 0x28]
jae 0x571eca
movsd xmm0, qword [0x6350c0]
jmp 0x571ed8
movsd xmm0, qword [esp + 0x28]
divsd xmm0, qword [0x634a90]
sub esp, 8
movsd qword [esp], xmm0
call fcn.005aa9ad
add esp, 8
fstp qword [esp + 0x20]
movsd xmm0, qword [esp + 0x20]
movsd xmm1, qword [0x6350b0]
ucomisd xmm1, xmm0
jb 0x5720f3
maxsd xmm0, qword [0x6350b8]
cvttsd2si edi, xmm0
add edi, ebx
cmp edi, 0x3c
mov esi, 0x3c
cmovl esi, edi
mov eax, dword [esp + 0xc]
add eax, 4
mov dword [esp + 4], eax
push eax
call dword [sym.imp.KERNEL32.dll_TryAcquireSRWLockExclusive]
test al, al
je 0x5720cd
cmp ebx, esi
mov eax, dword [esp + 0xc]
jge 0x571f48
inc dword [eax + ebx*4 + 8]
inc ebx
cmp esi, ebx
jne 0x571f3f
push dword [esp + 4]
call dword [sym.imp.KERNEL32.dll_ReleaseSRWLockExclusive]
cmp edi, 0x3d
jl 0x571d1b
mov eax, dword [esp + 0xc]
mov eax, dword [eax + 0x100]
sub edi, esi
xor ebx, ebx
mov dword [esp + 0xc], eax
test eax, eax
jne 0x571f10
jmp 0x571d1b
push eax
call fcn.00506f30
add esp, 4
jmp 0x571c01
dec dword [eax + 0xa8]
mov ecx, dword [eax + 0x5c]
cmp ecx, dword [eax + 0x60]
je 0x571fa0
mov edx, dword [eax + 0xac]
cmp edx, dword [eax + 0xa4]
jae 0x571fab
mov word [eax + 0x78], 0
jmp 0x571b9e
movzx ecx, word [ecx + 8]
mov word [eax + 0x78], cx
jmp 0x571b9e
mov ecx, 0xffffffff
jmp 0x571afb
movzx eax, al
mov dword [esp + 0x50], 0
lea ecx, [esp + 0xa8]
push 2
lea edx, [esp + 0x54]
push edx
push ecx
push eax
call fcn.005beed0
add esp, 0x10
jmp 0x571b19
movzx ecx, al
lea eax, [esp + 0xa8]
mov dword [eax], ebx
lea ebx, [esp + 0xb4]
mov dword [ebx], str.ScopedBlockingCall
lea edx, [esp + 0xa4]
push eax
push ebx
lea ebx, [esp + 0x58]
call fcn.005da0b0
add esp, 8
jmp 0x571a9e
push str....._third_partylibc_srcincludeoptional:801:_assertion_this__has_value___failed:_optional_operator_called_on_a_disengaged_value_n
push 0x62a183
call fcn.005aacb0
mov ecx, edi
call fcn.00503060
push edi
call fcn.0057dc2b
add esp, 4
jmp 0x571bd5
mov ebx, dword [0x64f6a0]
mov dword [esp + 0x18], ebx
mov eax, dword [0x64f6a4]
mov dword [esp + 4], eax
push eax
push ebx
push esi
push edi
call fcn.005a13d0
mov dword [esp + 8], eax
mov ecx, edx
mov eax, dword [esp + 8]
mul ebx
mov dword [esp + 0x14], eax
mov eax, dword [esp + 8]
mov ebx, eax
imul ebx, dword [esp + 4]
add edx, ebx
imul ebx, ecx, 0xf4240
mov dword [esp + 0x10], ebx
mov ebx, dword [esp + 0x18]
imul ecx, ebx
add ecx, edx
sub edi, dword [esp + 0x14]
sbb esi, ecx
mov ecx, 0xf4240
mul ecx
mov dword [esp + 8], eax
add edx, dword [esp + 0x10]
mov dword [esp + 0x10], edx
mov eax, edi
mul ecx
imul ecx, esi, 0xf4240
add edx, ecx
push dword [esp + 4]
push ebx
push edx
push eax
call fcn.005a13d0
mov ecx, edx
add eax, dword [esp + 8]
adc ecx, dword [esp + 0x10]
jmp 0x571ccf
push dword [esp + 4]
call dword [sym.imp.KERNEL32.dll_AcquireSRWLockExclusive]
jmp 0x571f37
xor eax, eax
ucomisd xmm0, qword [0x6350b8]
mov ebx, 0x7fffffff
cmovb ebx, eax
jmp 0x571e93
xor eax, eax
ucomisd xmm0, qword [0x6350b8]
mov edi, 0x7fffffff
cmovb edi, eax
jmp 0x571f10
cmp esi, dword [esp + 8]
mov eax, dword [esp + 0x10]
sbb eax, dword [esp + 4]
setl al
movzx eax, al
movsd xmm0, qword [eax*8 + 0x6350a0]
jmp 0x571e4e
mov dword [esp + 0x50], eax
mov dword [esp + 0x54], ebx
sub esp, 0xc
movq xmm0, qword [esp + 0x5c]
movq qword [esp + 4], xmm0
lea ebx, [esp + 0xc0]
mov dword [esp], ebx
call fcn.00502f80
add esp, 0xc
mov ebx, dword [ebx]
test ebx, ebx
je 0x571ddc
lock dec dword [ebx]
jne 0x571ddc
mov ecx, ebx
call fcn.00503060
push ebx
call fcn.0057dc2b
add esp, 4
jmp 0x571ddc