Function at 0x40c308
Capabilities:
Compute adler32 checksum
Resolve function by parsing pe exports

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0xa0
mov ebx, dword [esp + 0xc8]
mov edi, dword [esp + 0xc0]
mov dword [esp + 0xc], edx
xor eax, eax
and ebx, 4
mov esi, edi
sub esi, 1
mov edx, ebx
cmovb esi, eax
neg edx
mov edx, 0
sbb edx, edx
cmp dword [esp + 0xc4], edi
call 0x40c348
pop edi
mov dword [esp + 0x68], edi
ja 0x40db17
or edx, esi
lea esi, [edx + 1]
mov dword [esp + 0x40], edx
mov edx, esi
and edx, dword [esp + 0x40]
jne 0x40db17
mov dword [esp + 0x2c], ecx
mov ecx, dword [esp + 0xc]
mov dword [esp + 0x9c], esi
mov dword [esp + 0x6c], ebx
mov ebp, dword [esp + 0xb8]
mov eax, dword [ecx + 0x2914]
mov ebx, dword [ecx + 0x28e0]
mov edx, dword [ecx + 0x28fc]
mov esi, dword [ecx + 0x2900]
mov edi, dword [ecx + 0x2904]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0xc8]
mov dword [esp + 0x18], ebx
mov dword [esp + 0x1c], edx
mov dword [esp + 0x20], esi
mov dword [esp + 0x24], edi
mov esi, 0x102
lea ebx, [ecx + 0x291c]
mov dword [esp + 0x3c], ebx
lea ebx, [ecx + 0x1a20]
mov dword [esp + 0x44], ebx
lea ebx, [ecx + 0xd10]
mov dword [esp + 0x64], ebx
test al, 1
sete dl
xor edi, edi
inc edi
test al, 2
mov eax, 0xfc02
cmove esi, eax
mov eax, 0xfc
cmovne eax, edi
mov edi, dword [esp + 0xb4]
add dl, dl
mov dword [esp + 0x30], esi
and esi, 0xfd00
mov dword [esp + 0x60], eax
or dl, 1
mov dword [esp + 0x98], esi
lea esi, [ecx + 0xc80]
mov byte [esp + 0x4f], dl
mov dl, byte [ecx + 0x2ae5]
mov dword [esp + 0x48], esi
lea esi, [ecx + 0x27c0]
mov dword [esp + 0x94], esi
lea esi, [ecx + 0xd80]
lea eax, [edi + ebp]
mov ebp, dword [esp + 0xc4]
mov dword [esp + 0x70], esi
mov dword [esp], eax
mov dword [esp + 4], ebp
mov ebp, ecx
cmp dl, 0x18
mov ecx, edx
ja 0x40e1a2
movzx eax, cl
mov ebx, dword [esp]
mov eax, dword [eax*4 + 0x40e3fc]
add eax, dword [esp + 0x68]
jmp eax
mov byte [ecx + 4], 0xfd
mov dword [ecx], eax
mov dword [ecx + 8], eax
jmp 0x40e114
mov eax, dword [esp + 0xb8]
mov edx, dword [esp + 0x18]
mov dword [esp + 8], ecx
sub eax, ebx
mov ecx, edx
add eax, edi
shr ecx, 3
cmp ecx, eax
cmovae ecx, eax
lea eax, [ecx*8]
mov dword [esp + 0x48], ecx
mov ecx, dword [esp + 8]
sub edx, eax
mov dword [esp + 0x18], edx
jmp 0x40dc47
mov byte [ebp + 0x2ae5], cl
mov ecx, dword [esp + 0x18]
xor eax, eax
mov edx, dword [esp + 0x24]
dec eax
shl eax, cl
mov dword [ebp + 0x28e0], ecx
mov ecx, dword [esp + 0x1c]
not eax
and eax, dword [esp + 0x14]
mov dword [ebp + 0x28fc], ecx
mov ecx, dword [esp + 0x20]
mov dword [ebp + 0x2900], ecx
mov dword [ebp + 0x2904], edx
mov dword [ebp + 0x2914], eax
mov eax, dword [esp + 0xc8]
test al, 0x40
jne 0x40e0ea
and eax, 9
je 0x40e0ea
mov eax, dword [esp + 0x10]
test ah, ah
js 0x40e0ea
mov eax, dword [esp + 4]
mov ecx, dword [esp + 0xc4]
mov edx, eax
sub edx, ecx
mov dword [esp + 0x44], edx
jb 0x40e380
mov edx, dword [esp + 0xc0]
cmp eax, edx
ja 0x40e389
mov ebx, dword [esp + 0x44]
mov edx, 0x5e6ea9af
mov esi, dword [esp + 0xbc]
mov dword [esp + 8], edi
mov edi, dword [ebp + 0x28f8]
xorps xmm0, xmm0
movups xmmword [esp + 0x84], xmm0
movups xmmword [esp + 0x74], xmm0
and ebx, 0xfffffffc
add esi, ecx
mov ecx, edi
mov eax, ebx
shr ecx, 0x10
mov dword [esp + 0x64], esi
mov dword [esp + 0x70], ebx
mul edx
mov eax, ebx
mov dword [esp + 4], ecx
shr edx, 0xd
imul edx, edx, 0x56c0
sub eax, edx
mov dword [esp + 0x6c], edx
mov dword [esp + 0x3c], eax
mov eax, 0x56c0
cmp edx, eax
movzx eax, di
mov dword [esp + 0x34], eax
jb 0x40de6d
imul eax, eax, 0x56c0
lea edi, [esp + 0x50]
mov dword [esp + 0x30], esi
mov dword [esp + 0x28], edx
mov dword [esp + 0x68], eax
mov eax, dword [esp + 0x30]
mov ebp, 0xffffa940
add eax, 0x56c0
mov dword [esp + 0x40], eax
mov ebx, dword [esp + 0x30]
movzx eax, byte [ebx + ebp + 0x56c0]
movzx ecx, byte [ebx + ebp + 0x56c1]
movzx edx, byte [ebx + ebp + 0x56c2]
movzx ebx, byte [ebx + ebp + 0x56c3]
mov dword [esp + 0x50], eax
mov dword [esp + 0x54], ecx
mov dword [esp + 0x58], edx
lea ecx, [esp + 0x84]
mov edx, edi
mov dword [esp + 0x5c], ebx
call fcn.00403777
movsd xmm0, qword [esp + 0x84]
movsd xmm1, qword [esp + 0x8c]
lea ecx, [esp + 0x74]
mov edx, edi
movsd qword [esp + 0x58], xmm1
movsd qword [esp + 0x50], xmm0
call fcn.00403777
add ebp, 4
jne 0x40dd67
add dword [esp + 0x28], 0xffffa940
mov esi, 0xfffffff0
mov ebp, 0x80078071
mov ecx, dword [esp + esi + 0x94]
mov eax, ecx
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
mov dword [esp + esi + 0x94], ecx
add esi, 4
jne 0x40dde9
mov esi, 0xfffffff0
mov ecx, dword [esp + esi + 0x84]
mov edx, 0x80078071
mov eax, ecx
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
mov dword [esp + esi + 0x84], ecx
add esi, 4
jne 0x40de10
mov ecx, dword [esp + 4]
mov edx, 0x80078071
add ecx, dword [esp + 0x68]
mov eax, ecx
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
cmp dword [esp + 0x28], 0x56c0
mov dword [esp + 4], ecx
mov ecx, dword [esp + 0x40]
mov dword [esp + 0x30], ecx
jae 0x40dd55
test dword [esp + 0x3c], 0x7ffc
mov ebp, dword [esp + 0x6c]
je 0x40deee
mov edi, dword [esp + 0x3c]
add ebp, dword [esp + 0x64]
lea ebx, [esp + 0x50]
and edi, 0x7ffc
neg edi
movzx eax, byte [ebp]
movzx ecx, byte [ebp + 1]
movzx edx, byte [ebp + 2]
movzx esi, byte [ebp + 3]
mov dword [esp + 0x50], eax
mov dword [esp + 0x54], ecx
mov dword [esp + 0x58], edx
lea ecx, [esp + 0x84]
mov edx, ebx
mov dword [esp + 0x5c], esi
call fcn.00403777
movsd xmm0, qword [esp + 0x84]
movsd xmm1, qword [esp + 0x8c]
lea ecx, [esp + 0x74]
mov edx, ebx
movsd qword [esp + 0x58], xmm1
movsd qword [esp + 0x50], xmm0
call fcn.00403777
add ebp, 4
add edi, 4
jne 0x40de8f
mov ebp, dword [esp + 0x64]
mov eax, dword [esp + 0x3c]
mov esi, dword [esp + 0x44]
mov edi, 0xfffffff0
mov ebx, 0x80078071
imul eax, dword [esp + 0x34]
add ebp, dword [esp + 0x70]
and esi, 3
mov dword [esp + 0x3c], eax
mov ecx, dword [esp + edi + 0x94]
mov eax, ecx
mul ebx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
mov dword [esp + edi + 0x94], ecx
add edi, 4
jne 0x40df14
mov edi, 0xfffffff0
mov ebx, 0x80078071
mov ecx, dword [esp + edi + 0x84]
mov eax, ecx
mul ebx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
mov dword [esp + edi + 0x84], ecx
add edi, 4
jne 0x40df40
mov edi, dword [esp + 4]
mov ecx, 0x80078071
mov ebx, dword [esp]
add edi, dword [esp + 0x3c]
mov eax, edi
mul ecx
shr edx, 0xf
imul eax, edx, 0xfff1
sub edi, eax
mov eax, 0xfffffff0
mov edx, edi
mov ecx, dword [esp + eax + 0x84]
cmp ecx, 0x3fffffff
ja 0x40e149
shl ecx, 2
mov dword [esp + eax + 0x84], ecx
add eax, 4
jne 0x40df88
mov ecx, dword [esp + 0x88]
cmp ecx, 0xfff1
ja 0x40e258
mov eax, 0xfff1
sub eax, ecx
add eax, dword [esp + 0x78]
jb 0x40e26c
mov dword [esp + 0x78], eax
mov eax, dword [esp + 0x8c]
cmp eax, 0xfff1
ja 0x40e280
add eax, eax
mov ecx, 0x1ffe2
sub ecx, eax
add ecx, dword [esp + 0x7c]
jb 0x40e294
mov eax, dword [esp + 0x90]
mov dword [esp + 0x7c], ecx
cmp eax, 0xfff1
ja 0x40e2a8
mov ecx, 0xfff1
sub ecx, eax
lea eax, [ecx + ecx*2]
add eax, dword [esp + 0x80]
jb 0x40e2bc
mov dword [esp + 0x80], eax
mov eax, dword [esp + 0x34]
mov edi, 0xfffffff0
mov ecx, edx
add eax, dword [esp + edi + 0x94]
jb 0x40e15d
add edi, 4
jne 0x40e036
mov edi, dword [esp + 0xc]
mov edx, 0xfffffff0
add ecx, dword [esp + edx + 0x84]
jb 0x40e16e
add edx, 4
jne 0x40e051
test esi, esi
je 0x40e081
mov edx, eax
movzx eax, byte [ebp]
add eax, edx
jb 0x40e1be
add ecx, eax
jb 0x40e1cf
inc ebp
dec esi
jne 0x40e067
mov esi, ecx
mov ecx, 0x80078071
mov ebp, eax
mul ecx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ebp, eax
mov eax, esi
mul ecx
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, dword [esp + 0xc8]
shl esi, 0x10
or esi, ebp
mov dword [edi + 0x28f8], esi
test al, 1
je 0x40e11f
mov eax, dword [esp + 0x10]
mov ebp, esi
mov esi, dword [esp + 0x2c]
mov ecx, dword [esp + 0x48]
mov edx, dword [esp + 0x44]
test ah, ah
jne 0x40e0e4
cmp ebp, dword [edi + 0x28ec]
sete ah
add ah, ah
add ah, 0xfe
mov dword [esp + 0x10], eax
mov edi, dword [esp + 8]
jmp 0x40e0fb
mov eax, dword [esp + 4]
mov ecx, dword [esp + 0x48]
sub eax, dword [esp + 0xc4]
mov edx, eax
mov eax, dword [esp + 0xb8]
add ecx, ebx
sub eax, ecx
mov ecx, dword [esp + 0x10]
add eax, edi
mov byte [esi + 4], ch
mov dword [esi], eax
mov dword [esi + 8], edx
add esp, 0xa0
pop esi
pop edi
pop ebx
pop ebp
ret
mov esi, dword [esp + 0x2c]
mov edi, dword [esp + 8]
mov ecx, dword [esp + 0x48]
mov edx, dword [esp + 0x44]
jmp 0x40e0fb
mov ecx, 0x43a7e0
mov edx, 0x21
push 0x43a7c8
jmp 0x40e1de
mov ecx, str.attempt_to_add_with_overflowl
mov edx, 0x1c
push 0x43a6fc
jmp 0x40e1de
mov ecx, str.attempt_to_add_with_overflowl
mov edx, 0x1c
push 0x43a70c
jmp 0x40e1de
mov ah, 0xff
jmp 0x40e229
mov ecx, str.attempt_to_add_with_overflowl
mov edx, 0x1c
push 0x43a71c
jmp 0x40e1de
mov ecx, str.attempt_to_add_with_overflowl
mov edx, 0x1c
push 0x43a72c
call fcn.00438c30
add esp, 4
ud2
mov dword [esp + 0x10], eax
mov esi, dword [esp + 0x2c]
mov ebx, dword [esp]
jmp 0x40dbda
mov ecx, 0x43a650
mov edx, 0x21
push 0x43a69c
jmp 0x40e1de
mov ecx, str.attempt_to_add_with_overflowl
mov edx, 0x1c
push 0x43a6ac
jmp 0x40e1de
mov ecx, 0x43a650
mov edx, 0x21
push 0x43a6bc
jmp 0x40e1de
mov ecx, str.attempt_to_add_with_overflowl
mov edx, 0x1c
push 0x43a6cc
jmp 0x40e1de
mov ecx, 0x43a650
mov edx, 0x21
push 0x43a6dc
jmp 0x40e1de
mov ecx, str.attempt_to_add_with_overflowl
mov edx, 0x1c
push 0x43a6ec
jmp 0x40e1de
mov edx, eax
push 0x43cd64
jmp 0x40e3da
mov ecx, eax
push 0x43cd64
jmp 0x40e3f0
call fcn.00438dd0
jmp 0x40e1e3
call fcn.00438bc0
jmp 0x40e1e3