push ecx
push ebx
push esi
mov eax, [ebp+8]
mov edx, [ebp+0Ch]
add edx, eax
mov esi, eax
mov [ebp-4], edx
xor edx, edx
mov ecx, [ebp+14h]
mov [ecx], edx
mov al, [esi]
mov edx, [ebp+10h]
cmp al, 11h
jbe short loc_40103C
xor ecx, ecx
mov cl, al
add ecx, 0FFFFFFEFh
inc esi
cmp ecx, 4
jb loc_4011FA
loc_401031:
mov al, [esi]
inc esi
mov [edx], al
inc edx
dec ecx
jnz short loc_401031
jmp short loc_4010A2
loc_40103C:
xor ecx, ecx
mov cl, [esi]
inc esi
cmp ecx, 10h
jnb loc_4010D7
test ecx, ecx
jnz short loc_401066
jmp short loc_401057
loc_401050:
add ecx, 0FFh
inc esi
loc_401057:
cmp byte ptr [esi], 0
jz short loc_401050
xor eax, eax
mov al, [esi]
add eax, 0Fh
add ecx, eax
inc esi
loc_401066:
mov eax, [esi]
add esi, 4
mov [edx], eax
add edx, 4
dec ecx
jz short loc_4010A2
cmp ecx, 4
jb short loc_401099
loc_401078:
mov eax, [esi]
mov [edx], eax
add edx, 4
add esi, 4
sub ecx, 4
cmp ecx, 4
jnb short loc_401078
test ecx, ecx
jbe short loc_4010A2
loc_40108E:
mov al, [esi]
inc esi
mov [edx], al
inc edx
dec ecx
jnz short loc_40108E
jmp short loc_4010A2
loc_401099:
mov al, [esi]
inc esi
mov [edx], al
inc edx
dec ecx
jnz short loc_401099
loc_4010A2:
xor ecx, ecx
mov cl, [esi]
inc esi
cmp ecx, 10h
jnb short loc_4010D7
shr ecx, 2
lea eax, [edx-801h]
sub eax, ecx
xor ecx, ecx
mov cl, [esi]
inc esi
shl ecx, 2
sub eax, ecx
mov cl, [eax]
inc eax
mov [edx], cl
inc edx
mov cl, [eax]
inc eax
mov [edx], cl
inc edx
mov al, [eax]
mov [edx], al
inc edx
jmp loc_4011EA
loc_4010D7:
cmp ecx, 40h
jb short loc_4010FC
mov ebx, ecx
lea eax, [edx-1]
shr ebx, 2
and ebx, 7
sub eax, ebx
xor ebx, ebx
mov bl, [esi]
inc esi
shl ebx, 3
shr ecx, 5
sub eax, ebx
dec ecx
jmp loc_4011D5
loc_4010FC:
cmp ecx, 20h
jb short loc_401130
and ecx, 1Fh
test ecx, ecx
jnz short loc_401120
jmp short loc_401111
loc_40110A:
add ecx, 0FFh
inc esi
loc_401111: ; CODE XREF: start+108j
cmp byte ptr [esi], 0
jz short loc_40110A
xor eax, eax
mov al, [esi]
add eax, 1Fh
add ecx, eax
inc esi
loc_401120: ; CODE XREF: start+106j
movzx ebx, word ptr [esi]
sar ebx, 2
lea eax, [edx-1]
sub eax, ebx
add esi, 2
jmp short loc_401199
loc_401130: ; CODE XREF: start+FFj
cmp ecx, 10h
jb short loc_40117A
mov eax, edx
mov ebx, ecx
and ebx, 8
shl ebx, 0Bh
sub eax, ebx
and ecx, 7
test ecx, ecx
jnz short loc_401160
jmp short loc_401151
loc_40114A: ; CODE XREF: start+154j
add ecx, 0FFh
inc esi
loc_401151:
cmp byte ptr [esi], 0
jz short loc_40114A
xor ebx, ebx
mov bl, [esi]
add ebx, 7
add ecx, ebx
inc esi
loc_401160:
movzx ebx, word ptr [esi]
sar ebx, 2
sub eax, ebx
add esi, 2
cmp edx, eax
jz loc_40120D
sub eax, 4000h
jmp short loc_401199
loc_40117A:
shr ecx, 2
lea eax, [edx-1]
sub eax, ecx
xor ecx, ecx
mov cl, [esi]
inc esi
shl ecx, 2
sub eax, ecx
mov cl, [eax]
inc eax
mov [edx], cl
inc edx
mov al, [eax]
mov [edx], al
inc edx
jmp short loc_4011EA
loc_401199:
cmp ecx, 6
jb short loc_4011D5
mov ebx, edx
sub ebx, eax
cmp ebx, 4
jl short loc_4011D5
mov ebx, [eax]
add eax, 4
mov [edx], ebx
add edx, 4
sub ecx, 2
loc_4011B4:
mov ebx, [eax]
mov [edx], ebx
add edx, 4
add eax, 4
sub ecx, 4
cmp ecx, 4
jnb short loc_4011B4
test ecx, ecx
jbe short loc_4011EA
loc_4011CA:
mov bl, [eax]
inc eax
mov [edx], bl
inc edx
dec ecx
jnz short loc_4011CA
jmp short loc_4011EA
loc_4011D5:
mov bl, [eax]
inc eax
mov [edx], bl
inc edx
mov bl, [eax]
inc eax
mov [edx], bl
inc edx
loc_4011E1:
mov bl, [eax]
inc eax
mov [edx], bl
inc edx
dec ecx
jnz short loc_4011E1
loc_4011EA:
xor ecx, ecx
mov cl, [esi-2]
and ecx, 3
test ecx, ecx
jz loc_40103C
loc_4011FA:
mov al, [esi]
inc esi
mov [edx], al
inc edx
dec ecx
jnz short loc_4011FA
xor ecx, ecx
mov cl, [esi]
inc esi
jmp loc_4010D7
loc_40120D:
sub edx, [ebp+10h]
mov eax, [ebp+14h]
mov [eax], edx
cmp esi, [ebp-4]
jnz short loc_40121E
xor eax, eax
jmp short loc_40122B
loc_40121E:
mov eax, 0FFFFFFF8h
cmp esi, [ebp-4]
jb short loc_40122B
add eax, 4
loc_40122B:
pop esi
pop ebx
pop ecx
pop ebp
retn