Function at 0x4098f0
Capabilities:
Check if file exists

Disassembly:
push 0xffffffffffffffff
push 0x43fa30
mov eax, dword fs:[0]
push eax
sub esp, 0x14
push ebx
push ebp
push esi
push edi
mov eax, dword [0x454654]
xor eax, esp
push eax
lea eax, [esp + 0x28]
mov dword fs:[0], eax
lea eax, [esp + 0x18]
push eax
mov ecx, str.40651ff2ad0d11c58b8b225dbaa6339e06049d7e70c642efd746d242849725d15030f0f27152a6c4fbe1df9d7f8a51a768fdde10bea8529e90fcaa11a8c4b85c3d63b21d2326f943dfa6410ea15e346be778ec3a3d8b74e33c38d637df46cd8d5e4aa0d5b2b2c4b00a8ef35eae5b54131709564ba96352bf05bde4564ca62bb9b9426eefc0f387b403b5986c26fca8992d4874e92a8b0ac0fbd6640f0135b1bc66b2bba3571fc1819c3a7649c8934c305a9c859b086edc853d521d38dc4586bb28f095aa746c100966e493fa3c20e05ff8be3337005505f7a599a79db27541120be32b13057032d93ae4c7ef4018435968f767929d7da374e933cc51a8457503f842d963a65a715cdf2c06d178ebf7101a63f0e16f97af8daa698fd8b81b95f81c759d96d3a4e354e3318472ab879a057121a266ceed5f25173f3c2931e7723cf55b734425d047a878b644510e125aca842eeedc2a61f185b161084d2bde1e0b43e8c1a49b66406cb36dd52e6d641e76bacb37de71a51f6a0c28af6a4719926d9cbbbc55b55fa787f919adebc7c549ec06a8fe9fa3e03fc3731d499bcfad12e3727dab2549696d73cb02019f79c3aac0796cf50af9febe2d1e7785d79e4b9cfa3fa3988eee9f3f83f7dcaa957a98d7ee9ceb86a74060427fcb02019f79c3aac0d9e358ad0e247ba85c1e2aa4ed7ab29c311b3844e5d7aa6cdfbe90d43d8934e319ea49fcf781d3597a304447731ceaa88843500467028bc94a234eb27d1776d0335db2d7440c79c5498f824b0307f1f655b662e64b87261c720da8cc059979d30483248463175c68f396d006d0e2f2d61086329e3aed5eea32b53c4b7134e2cb140bf6a3c8afe399e5cb06e775fac3e8c42efcfb9d5b95ff07437ca0a4c8d0f5ee063bdc73565ba12374bc6c7455c2ba384c4f1261b21aa1f78a37a2369ad92f68e5a7805cde4603ea6c80cb74f77d491b95188fe50a188f8de7e53db915e260257c562bf99b91fd0483248463175c680fe0a671072ad5fc1529c6dbc182862f585163c4b5b7c0c9fd34e9dbb0fee4bc6e8d397c83f4a6306d1aedae0b6d9ba7d6a4933032e045d215c6eaaea9a887dd7fd8f2d6a66f81bf5ca245e8af68a53da77ac8356bf4f51603acada9912c414b4d5a9e1b9cd90191a4a404d3274bf265f7185c43bb020b4113785f7b78be4a5e54ff606f4974a2cf87273b91f5a710a37d05b344c290bef6ca7d29d979954b477e3359ef4be19fa68925947262f2733efe7a2924f94429feb4e81f2d88842b64eea7c12eae937f88b986f393f1013c184cd9c8d9aa54eaf8a19fbbbb0e55824f45654e877c788f20f0e42df0d5bc08aba474c23138b3bb24465688270f7fea05aff3b902b8b699d1b63838d76c7ba22584e3e6ea4c23820c072807b11aa94ed74e5c796a98102d9a6e113d4cfad695edcf6cc624bf7b95a2a6feb74f7f26133625d421ea8adb81e7021a17cf6268a92079809f366e115087f9ea3cb52f864adfa55ba24c8e61a37523b5ee7ace4ae662b9d84ff8d82121c364c9b671eadba0258a890f4c072904350a4cef0c625ef4696dfa89e1dcdd2e8a2b4020ee3a192fb2af14b40d42844472c7dae6e733f5cf1f332d62018493d4f79124eb8ab8f611b8c276790b95e6bb6f0c47642f2cb8e96025d34a97d03b4289faa6ca0f7b50562da9586473e46af20fb4e600552732240ec4bee1b0aec850cd9dc2fc7beff931fd25a47e9589b0ef1b6d0e12b6efc85ecfe0eca87c969e94bc112012a7afd57e7d34efa645efc5ed77262a9a97fac9ef7e52d420274e3674c74c7439bcb2ba9b9097da6f68f512c8043475e8f0c9a721ee6dff013b6f44a151c62b75de28a8d2162640d3447d24a6b595aa2696ea04c91c3e7838eb5b03b499ae67ca40ae05159ba6215906dee03afb97bff2eae914975f8c1bf586199a7667270c0f3316d9fe8b7cf10d515730e366e6eff6c1b992b3d43f120a3cf4555e5d3a00483434bdec2b8a58cb1551b61c496defb022cdc16de852f2bd94b768cb443b18907d58e58c7ecbdba4f2398207e1a0426650a94c764ff4696783f0783edbf842d963a65a715c538ca0318f8ba64fb4c91f4844bbb91cbbc1d622f647fd1ff1af18afb8ff3a126daf32c18ffef8f787953cdeb30c9c75f7bbc69892e87f72d985f8490e519bd40af6e48b57c154cd41daf013e51bad24693d08ca27748a30bae1f407e761f6c5c4290ffe9cefa2292c63aaddd2ed6e99f8d1729ad610fc5c7d146b0d328dc0bc03ee2d08ed36a8a381da16248f15f4674d0ac49a9a08df5c00f122223bf68081ae551942af5617e2dff2aff5dd1130531a9d4f3f1b96dadcb57c63651fc048cd48c3c465ff4261fd1d5a35015b1ad0110b72b3e80d1e7f521a5ca59d0fdc71ba0e457deda6ac0db96cb1ffa83a9c4cb813b3ad54420898ae6d5c8dc867250410c5a71615dd7ce39b45f2afa84b2035c52b4020ee3a192fb20d708a5fbdc89f837164793f4a173409e6eff6c1b992b3d418f54c37e35663967db5833be880285083189dfa0379426a41599b44712f8f4e905cb2eff12d48adc8e791a649aa10404c13ed25f3e64f7a462743087e899f9f1a5fa063878087164b26a4b31240ea5bf1816c3732b84277bdfe2c894e586091226d630bd7a14c4132149e849d1b9326b57c63651fc048cd743fa3c47d1804fc1d8304b311757990fa6891646d5cd7086c6c3c351310e7bf59d13f09b3836739a3333c94978c6c1d47d3518b207881a61c6b684b23446a8c4f9b934679b65b6013b888259a2c67a5650e0680a2b45c2bdee8d5fdcfe6492d4d888c2c4dc4c6952ac3b9ac62f1e8442aa8b809c1fc93d2ee8f7346f5f040a649cff3170907fef5
call fcn.00403530
xor ebx, ebx
mov dword [esp + 0x30], ebx
mov edx, dword [esp + 0x18]
lea ecx, [esp + 0x1c]
call fcn.00422350
lea esi, [esp + 0x18]
mov byte [esp + 0x30], 1
call fcn.004015c0
mov ebp, dword [sym.imp.SHLWAPI.dll_PathFileExistsW]
mov dword [esp + 0x24], ebx
lea ecx, [esp + 0x14]
push ecx
lea edx, [esp + 0x20]
push edx
lea edi, [esp + 0x2c]
call fcn.0040fea0
mov byte [esp + 0x30], 2
mov ecx, dword [esp + 0x14]
cmp dword [ecx - 0xc], ebx
je 0x409a34
mov eax, dword [0x45a98c]
mov edx, dword [eax + 0xc]
mov ecx, 0x45a98c
call edx
add eax, 0x10
mov dword [esp + 0x20], eax
mov ecx, dword [esp + 0x38]
mov byte [esp + 0x30], 3
mov eax, dword [esp + 0x14]
mov edx, dword [ecx]
push eax
push edx
push 0x44dc28
lea edi, [esp + 0x2c]
call fcn.004018c0
mov esi, dword [esp + 0x2c]
add esp, 0xc
push esi
call ebp
test eax, eax
je 0x4099c8
mov edi, dword [esp + 0x3c]
lea ebx, [esp + 0x14]
call fcn.004102b0
xor ebx, ebx
lea eax, [esi - 0x10]
mov byte [esp + 0x30], 2
mov edi, dword [eax]
cmp dword [eax + 4], ebx
je 0x409a14
cmp dword [eax + 0xc], ebx
lea ecx, [eax + 0xc]
jge 0x4099f2
cmp dword [esi - 8], ebx
jl 0x409b3b
xor eax, eax
mov dword [esi - 0xc], ebx
mov word [esi], ax
jmp 0x409a14
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x409a08
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov edx, dword [edi]
mov eax, dword [edx + 0xc]
mov ecx, edi
call eax
lea esi, [eax + 0x10]
lea eax, [esi - 0x10]
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x409a30
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov ecx, dword [esp + 0x14]
lea eax, [ecx - 0x10]
mov byte [esp + 0x30], 1
mov esi, dword [eax]
cmp dword [eax + 4], ebx
je 0x409a8c
cmp dword [eax + 0xc], ebx
lea edx, [eax + 0xc]
jge 0x409a66
cmp dword [ecx - 8], ebx
jl 0x409b3b
mov dword [ecx - 0xc], ebx
mov edx, dword [esp + 0x14]
xor ecx, ecx
mov word [edx], cx
mov ecx, dword [esp + 0x14]
jmp 0x409a8c
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x409a7c
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov edx, dword [esi]
mov eax, dword [edx + 0xc]
mov ecx, esi
call eax
lea ecx, [eax + 0x10]
mov dword [esp + 0x14], ecx
lea eax, [ecx - 0x10]
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x409aa8
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
cmp dword [esp + 0x24], ebx
jg 0x409951
mov eax, dword [esp + 0x3c]
mov ecx, dword [eax + 0x10]
sub ecx, dword [eax + 0xc]
xor edx, edx
sar ecx, 2
cmp edx, ecx
sbb edi, edi
lea esi, [esp + 0x1c]
neg edi
mov byte [esp + 0x30], bl
call fcn.004015c0
mov eax, dword [esp + 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x409af4
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
lea esi, [esp + 0x18]
mov dword [esp + 0x30], 0xffffffff
call fcn.004015c0
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 0x409b25
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, edi
mov ecx, dword [esp + 0x28]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x20
ret
push 0x80070057
call fcn.00401960
int3