Function at 0x577ae0
Capabilities:
Encode data using xor

Disassembly:
test dword [0x87ed4c], 0xfffff000
jne 0x577b10
test dword [0x87ed4c], 0xffffffff
jne 0x578580
call fcn.007663a0
jmp fcn.00577ae0
push edi
push esi
push ebp
push ebx
sub esp, 0x6c
mov edi, eax
mov ebp, dword [edi + 0xc]
mov eax, dword [edi]
mov dword [esp + 0x64], ecx
mov dword [esp + 0x60], edx
lea edx, [esp + 0x5c]
mov dword [esp + 0x5c], 0xffffffff
call fcn.0049e370
mov eax, dword [esp + 0x5c]
mov esi, dword [ebp + 0x40]
movzx ebx, byte [esi + 0x24]
movzx edx, byte [esi + 0x25]
movzx ecx, byte [esi + 0x26]
mov dword [esp + 0x68], eax
shl ebx, 0x18
shl edx, 0x10
or ebx, edx
movzx edx, byte [esi + 0x27]
shl ecx, 8
or ebx, ecx
or ebx, edx
cmp ebx, eax
jae 0x578486
test ebx, ebx
je 0x5782ae
movzx eax, byte [esp + 0x90]
test eax, eax
je 0x577c5d
mov eax, dword [esp + 0x68]
cmp eax, dword [esp + 0x8c]
jb 0x577c5d
movzx ecx, word [edi + 0x16]
mov esi, dword [esp + 0x8c]
mov dword [esp + 0x10], ebx
mov eax, 0x66666667
imul ecx
sar ecx, 0x1f
lea eax, [esi - 2]
mov ebx, edx
sar ebx, 1
sub ebx, ecx
movzx ecx, word [edi + 0x14]
inc ebx
xor edx, edx
mov dword [esp + 0xc], 0
div ebx
mov esi, eax
mov eax, dword [0x8339b0]
imul esi, ebx
lea ebx, [esi + 2]
cdq
idiv ecx
add esi, 3
lea ecx, [esp + 0x4c]
inc eax
cmp ebx, eax
mov eax, dword [edi]
cmove ebx, esi
mov dword [esp + 0x14], ebx
mov edx, ebx
mov ebx, dword [esp + 0x10]
call fcn.004a43e0
test eax, eax
jne 0x577c35
mov eax, dword [esp + 0x4c]
mov esi, dword [esp + 0x14]
neg esi
add esi, dword [esp + 0x8c]
lea ecx, [esi + esi*4]
mov edx, dword [eax]
movzx esi, byte [edx + ecx - 5]
mov edx, dword [eax + 0x10]
mov dword [esp + 0x10], edx
call fcn.0057a950
mov eax, dword [esp + 0x10]
call fcn.0057aac0
test esi, esi
jle 0x577c30
cmp esi, 5
jle 0x577c3d
mov eax, 0xb
add esp, 0x6c
pop ebx
pop ebp
pop esi
pop edi
ret
mov ecx, dword [esp + 0x8c]
mov edx, 1
xor eax, eax
cmp esi, 2
mov esi, dword [esp + 0x64]
cmovne edx, eax
mov dword [esp + 0x58], edx
mov dword [esi], ecx
jmp 0x577c65
mov dword [esp + 0x58], 0
mov eax, dword [ebp + 0x44]
call fcn.00579000
test eax, eax
je 0x577c79
add esp, 0x6c
pop ebx
pop ebp
pop esi
pop edi
ret
mov esi, dword [ebp + 0x40]
dec ebx
mov eax, ebx
shr eax, 0x18
mov byte [esi + 0x24], al
mov edx, ebx
shr edx, 0x10
mov byte [esi + 0x25], dl
mov ecx, ebx
shr ecx, 8
mov byte [esi + 0x26], cl
mov byte [esi + 0x27], bl
xor esi, esi
mov dword [esp + 0x40], esi
mov dword [esp + 0x44], ebp
mov dword [esp + 0x50], edi
mov ebx, esi
test esi, esi
je 0x578549
mov ebp, dword [esi + 0x40]
movzx edx, byte [ebp]
movzx eax, byte [ebp + 1]
movzx ecx, byte [ebp + 2]
movzx edi, byte [ebp + 3]
shl edx, 0x18
shl eax, 0x10
or edx, eax
shl ecx, 8
or edx, ecx
or edx, edi
cmp edx, dword [esp + 0x68]
jbe 0x577d04
mov edi, 0xb
test ebx, ebx
je 0x578448
mov eax, dword [ebx + 0x44]
test eax, eax
je 0x578448
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
jmp 0x578448
mov ebp, dword [esp + 0x50]
mov eax, dword [ebp]
mov dword [esp + 0xc], 0
lea ecx, [esp + 0x34]
mov dword [esp + 0x38], edx
call fcn.004a43e0
mov edx, dword [esp + 0x38]
mov dword [esp + 0x54], eax
cmp dword [esp + 0x54], 0
jne 0x577d61
mov ebp, dword [esp + 0x34]
mov edi, dword [esp + 0x50]
mov esi, dword [ebp + 4]
mov ecx, dword [ebp]
mov dword [esi + 0x40], ecx
mov eax, 0x64
xor ecx, ecx
cmp edx, 1
mov dword [esi + 0x44], ebp
cmovne eax, ecx
mov dword [esi + 0x3c], edi
mov dword [esi + 0x48], edx
mov byte [esi + 5], al
mov dword [esp + 0x54], 0
cmp dword [esp + 0x54], 0
jne 0x578540
mov ecx, dword [esi + 0x40]
movzx ebp, byte [ecx + 4]
movzx eax, byte [ecx + 5]
movzx edi, byte [ecx + 6]
shl ebp, 0x18
shl eax, 0x10
or ebp, eax
movzx eax, byte [ecx + 7]
shl edi, 8
or ebp, edi
or ebp, eax
jne 0x577de9
mov eax, dword [esp + 0x58]
mov dword [esp + 0x48], eax
test eax, eax
jne 0x577de9
mov eax, dword [esi + 0x44]
mov dword [esp + 0x38], edx
call fcn.00579000
mov edx, dword [esp + 0x38]
mov dword [esp + 0x54], eax
cmp dword [esp + 0x54], 0
jne 0x578493
mov eax, dword [esp + 0x64]
mov ecx, dword [esi + 0x40]
mov dword [eax], edx
mov edx, dword [esp + 0x44]
mov edi, dword [edx + 0x40]
mov ebp, dword [ecx]
mov dword [edi + 0x20], ebp
mov eax, dword [esp + 0x60]
mov dword [eax], esi
xor esi, esi
test ebx, ebx
jne 0x578288
mov edi, dword [esp + 0x54]
jmp 0x578448
mov eax, dword [esp + 0x50]
movzx edi, word [eax + 0x16]
shr edi, 2
add edi, 0xfffffffe
cmp ebp, edi
ja 0x578523
mov eax, dword [esp + 0x58]
mov dword [esp + 0x48], eax
test eax, eax
je 0x577fda
cmp edx, dword [esp + 0x8c]
jne 0x577fda
mov edx, dword [esp + 0x60]
mov eax, dword [esi + 0x44]
mov dword [edx], esi
call fcn.00579000
mov dword [esp + 0x54], eax
cmp dword [esp + 0x54], 0
jne 0x578493
test ebp, ebp
jne 0x577e54
test ebx, ebx
je 0x5784b4
mov edx, dword [ebx + 0x40]
mov esi, dword [esi + 0x40]
mov eax, dword [esi]
mov dword [edx], eax
jmp 0x577fc2
mov edi, dword [esi + 0x40]
movzx eax, byte [edi + 8]
movzx edx, byte [edi + 9]
movzx ecx, byte [edi + 0xa]
shl eax, 0x18
shl edx, 0x10
or eax, edx
movzx edx, byte [edi + 0xb]
shl ecx, 8
or eax, ecx
or eax, edx
cmp eax, dword [esp + 0x68]
mov dword [esp + 0x18], eax
ja 0x578523
mov edi, dword [esp + 0x50]
mov edx, eax
mov eax, dword [edi]
mov dword [esp + 0xc], 0
lea ecx, [esp + 0x14]
call fcn.004a43e0
mov dword [esp + 0x54], eax
cmp dword [esp + 0x54], 0
jne 0x577edf
mov edx, dword [esp + 0x14]
mov eax, edi
mov ecx, dword [edx + 4]
mov edi, dword [edx]
mov dword [esp + 0x40], ecx
mov dword [ecx + 0x40], edi
xor edi, edi
mov dword [ecx + 0x44], edx
mov edx, 0x64
mov dword [ecx + 0x3c], eax
mov eax, dword [esp + 0x18]
cmp eax, 1
cmovne edx, edi
mov dword [ecx + 0x48], eax
mov byte [ecx + 5], dl
mov dword [esp + 0x54], 0
cmp dword [esp + 0x54], 0
jne 0x57851a
mov edx, dword [esp + 0x40]
mov eax, dword [edx + 0x44]
call fcn.00579000
mov dword [esp + 0x54], eax
cmp dword [esp + 0x54], 0
jne 0x5784f5
mov eax, dword [esp + 0x40]
mov edi, dword [eax + 0x40]
mov edx, dword [esi + 0x40]
mov ecx, dword [edx]
mov dword [edi], ecx
mov ecx, eax
lea eax, [ebp - 1]
mov edx, dword [ecx + 0x40]
mov dword [esp + 0x10], eax
shr eax, 0x18
lea ebp, [ebp*4 - 4]
mov byte [edx + 4], al
mov eax, dword [esp + 0x10]
shr eax, 0x10
mov byte [edx + 5], al
mov eax, dword [esp + 0x10]
shr eax, 8
mov byte [edx + 6], al
mov eax, dword [esp + 0x10]
mov byte [edx + 7], al
mov eax, dword [ecx + 0x40]
add eax, 8
mov edi, dword [esi + 0x40]
add edi, 0xc
push ebp
push edi
push eax
call fcn.007666b0
add esp, 0xc
cmp dword [esp + 0x40], 0
je 0x577f7f
mov eax, dword [esp + 0x40]
mov eax, dword [eax + 0x44]
test eax, eax
je 0x577f7f
mov edi, dword [eax + 0x10]
call fcn.0057a950
mov eax, edi
call fcn.0057aac0
test ebx, ebx
je 0x5784c8
mov eax, dword [ebx + 0x44]
call fcn.00579000
mov dword [esp + 0x54], eax
cmp dword [esp + 0x54], 0
jne 0x578493
mov ebp, dword [ebx + 0x40]
mov eax, dword [esp + 0x18]
mov edx, eax
shr edx, 0x18
mov byte [ebp], dl
mov ecx, eax
shr ecx, 0x10
mov edx, eax
mov byte [ebp + 1], cl
shr edx, 8
test ebx, ebx
mov byte [ebp + 2], dl
mov byte [ebp + 3], al
mov esi, 0
mov dword [esp + 0x58], esi
mov dword [esp + 0x48], esi
jne 0x578288
jmp 0x57829e
test ebp, ebp
jne 0x577feb
test ebx, ebx
jne 0x578288
jmp 0x57829e
mov eax, dword [esi + 0x44]
mov dword [esp + 0x3c], ecx
call fcn.00579000
mov ecx, dword [esp + 0x3c]
mov dword [esp + 0x54], eax
cmp dword [esp + 0x54], 0
jne 0x578493
cmp dword [esp + 0x8c], 0
ja 0x57801b
xor edi, edi
jmp 0x5780ac
movzx eax, byte [ecx + 8]
movzx edi, byte [ecx + 9]
movzx edx, byte [ecx + 0xa]
shl eax, 0x18
shl edi, 0x10
or eax, edi
movzx edi, byte [ecx + 0xb]
shl edx, 8
or eax, edx
or eax, edi
sub eax, dword [esp + 0x8c]
cdq
xor edi, edi
xor eax, edx
sub eax, edx
mov dword [esp + 0x24], eax
cmp ebp, 1
jbe 0x5780ac
mov eax, 1
mov dword [esp + 0x1c], ebx
mov ebx, dword [esp + 0x24]
mov dword [esp + 0x20], esi
mov esi, ecx
mov ecx, eax
movzx eax, byte [esi + ecx*4 + 8]
movzx edx, byte [esi + ecx*4 + 9]
shl eax, 0x18
shl edx, 0x10
or eax, edx
movzx edx, byte [esi + ecx*4 + 0xa]
shl edx, 8
or eax, edx
movzx edx, byte [esi + ecx*4 + 0xb]
or eax, edx
sub eax, dword [esp + 0x8c]
cdq
xor eax, edx
sub eax, edx
cmp eax, ebx
cmovl edi, ecx
cmovl ebx, eax
inc ecx
cmp ecx, ebp
jb 0x578066
mov ebx, dword [esp + 0x1c]
mov ecx, esi
mov esi, dword [esp + 0x20]
movzx eax, byte [ecx + edi*4 + 8]
movzx edx, byte [ecx + edi*4 + 9]
shl eax, 0x18
shl edx, 0x10
or eax, edx
movzx edx, byte [ecx + edi*4 + 0xa]
shl edx, 8
or eax, edx
movzx edx, byte [ecx + edi*4 + 0xb]
or eax, edx
cmp eax, dword [esp + 0x68]
mov dword [esp + 0x30], eax
ja 0x578523
cmp dword [esp + 0x48], 0
je 0x5780fa
cmp eax, dword [esp + 0x8c]
je 0x5780fa
test ebx, ebx
je 0x577ca6
jmp 0x578288
mov eax, dword [esp + 0x64]
mov edx, dword [esp + 0x30]
mov dword [eax], edx
lea eax, [ebp - 1]
mov dword [esp + 0x2c], eax
cmp edi, eax
jae 0x578117
mov eax, dword [ecx + ebp*4 + 4]
mov dword [ecx + edi*4 + 8], eax
mov eax, dword [esp + 0x2c]
mov edx, eax
shr eax, 0x18
mov byte [ecx + 4], al
shr edx, 0x10
mov eax, dword [esp + 0x2c]
mov byte [ecx + 5], dl
shr eax, 8
mov edx, dword [esp + 0x2c]
mov byte [ecx + 6], al
mov byte [ecx + 7], dl
mov ecx, dword [esp + 0x50]
mov ebp, dword [ecx + 0x34]
test ebp, ebp
je 0x5781d5
mov eax, dword [esp + 0x30]
cmp eax, dword [ebp]
ja 0x5781d1
cmp dword [esp + 0x30], 0
je 0x5781d5
lea edx, [eax - 1]
mov ecx, dword [ebp + 8]
test ecx, ecx
je 0x57817c
mov eax, edx
xor edx, edx
div ecx
mov ebp, dword [ebp + eax*4 + 0xc]
test ebp, ebp
je 0x5781d5
mov ecx, dword [ebp + 8]
test ecx, ecx
jne 0x578167
cmp dword [ebp], 0xfa0
jbe 0x5781bf
mov edi, edx
mov eax, 0x10624dd3
mul edi
shr edx, 3
imul ecx, edx, 0x7d
neg ecx
add ecx, edi
inc edi
cmp dword [ebp + ecx*4 + 0xc], 0
je 0x5781d5
cmp edi, dword [ebp + ecx*4 + 0xc]
je 0x5781d1
inc ecx
mov eax, 0x10624dd3
mul ecx
shr edx, 3
imul eax, edx, 0x7d
sub ecx, eax
cmp dword [ebp + ecx*4 + 0xc], 0
jne 0x5781a0
jmp 0x5781d5
mov eax, edx
shr eax, 3
and edx, 7
movzx ebp, byte [eax + ebp + 0xc]
bt ebp, edx
jae 0x5781d5
xor eax, eax
jmp 0x5781da
mov eax, 1
mov ebp, dword [esp + 0x50]
mov edx, dword [esp + 0x30]
mov dword [esp + 0xc], eax
lea ecx, [esp + 0x28]
mov eax, dword [ebp]
call fcn.004a43e0
mov dword [esp + 0x54], eax
cmp dword [esp + 0x54], 0
jne 0x57823a
mov ebp, dword [esp + 0x28]
mov edi, dword [esp + 0x50]
mov eax, dword [esp + 0x30]
mov edx, dword [ebp + 4]
mov ecx, dword [ebp]
mov dword [edx + 0x40], ecx
xor ecx, ecx
cmp eax, 1
mov dword [edx + 0x44], ebp
mov ebp, dword [esp + 0x60]
mov dword [edx + 0x3c], edi
mov dword [edx + 0x48], eax
mov eax, 0x64
cmovne eax, ecx
mov byte [edx + 5], al
mov dword [ebp], edx
mov dword [esp + 0x54], 0
cmp dword [esp + 0x54], 0
jne 0x57827a
mov edx, dword [esp + 0x60]
mov ecx, dword [edx]
mov eax, dword [ecx + 0x44]
call fcn.00579000
mov dword [esp + 0x54], eax
cmp dword [esp + 0x54], 0
je 0x57827a
mov eax, dword [esp + 0x60]
mov eax, dword [eax]
test eax, eax
je 0x57827a
mov eax, dword [eax + 0x44]
test eax, eax
je 0x57827a
mov edi, dword [eax + 0x10]
call fcn.0057a950
mov eax, edi
call fcn.0057aac0
xor eax, eax
mov dword [esp + 0x58], eax
test ebx, ebx
mov dword [esp + 0x48], eax
je 0x57829e
mov eax, dword [ebx + 0x44]
test eax, eax
je 0x57829e
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
cmp dword [esp + 0x48], 0
jne 0x577ca6
jmp 0x57852d
mov eax, dword [edi]
mov dword [esp + 0x1c], 0xffffffff
lea edx, [esp + 0x1c]
call fcn.0049e370
mov esi, dword [esp + 0x1c]
lea ebx, [esi + 1]
movzx ecx, word [edi + 0x14]
mov eax, dword [0x8339b0]
cdq
idiv ecx
mov ebp, eax
inc ebp
cmp ebx, ebp
jne 0x5782e6
mov edx, dword [esp + 0x64]
lea ebx, [esi + 2]
mov dword [edx], ebx
jmp 0x5782ec
mov edx, dword [esp + 0x64]
mov dword [edx], ebx
movzx edx, byte [edi + 0x12]
test edx, edx
je 0x5783d4
movzx esi, word [edi + 0x16]
mov eax, 0x66666667
imul esi
sar esi, 0x1f
lea eax, [ebx - 2]
mov ecx, edx
sar ecx, 1
sub ecx, esi
inc ecx
xor edx, edx
div ecx
imul eax, ecx
lea edx, [eax + 2]
add eax, 3
cmp edx, ebp
cmove edx, eax
cmp edx, ebx
jne 0x5783d4
mov eax, dword [edi]
mov dword [esp + 0xc], 0
mov edx, ebx
lea ecx, [esp + 0x10]
call fcn.004a43e0
mov ebp, eax
test ebp, ebp
jne 0x57836f
mov eax, dword [esp + 0x10]
cmp ebx, 1
mov esi, dword [eax + 4]
mov ebp, dword [eax]
mov dword [esi + 0x40], ebp
mov ebp, 0
mov dword [esi + 0x44], eax
mov dword [esi + 0x3c], edi
mov dword [esi + 0x48], ebx
mov ebx, 0x64
cmovne ebx, ebp
mov byte [esi + 5], bl
jmp 0x578371
xor esi, esi
test ebp, ebp
jne 0x578399
mov eax, dword [esi + 0x44]
call fcn.00579000
mov ebp, eax
test esi, esi
je 0x578399
mov eax, dword [esi + 0x44]
test eax, eax
je 0x578399
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
test ebp, ebp
jne 0x5783ca
mov ebx, dword [esp + 0x64]
mov ebp, dword [ebx]
lea ebx, [ebp + 1]
movzx ecx, word [edi + 0x14]
mov eax, dword [0x8339b0]
cdq
idiv ecx
inc eax
cmp ebx, eax
jne 0x5783c2
mov eax, dword [esp + 0x64]
lea ebx, [ebp + 2]
mov dword [eax], ebx
jmp 0x5783d4
mov eax, dword [esp + 0x64]
mov dword [eax], ebx
jmp 0x5783d4
mov eax, ebp
add esp, 0x6c
pop ebx
pop ebp
pop esi
pop edi
ret
mov eax, dword [edi]
mov dword [esp + 0xc], 0
mov edx, ebx
lea ecx, [esp + 0x18]
call fcn.004a43e0
test eax, eax
jne 0x577c35
mov edx, dword [esp + 0x18]
xor ecx, ecx
cmp ebx, 1
mov ebp, dword [edx + 4]
mov esi, dword [edx]
mov dword [ebp + 0x40], esi
mov dword [ebp + 0x44], edx
mov eax, dword [ebp + 0x44]
mov dword [ebp + 0x3c], edi
mov edi, 0x64
cmove ecx, edi
mov dword [ebp + 0x48], ebx
mov ebx, dword [esp + 0x60]
mov byte [ebp + 5], cl
mov dword [ebx], ebp
call fcn.00579000
mov edi, eax
mov eax, ebx
mov ecx, dword [eax]
test edi, edi
je 0x57844e
test ecx, ecx
je 0x57844e
mov eax, dword [ecx + 0x44]
test eax, eax
je 0x57844e
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
mov eax, dword [esp + 0x60]
mov ecx, dword [eax]
test edi, edi
je 0x57845e
mov eax, dword [esp + 0x60]
mov dword [eax], 0
jmp 0x57846d
mov eax, dword [ecx + 0x44]
movsx edx, word [eax + 0x16]
cmp edx, 1
jg 0x578477
mov byte [ecx], 0
mov eax, edi
add esp, 0x6c
pop ebx
pop ebp
pop esi
pop edi
ret
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
mov eax, 0xb
add esp, 0x6c
pop ebx
pop ebp
pop esi
pop edi
ret
mov edi, eax
mov eax, dword [esi + 0x44]
test eax, eax
je 0x577cdd
mov ebp, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebp
call fcn.0057aac0
jmp 0x577cdd
mov eax, dword [esp + 0x44]
mov ecx, dword [eax + 0x40]
mov esi, dword [esi + 0x40]
mov edx, dword [esi]
mov dword [ecx + 0x20], edx
jmp 0x577fc2
mov ebp, dword [esp + 0x44]
mov eax, dword [esp + 0x18]
mov edx, eax
shr edx, 0x18
mov ecx, eax
shr ecx, 0x10
mov esi, dword [ebp + 0x40]
mov byte [esi + 0x20], dl
mov edx, eax
shr edx, 8
test ebx, ebx
mov byte [esi + 0x21], cl
mov byte [esi + 0x22], dl
mov byte [esi + 0x23], al
jmp 0x577fc2
mov edi, eax
mov eax, dword [esp + 0x40]
test eax, eax
je 0x578495
mov eax, dword [eax + 0x44]
test eax, eax
je 0x578495
mov ebp, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebp
call fcn.0057aac0
jmp 0x578495
mov edi, dword [esp + 0x54]
jmp 0x578495
mov edi, 0xb
jmp 0x578495
mov edi, dword [esp + 0x54]
test esi, esi
je 0x578448
xor ebx, ebx
jmp 0x578495
mov edi, dword [esp + 0x54]
jmp 0x577cdd
mov edx, dword [esp + 0x44]
mov ebp, dword [edx + 0x40]
movzx edx, byte [ebp + 0x20]
movzx eax, byte [ebp + 0x21]
movzx ecx, byte [ebp + 0x22]
movzx edi, byte [ebp + 0x23]
shl edx, 0x18
shl eax, 0x10
or edx, eax
shl ecx, 8
or edx, ecx
or edx, edi
jmp 0x577cd2
push edi
push esi
push ebp
push ebx
sub esp, 0x68
mov dword [esp + 0x60], ecx
mov dword [esp + 0x5c], edx
mov esi, eax
mov ebp, dword [esi + 0xc]
mov dword [esp + 0x58], 0xffffffff
mov eax, dword [esi]
lea edx, [esp + 0x58]
call fcn.0049e370
mov eax, dword [esp + 0x58]
mov dword [esp + 0x64], eax
mov edi, dword [ebp + 0x40]
movzx ebx, byte [edi + 0x24]
shl ebx, 0x18
movzx edx, byte [edi + 0x25]
shl edx, 0x10
or ebx, edx
movzx ecx, byte [edi + 0x26]
shl ecx, 8
or ebx, ecx
movzx edx, byte [edi + 0x27]
or ebx, edx
cmp ebx, eax
jae 0x578f0b
test ebx, ebx
je 0x578d31
movzx eax, byte [esp + 0x8c]
test eax, eax
je 0x5786d1
mov eax, dword [esp + 0x64]
cmp eax, dword [esp + 0x88]
jb 0x5786d1
mov dword [esp + 0x10], ebx
movzx ecx, word [esi + 0x16]
mov eax, 0x66666667
imul ecx
mov ebx, edx
sar ebx, 1
sar ecx, 0x1f
sub ebx, ecx
inc ebx
mov edi, dword [esp + 0x88]
lea eax, [edi - 2]
xor edx, edx
div ebx
mov edi, eax
imul edi, ebx
lea ebx, [edi + 2]
movzx ecx, word [esi + 0x14]
mov eax, dword [0x8339b0]
cdq
idiv ecx
inc eax
add edi, 3
cmp ebx, eax
jne 0x578647
mov ebx, edi
mov dword [esp + 0x18], ebx
mov dword [esp + 0xc], 0
mov eax, dword [esi]
mov edx, ebx
lea ecx, [esp + 0x48]
mov ebx, dword [esp + 0x10]
call fcn.004a43e0
test eax, eax
jne 0x5786ae
mov eax, dword [esp + 0x48]
mov edx, dword [esp + 0x18]
neg edx
add edx, dword [esp + 0x88]
lea edi, [edx + edx*4]
mov ecx, dword [eax]
movzx edx, byte [ecx + edi - 5]
mov ecx, dword [eax + 0x10]
mov dword [esp + 0x10], ecx
mov dword [esp + 0x14], edx
call fcn.0057a950
mov eax, dword [esp + 0x10]
call fcn.0057aac0
mov edx, dword [esp + 0x14]
test edx, edx
jle 0x5786a9
cmp edx, 5
jle 0x5786b6
mov eax, 0xb
add esp, 0x68
pop ebx
pop ebp
pop esi
pop edi
ret
xor eax, eax
cmp edx, 2
sete al
mov dword [esp + 0x54], eax
mov edx, dword [esp + 0x88]
mov ecx, dword [esp + 0x60]
mov dword [ecx], edx
jmp 0x5786d9
mov dword [esp + 0x54], 0
mov eax, dword [ebp + 0x44]
call fcn.00579000
test eax, eax
je 0x5786ed
add esp, 0x68
pop ebx
pop ebp
pop esi
pop edi
ret
mov edi, dword [ebp + 0x40]
dec ebx
mov eax, ebx
shr eax, 0x18
mov byte [edi + 0x24], al
mov edx, ebx
shr edx, 0x10
mov byte [edi + 0x25], dl
mov ecx, ebx
shr ecx, 8
mov byte [edi + 0x26], cl
mov byte [edi + 0x27], bl
xor ebx, ebx
mov dword [esp + 0x3c], ebx
mov dword [esp + 0x40], ebp
mov dword [esp + 0x4c], esi
mov ebp, ebx
test ebx, ebx
je 0x578fce
mov esi, dword [ebx + 0x40]
movzx edx, byte [esi]
shl edx, 0x18
movzx eax, byte [esi + 1]
shl eax, 0x10
or edx, eax
movzx ecx, byte [esi + 2]
shl ecx, 8
or edx, ecx
movzx edi, byte [esi + 3]
or edx, edi
cmp edx, dword [esp + 0x64]
jbe 0x578775
mov edi, 0xb
test ebp, ebp
je 0x57876a
mov eax, dword [ebp + 0x44]
test eax, eax
je 0x57876a
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
mov eax, dword [esp + 0x5c]
mov ecx, dword [eax]
jmp 0x578ed3
mov dword [esp + 0xc], 0
mov esi, dword [esp + 0x4c]
mov eax, dword [esi]
lea ecx, [esp + 0x30]
mov dword [esp + 0x34], edx
call fcn.004a43e0
mov edx, dword [esp + 0x34]
mov dword [esp + 0x50], eax
cmp dword [esp + 0x50], 0
jne 0x5787d2
mov edi, dword [esp + 0x30]
mov ebx, dword [edi + 4]
mov esi, dword [edi]
mov dword [ebx + 0x40], esi
mov dword [ebx + 0x44], edi
mov eax, dword [esp + 0x4c]
mov dword [ebx + 0x3c], eax
mov dword [ebx + 0x48], edx
mov ecx, 0x64
cmp edx, 1
je 0x5787c7
mov ecx, 0
mov byte [ebx + 5], cl
mov dword [esp + 0x50], 0
cmp dword [esp + 0x50], 0
jne 0x578fc5
mov ecx, dword [ebx + 0x40]
movzx esi, byte [ecx + 4]
shl esi, 0x18
movzx eax, byte [ecx + 5]
shl eax, 0x10
or esi, eax
movzx edi, byte [ecx + 6]
shl edi, 8
or esi, edi
movzx eax, byte [ecx + 7]
or esi, eax
jne 0x578860
mov eax, dword [esp + 0x54]
mov dword [esp + 0x44], eax
test eax, eax
jne 0x578860
mov eax, dword [ebx + 0x44]
mov dword [esp + 0x34], edx
call fcn.00579000
mov edx, dword [esp + 0x34]
mov dword [esp + 0x50], eax
cmp dword [esp + 0x50], 0
jne 0x578f18
mov eax, dword [esp + 0x60]
mov dword [eax], edx
mov edx, dword [esp + 0x40]
mov edi, dword [edx + 0x40]
mov ecx, dword [ebx + 0x40]
mov esi, dword [ecx]
mov dword [edi + 0x20], esi
mov eax, dword [esp + 0x5c]
mov dword [eax], ebx
xor ebx, ebx
test ebp, ebp
jne 0x578d0b
mov edi, dword [esp + 0x50]
mov eax, dword [esp + 0x5c]
mov ecx, dword [eax]
jmp 0x578ed3
mov eax, dword [esp + 0x4c]
movzx edi, word [eax + 0x16]
shr edi, 2
add edi, 0xfffffffe
cmp esi, edi
ja 0x578fa8
mov eax, dword [esp + 0x54]
mov dword [esp + 0x44], eax
test eax, eax
je 0x578a56
cmp edx, dword [esp + 0x88]
jne 0x578a56
mov edx, dword [esp + 0x5c]
mov dword [edx], ebx
mov eax, dword [ebx + 0x44]
call fcn.00579000
mov dword [esp + 0x50], eax
cmp dword [esp + 0x50], 0
jne 0x578f18
test esi, esi
jne 0x5788cb
test ebp, ebp
je 0x578f39
mov edx, dword [ebp + 0x40]
mov ebx, dword [ebx + 0x40]
mov eax, dword [ebx]
mov dword [edx], eax
jmp 0x578a3e
mov edi, dword [ebx + 0x40]
movzx eax, byte [edi + 8]
shl eax, 0x18
movzx edx, byte [edi + 9]
shl edx, 0x10
or eax, edx
movzx ecx, byte [edi + 0xa]
shl ecx, 8
or eax, ecx
movzx edx, byte [edi + 0xb]
or eax, edx
mov dword [esp + 0x18], eax
cmp eax, dword [esp + 0x64]
ja 0x578fa8
mov dword [esp + 0xc], 0
mov edi, dword [esp + 0x4c]
mov eax, dword [edi]
mov edx, dword [esp + 0x18]
lea ecx, [esp + 0x14]
call fcn.004a43e0
mov dword [esp + 0x50], eax
cmp dword [esp + 0x50], 0
jne 0x57895c
mov eax, dword [esp + 0x14]
mov ecx, dword [eax + 4]
mov dword [esp + 0x3c], ecx
mov edi, dword [eax]
mov dword [ecx + 0x40], edi
mov dword [ecx + 0x44], eax
mov edx, dword [esp + 0x4c]
mov dword [ecx + 0x3c], edx
mov eax, dword [esp + 0x18]
mov dword [ecx + 0x48], eax
mov edx, 0x64
cmp eax, 1
je 0x578951
mov edx, 0
mov byte [ecx + 5], dl
mov dword [esp + 0x50], 0
cmp dword [esp + 0x50], 0
jne 0x578f9f
mov edx, dword [esp + 0x3c]
mov eax, dword [edx + 0x44]
call fcn.00579000
mov dword [esp + 0x50], eax
cmp dword [esp + 0x50], 0
jne 0x578f7a
mov eax, dword [esp + 0x3c]
mov edi, dword [eax + 0x40]
mov edx, dword [ebx + 0x40]
mov ecx, dword [edx]
mov dword [edi], ecx
mov ecx, eax
mov edx, dword [ecx + 0x40]
lea eax, [esi - 1]
mov dword [esp + 0x10], eax
shr eax, 0x18
mov byte [edx + 4], al
mov eax, dword [esp + 0x10]
shr eax, 0x10
mov byte [edx + 5], al
mov eax, dword [esp + 0x10]
shr eax, 8
mov byte [edx + 6], al
mov eax, dword [esp + 0x10]
mov byte [edx + 7], al
mov eax, dword [ecx + 0x40]
add eax, 8
mov edi, dword [ebx + 0x40]
add edi, 0xc
lea esi, [esi*4 - 4]
push esi
push edi
push eax
call fcn.007666b0
add esp, 0xc
cmp dword [esp + 0x3c], 0
je 0x5789fc
mov eax, dword [esp + 0x3c]
mov eax, dword [eax + 0x44]
test eax, eax
je 0x5789fc
mov esi, dword [eax + 0x10]
call fcn.0057a950
mov eax, esi
call fcn.0057aac0
test ebp, ebp
je 0x578f4d
mov eax, dword [ebp + 0x44]
call fcn.00579000
mov dword [esp + 0x50], eax
cmp dword [esp + 0x50], 0
jne 0x578f18
mov esi, dword [ebp + 0x40]
mov eax, dword [esp + 0x18]
mov edx, eax
shr edx, 0x18
mov byte [esi], dl
mov ecx, eax
shr ecx, 0x10
mov byte [esi + 1], cl
mov ebx, eax
shr ebx, 8
mov byte [esi + 2], bl
mov byte [esi + 3], al
test ebp, ebp
mov ebx, 0
mov dword [esp + 0x54], ebx
mov dword [esp + 0x44], ebx
jne 0x578d0b
jmp 0x578d21
test esi, esi
jne 0x578a67
test ebp, ebp
jne 0x578d0b
jmp 0x578d21
mov eax, dword [ebx + 0x44]
mov dword [esp + 0x38], ecx
call fcn.00579000
mov ecx, dword [esp + 0x38]
mov dword [esp + 0x50], eax
cmp dword [esp + 0x50], 0
jne 0x578f18
cmp dword [esp + 0x88], 0
ja 0x578a97
xor edx, edx
jmp 0x578b26
movzx eax, byte [ecx + 8]
shl eax, 0x18
movzx edi, byte [ecx + 9]
shl edi, 0x10
or eax, edi
movzx edx, byte [ecx + 0xa]
shl edx, 8
or eax, edx
movzx edi, byte [ecx + 0xb]
or eax, edi
sub eax, dword [esp + 0x88]
cdq
xor eax, edx
sub eax, edx
xor edx, edx
cmp esi, 1
jbe 0x578b26
mov edi, 1
mov dword [esp + 0x1c], ebp
mov dword [esp + 0x20], ebx
mov ebp, ecx
mov ecx, edx
mov ebx, eax
movzx eax, byte [ebp + edi*4 + 8]
shl eax, 0x18
movzx edx, byte [ebp + edi*4 + 9]
shl edx, 0x10
or eax, edx
movzx edx, byte [ebp + edi*4 + 0xa]
shl edx, 8
or eax, edx
movzx edx, byte [ebp + edi*4 + 0xb]
or eax, edx
sub eax, dword [esp + 0x88]
cdq
xor eax, edx
sub eax, edx
cmp eax, ebx
jge 0x578b11
mov ecx, edi
jge 0x578b15
mov ebx, eax
inc edi
cmp edi, esi
jb 0x578adc
mov edx, ecx
mov ecx, ebp
mov ebp, dword [esp + 0x1c]
mov ebx, dword [esp + 0x20]
movzx eax, byte [ecx + edx*4 + 8]
shl eax, 0x18
movzx edi, byte [ecx + edx*4 + 9]
shl edi, 0x10
or eax, edi
movzx edi, byte [ecx + edx*4 + 0xa]
shl edi, 8
or eax, edi
movzx edi, byte [ecx + edx*4 + 0xb]
or eax, edi
mov dword [esp + 0x2c], eax
cmp eax, dword [esp + 0x64]
ja 0x578fa8
cmp dword [esp + 0x44], 0
je 0x578b74
cmp eax, dword [esp + 0x88]
je 0x578b74
test ebp, ebp
je 0x57871a
jmp 0x578d0b
mov eax, dword [esp + 0x60]
mov edi, dword [esp + 0x2c]
mov dword [eax], edi
lea eax, [esi - 1]
mov dword [esp + 0x28], eax
cmp edx, eax
jae 0x578b91
mov eax, dword [ecx + esi*4 + 4]
mov dword [ecx + edx*4 + 8], eax
mov eax, dword [esp + 0x28]
shr eax, 0x18
mov byte [ecx + 4], al
mov edx, dword [esp + 0x28]
shr edx, 0x10
mov byte [ecx + 5], dl
mov eax, dword [esp + 0x28]
shr eax, 8
mov byte [ecx + 6], al
mov edx, dword [esp + 0x28]
mov byte [ecx + 7], dl
mov ecx, dword [esp + 0x4c]
mov edi, dword [ecx + 0x34]
test edi, edi
je 0x578c59
mov eax, dword [esp + 0x2c]
cmp eax, dword [edi]
ja 0x578c55
cmp dword [esp + 0x2c], 0
je 0x578c59
lea ecx, [eax - 1]
mov esi, dword [edi + 8]
test esi, esi
je 0x578bfd
mov eax, ecx
xor edx, edx
div esi
mov ecx, edx
mov edi, dword [edi + eax*4 + 0xc]
test edi, edi
je 0x578c59
mov esi, dword [edi + 8]
test esi, esi
jne 0x578be6
cmp dword [edi], 0xfa0
jbe 0x578c3d
mov eax, 0x10624dd3
mul ecx
shr edx, 3
imul esi, edx, 0x7d
neg esi
add esi, ecx
inc ecx
cmp dword [edi + esi*4 + 0xc], 0
je 0x578c59
cmp ecx, dword [edi + esi*4 + 0xc]
je 0x578c55
inc esi
mov eax, 0x10624dd3
mul esi
shr edx, 3
imul eax, edx, 0x7d
sub esi, eax
cmp dword [edi + esi*4 + 0xc], 0
jne 0x578c1e
jmp 0x578c59
mov esi, ecx
shr esi, 3
movzx edi, byte [esi + edi + 0xc]
and ecx, 7
mov eax, 1
shl eax, cl
test eax, edi
je 0x578c59
xor eax, eax
jmp 0x578c5e
mov eax, 1
mov dword [esp + 0xc], eax
mov esi, dword [esp + 0x4c]
mov eax, dword [esi]
mov edx, dword [esp + 0x2c]
lea ecx, [esp + 0x24]
call fcn.004a43e0
mov dword [esp + 0x50], eax
cmp dword [esp + 0x50], 0
jne 0x578cbd
mov eax, dword [esp + 0x24]
mov esi, dword [eax + 4]
mov edi, dword [eax]
mov dword [esi + 0x40], edi
mov dword [esi + 0x44], eax
mov edx, dword [esp + 0x4c]
mov dword [esi + 0x3c], edx
mov ecx, dword [esp + 0x2c]
mov dword [esi + 0x48], ecx
mov eax, 0x64
cmp ecx, 1
je 0x578cac
mov eax, 0
mov byte [esi + 5], al
mov edx, dword [esp + 0x5c]
mov dword [edx], esi
mov dword [esp + 0x50], 0
cmp dword [esp + 0x50], 0
jne 0x578cfd
mov edx, dword [esp + 0x5c]
mov ecx, dword [edx]
mov eax, dword [ecx + 0x44]
call fcn.00579000
mov dword [esp + 0x50], eax
cmp dword [esp + 0x50], 0
je 0x578cfd
mov eax, dword [esp + 0x5c]
mov eax, dword [eax]
test eax, eax
je 0x578cfd
mov eax, dword [eax + 0x44]
test eax, eax
je 0x578cfd
mov esi, dword [eax + 0x10]
call fcn.0057a950
mov eax, esi
call fcn.0057aac0
xor eax, eax
mov dword [esp + 0x54], eax
mov dword [esp + 0x44], eax
test ebp, ebp
je 0x578d21
mov eax, dword [ebp + 0x44]
test eax, eax
je 0x578d21
mov esi, dword [eax + 0x10]
call fcn.0057a950
mov eax, esi
call fcn.0057aac0
cmp dword [esp + 0x44], 0
jne 0x57871a
jmp 0x578fb2
mov dword [esp + 0x1c], 0xffffffff
mov eax, dword [esi]
lea edx, [esp + 0x1c]
call fcn.0049e370
mov edi, dword [esp + 0x1c]
lea ebx, [edi + 1]
movzx ecx, word [esi + 0x14]
mov eax, dword [0x8339b0]
cdq
idiv ecx
mov ebp, eax
inc ebp
cmp ebx, ebp
jne 0x578d69
lea ebx, [edi + 2]
mov edx, dword [esp + 0x60]
mov dword [edx], ebx
jmp 0x578d6f
mov edx, dword [esp + 0x60]
mov dword [edx], ebx
movzx edx, byte [esi + 0x12]
test edx, edx
je 0x578e59
movzx edi, word [esi + 0x16]
mov eax, 0x66666667
imul edi
mov ecx, edx
sar ecx, 1
sar edi, 0x1f
sub ecx, edi
inc ecx
lea eax, [ebx - 2]
xor edx, edx
div ecx
imul eax, ecx
lea ecx, [eax + 2]
add eax, 3
cmp ecx, ebp
je 0x578da6
mov eax, ecx
cmp eax, ebx
jne 0x578e59
mov dword [esp + 0xc], 0
mov eax, dword [esi]
mov edx, ebx
lea ecx, [esp + 0x10]
call fcn.004a43e0
mov ebp, eax
test ebp, ebp
jne 0x578df4
mov eax, dword [esp + 0x10]
mov edi, dword [eax + 4]
mov ebp, dword [eax]
mov dword [edi + 0x40], ebp
mov dword [edi + 0x44], eax
mov dword [edi + 0x3c], esi
mov dword [edi + 0x48], ebx
mov edx, 0x64
cmp ebx, 1
je 0x578ded
mov edx, 0
mov byte [edi + 5], dl
xor ebp, ebp
jmp 0x578df6
xor edi, edi
test ebp, ebp
jne 0x578e1e
mov eax, dword [edi + 0x44]
call fcn.00579000
mov ebp, eax
test edi, edi
je 0x578e1e
mov eax, dword [edi + 0x44]
test eax, eax
je 0x578e1e
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
test ebp, ebp
jne 0x578e4f
mov ebx, dword [esp + 0x60]
mov ebp, dword [ebx]
lea ebx, [ebp + 1]
movzx ecx, word [esi + 0x14]
mov eax, dword [0x8339b0]
cdq
idiv ecx
inc eax
cmp ebx, eax
jne 0x578e47
lea ebx, [ebp + 2]
mov eax, dword [esp + 0x60]
mov dword [eax], ebx
jmp 0x578e59
mov eax, dword [esp + 0x60]
mov dword [eax], ebx
jmp 0x578e59
mov eax, ebp
add esp, 0x68
pop ebx
pop ebp
pop esi
pop edi
ret
mov dword [esp + 0xc], 0
mov eax, dword [esi]
mov edx, ebx
lea ecx, [esp + 0x18]
call fcn.004a43e0
test eax, eax
jne 0x5786ae
mov edi, dword [esp + 0x18]
mov edx, dword [edi + 4]
mov ebp, dword [edi]
mov dword [edx + 0x40], ebp
mov dword [edx + 0x44], edi
mov dword [edx + 0x3c], esi
mov dword [edx + 0x48], ebx
cmp ebx, 1
mov ebx, 0x64
je 0x578e9a
mov ebx, 0
mov byte [edx + 5], bl
mov esi, dword [esp + 0x5c]
mov dword [esi], edx
mov eax, dword [edx + 0x44]
call fcn.00579000
mov edi, eax
mov eax, esi
mov ecx, dword [eax]
test edi, edi
je 0x578ed3
test ecx, ecx
je 0x578ed3
mov eax, dword [ecx + 0x44]
test eax, eax
je 0x578ed3
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
mov eax, esi
mov ecx, dword [eax]
test edi, edi
je 0x578ee3
mov eax, dword [esp + 0x5c]
mov dword [eax], 0
jmp 0x578ef2
mov eax, dword [ecx + 0x44]
movsx edx, word [eax + 0x16]
cmp edx, 1
jg 0x578efc
mov byte [ecx], 0
mov eax, edi
add esp, 0x68
pop ebx
pop ebp
pop esi
pop edi
ret
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
mov eax, 0xb
add esp, 0x68
pop ebx
pop ebp
pop esi
pop edi
ret
mov edi, eax
mov eax, dword [ebx + 0x44]
test eax, eax
je 0x578750
mov ebx, dword [eax + 0x10]
call fcn.0057a950
mov eax, ebx
call fcn.0057aac0
jmp 0x578750
mov eax, dword [esp + 0x40]
mov ecx, dword [eax + 0x40]
mov ebx, dword [ebx + 0x40]
mov edx, dword [ebx]
mov dword [ecx + 0x20], edx
jmp 0x578a3e
mov esi, dword [esp + 0x40]
mov edi, dword [esi + 0x40]
mov eax, dword [esp + 0x18]
mov edx, eax
shr edx, 0x18
mov byte [edi + 0x20], dl
mov ecx, eax
shr ecx, 0x10
mov byte [edi + 0x21], cl
mov ebx, eax
shr ebx, 8
mov byte [edi + 0x22], bl
mov byte [edi + 0x23], al
test ebp, ebp
jmp 0x578a3e
mov edi, eax
mov eax, dword [esp + 0x3c]
test eax, eax
je 0x578f1a
mov eax, dword [eax + 0x44]
test eax, eax
je 0x578f1a
mov esi, dword [eax + 0x10]
call fcn.0057a950
mov eax, esi
call fcn.0057aac0
jmp 0x578f1a
mov edi, dword [esp + 0x50]
jmp 0x578f1a
mov edi, 0xb
jmp 0x578f1a
mov edi, dword [esp + 0x50]
test ebx, ebx
je 0x578855
xor ebp, ebp
jmp 0x578f1a
mov edi, dword [esp + 0x50]
jmp 0x578750
mov edx, dword [esp + 0x40]
mov esi, dword [edx + 0x40]
movzx edx, byte [esi + 0x20]
shl edx, 0x18
movzx eax, byte [esi + 0x21]
shl eax, 0x10
or edx, eax
movzx ecx, byte [esi + 0x22]
shl ecx, 8
or edx, ecx
movzx edi, byte [esi + 0x23]
or edx, edi
jmp 0x578745