Skip to content

Instantly share code, notes, and snippets.

@oopsmishap
Created February 16, 2023 22:53
Show Gist options
  • Save oopsmishap/fe753bf9b005c0e80d593ba2ff0eaac6 to your computer and use it in GitHub Desktop.
Save oopsmishap/fe753bf9b005c0e80d593ba2ff0eaac6 to your computer and use it in GitHub Desktop.
matching_crypt_compression_algo
int __stdcall sub_10001100(_DWORD *a1, unsigned int a2, unsigned int a3)
{
_DWORD *v3; // edi
unsigned int v4; // ebx
unsigned int v5; // esi
int v6; // edx
unsigned int v7; // eax
int v8; // ecx
unsigned int v9; // edx
unsigned __int16 *v10; // edx
unsigned int v11; // ecx
int v12; // ecx
unsigned int v13; // ecx
int v14; // edi
unsigned int v15; // ebx
int v16; // edi
int v17; // edi
int v18; // edx
int v19; // edi
unsigned int v20; // ebx
unsigned int v21; // eax
unsigned int v22; // edx
unsigned int v23; // edi
unsigned int v24; // eax
unsigned int v25; // ebx
unsigned __int16 *v26; // ecx
unsigned int v27; // eax
unsigned int v28; // edx
unsigned int v29; // edi
unsigned int v30; // eax
int v31; // edx
unsigned int v32; // edi
unsigned int v33; // edi
unsigned int v34; // eax
unsigned int v35; // edx
unsigned int v36; // edi
unsigned __int16 v37; // di
unsigned int v38; // edx
unsigned int v39; // eax
unsigned int v40; // edx
unsigned int v41; // edi
unsigned __int16 v42; // di
int v43; // edx
unsigned int v44; // edi
int v45; // edi
unsigned int v46; // eax
int v47; // edx
unsigned int v48; // edi
unsigned int v49; // edx
unsigned int v50; // ecx
unsigned int v51; // edi
unsigned int v52; // edx
int v53; // ecx
int v54; // ecx
int v55; // edx
unsigned int v56; // edi
unsigned int v57; // eax
int v58; // edx
int v59; // ebx
unsigned int v60; // edx
unsigned int v61; // edi
unsigned int v62; // eax
int v63; // ebx
int v64; // edx
unsigned int v65; // edi
unsigned int v66; // eax
int v67; // ebx
int v68; // edx
unsigned int v69; // edi
unsigned int v70; // eax
int v71; // ebx
int v72; // edx
unsigned int v73; // edi
unsigned int v74; // eax
int v75; // ebx
int v76; // edx
unsigned int v77; // edi
unsigned int v78; // ebx
unsigned int v79; // edx
int v80; // edi
int v81; // ecx
int v82; // ebx
int v83; // ecx
unsigned int v84; // edx
unsigned int v85; // ecx
int v86; // ecx
unsigned int v87; // esi
int v88; // edx
unsigned int v89; // edi
unsigned int v90; // eax
int v91; // edx
unsigned int v92; // edx
unsigned int v93; // edi
unsigned int v94; // eax
unsigned __int16 v95; // di
int v96; // edx
unsigned int v97; // edx
unsigned int v98; // edi
unsigned int v99; // eax
unsigned __int16 v100; // di
int v101; // edx
unsigned int v102; // edx
unsigned int v103; // edi
unsigned int v104; // edx
bool v105; // cf
unsigned int v106; // edx
unsigned int v107; // ecx
_BYTE *v108; // edx
unsigned __int8 *v110; // edx
int v111; // [esp+Ch] [ebp-50h]
int v112; // [esp+10h] [ebp-4Ch]
_BYTE *v113; // [esp+10h] [ebp-4Ch]
int v114; // [esp+14h] [ebp-48h]
unsigned __int16 *v115; // [esp+18h] [ebp-44h]
int v116; // [esp+18h] [ebp-44h]
int v117; // [esp+1Ch] [ebp-40h]
unsigned int v118; // [esp+20h] [ebp-3Ch]
unsigned int v119; // [esp+24h] [ebp-38h]
int v120; // [esp+24h] [ebp-38h]
int v121; // [esp+28h] [ebp-34h]
unsigned int v122; // [esp+2Ch] [ebp-30h]
unsigned int v123; // [esp+30h] [ebp-2Ch]
unsigned int v124; // [esp+34h] [ebp-28h]
int v125; // [esp+34h] [ebp-28h]
unsigned int v126; // [esp+34h] [ebp-28h]
unsigned int v127; // [esp+38h] [ebp-24h]
unsigned __int16 *v128; // [esp+3Ch] [ebp-20h]
int v129; // [esp+40h] [ebp-1Ch]
int v130; // [esp+40h] [ebp-1Ch]
unsigned int v131; // [esp+40h] [ebp-1Ch]
int v132; // [esp+40h] [ebp-1Ch]
int v133; // [esp+40h] [ebp-1Ch]
int v134; // [esp+40h] [ebp-1Ch]
unsigned int v135; // [esp+44h] [ebp-18h]
unsigned int v136; // [esp+48h] [ebp-14h]
unsigned int v137; // [esp+4Ch] [ebp-10h]
unsigned int v138; // [esp+50h] [ebp-Ch]
unsigned int v139; // [esp+50h] [ebp-Ch]
unsigned __int16 *v140; // [esp+54h] [ebp-8h]
unsigned __int16 *v141; // [esp+54h] [ebp-8h]
unsigned __int16 *v142; // [esp+54h] [ebp-8h]
int v143; // [esp+54h] [ebp-8h]
int v144; // [esp+54h] [ebp-8h]
unsigned __int8 *v145; // [esp+58h] [ebp-4h]
v3 = a1;
v128 = (unsigned __int16 *)a1[4];
v4 = a1[13];
v135 = a1[14];
v5 = a1[8];
v122 = a1[16];
v119 = a1[17];
v123 = a1[15];
v6 = (1 << a1[2]) - 1;
v121 = a1[5];
v114 = (1 << a1[1]) - 1;
v117 = *a1;
v127 = a1[10];
v137 = a1[11];
v138 = a1[9];
v145 = (unsigned __int8 *)a1[6];
v7 = a1[7];
v136 = v4;
v111 = v6;
v118 = a1[12];
v124 = 0;
while ( 1 )
{
v129 = v6 & v137;
v140 = &v128[16 * v4 + (v6 & v137)];
v8 = *v140;
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v9 = v8 * (v7 >> 11);
if ( v5 < v9 )
{
v7 = v8 * (v7 >> 11);
*v140 = v8 + ((unsigned int)(2048 - v8) >> 5);
v10 = v128 + 1846;
v141 = v128 + 1846;
if ( v118 || v137 )
{
v11 = v138;
if ( !v138 )
v11 = v127;
v10 = &v141[768 * ((v114 & v137) << v117) + 768 * (*(unsigned __int8 *)(v11 + v121 - 1) >> (8 - v117))];
v4 = v136;
v141 = v10;
}
if ( v4 >= 7 )
{
v130 = 256;
v16 = *(unsigned __int8 *)(v3[5] + (v138 < v135 ? v127 : 0) - v135 + v138);
v136 = v4 - (v4 < 0xA ? 3 : 6);
v13 = 1;
while ( 1 )
{
v17 = 2 * v16;
v18 = v17 & v130;
v112 = v17;
v115 = &v141[v13 + (v17 & v130) + v130];
v19 = *v115;
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v20 = v19 * (v7 >> 11);
if ( v5 >= v20 )
{
v7 -= v20;
v5 -= v20;
*v115 -= *v115 >> 5;
v13 = 2 * v13 + 1;
}
else
{
v7 = v19 * (v7 >> 11);
*v115 = v19 + ((unsigned int)(2048 - v19) >> 5);
v13 *= 2;
v18 = ~v18;
}
v130 &= v18;
if ( v13 >= 0x100 )
break;
v16 = v112;
}
}
else
{
v12 = v4;
if ( v4 >= 4 )
v12 = 3;
v136 = v4 - v12;
v13 = 1;
do
{
v14 = v10[v13];
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v15 = v14 * (v7 >> 11);
if ( v5 >= v15 )
{
v7 -= v15;
v5 -= v15;
v10[v13] -= v10[v13] >> 5;
v13 = 2 * v13 + 1;
}
else
{
v7 = v14 * (v7 >> 11);
v10[v13] = v14 + ((unsigned int)(2048 - v14) >> 5);
v13 *= 2;
}
}
while ( v13 < 0x100 );
}
*(_BYTE *)(v138 + v121) = v13;
++v137;
++v138;
goto LABEL_156;
}
v21 = v7 - v9;
v5 -= v9;
*v140 -= *v140 >> 5;
v22 = v128[v4 + 192];
if ( v21 < 0x1000000 )
{
v21 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v23 = v22 * (v21 >> 11);
if ( v5 >= v23 )
{
v27 = v21 - v23;
v5 -= v23;
v128[v4 + 192] = v22 - (v22 >> 5);
if ( !v118 && !v137 )
return 1;
v28 = v128[v4 + 204];
if ( v27 < 0x1000000 )
{
v27 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v29 = v28 * (v27 >> 11);
if ( v5 >= v29 )
{
v34 = v27 - v29;
v5 -= v29;
v128[v4 + 204] = v28 - (v28 >> 5);
v35 = v128[v4 + 216];
if ( v34 < 0x1000000 )
{
v34 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v36 = v35 * (v34 >> 11);
if ( v5 >= v36 )
{
v39 = v34 - v36;
v5 -= v36;
v128[v4 + 216] = v35 - (v35 >> 5);
v40 = v128[v4 + 228];
if ( v39 < 0x1000000 )
{
v39 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v41 = v40 * (v39 >> 11);
if ( v5 >= v41 )
{
v24 = v39 - v41;
v5 -= v41;
v128[v4 + 228] = v40 - (v40 >> 5);
v38 = v119;
v119 = v122;
}
else
{
v24 = v40 * (v39 >> 11);
v42 = v40 + ((2048 - v40) >> 5);
v38 = v122;
v128[v4 + 228] = v42;
}
v122 = v123;
}
else
{
v24 = v35 * (v34 >> 11);
v37 = v35 + ((2048 - v35) >> 5);
v38 = v123;
v128[v4 + 216] = v37;
}
v123 = v135;
v135 = v38;
}
else
{
v30 = v28 * (v27 >> 11);
v128[v4 + 204] = v28 + ((2048 - v28) >> 5);
v142 = &v128[16 * v4 + 240 + v129];
v31 = *v142;
if ( v30 < 0x1000000 )
{
v30 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v32 = v31 * (v30 >> 11);
if ( v5 < v32 )
{
*v142 = v31 + ((unsigned int)(2048 - v31) >> 5);
v7 = v31 * (v30 >> 11);
++v137;
*(_BYTE *)(v138 + v121) = *(_BYTE *)(v138 + (v138 < v135 ? v127 : 0) - v135 + v121);
v33 = v138 + 1;
v136 = v4 < 7 ? 9 : 11;
LABEL_155:
v138 = v33;
goto LABEL_156;
}
v24 = v30 - v32;
v5 -= v32;
*v142 -= *v142 >> 5;
}
v25 = v4 < 7 ? 8 : 11;
v26 = v128 + 1332;
}
else
{
v24 = v22 * (v21 >> 11);
v128[v4 + 192] = v22 + ((2048 - v22) >> 5);
v25 = v4 + 12;
v26 = v128 + 818;
}
v43 = *v26;
v136 = v25;
if ( v24 < 0x1000000 )
{
v24 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v44 = v43 * (v24 >> 11);
if ( v5 >= v44 )
{
v46 = v24 - v44;
v5 -= v44;
*v26 -= *v26 >> 5;
v47 = v26[1];
if ( v46 < 0x1000000 )
{
v46 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v48 = v47 * (v46 >> 11);
if ( v5 >= v48 )
{
v7 = v46 - v48;
v5 -= v48;
v26[1] -= v26[1] >> 5;
v45 = (int)(v26 + 258);
v143 = 16;
v131 = 256;
}
else
{
v7 = v47 * (v46 >> 11);
v26[1] = v47 + ((unsigned int)(2048 - v47) >> 5);
v45 = (int)&v26[8 * v129 + 130];
v143 = 8;
v131 = 8;
}
}
else
{
v7 = v43 * (v24 >> 11);
*v26 = v43 + ((unsigned int)(2048 - v43) >> 5);
v45 = (int)&v26[8 * v129 + 2];
v143 = 0;
v131 = 8;
}
v125 = v45;
v49 = 1;
do
{
v50 = *(unsigned __int16 *)(v45 + 2 * v49);
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v51 = v50 * (v7 >> 11);
if ( v5 >= v51 )
{
v7 -= v51;
v5 -= v51;
v45 = v125;
*(_WORD *)(v125 + 2 * v49) = v50 - (v50 >> 5);
v49 = 2 * v49 + 1;
}
else
{
v7 = v50 * (v7 >> 11);
v45 = v125;
*(_WORD *)(v125 + 2 * v49) = v50 + ((2048 - v50) >> 5);
v49 *= 2;
}
}
while ( v49 < v131 );
v52 = v143 - v131 + v49;
v126 = v52;
if ( v25 >= 0xC )
break;
LABEL_145:
v33 = v138;
v106 = v52 + 2;
if ( a2 == v138 )
return 1;
v139 = a2 - v138;
if ( v139 >= v106 )
v139 = v106;
v137 += v139;
v107 = v33 + (v33 < v135 ? v127 : 0) - v135;
v124 = v106 - v139;
if ( v107 + v139 > v127 )
{
do
{
*(_BYTE *)(v33 + v121) = *(_BYTE *)(v107 + v121);
++v107;
++v33;
if ( v107 == v127 )
v107 = 0;
--v139;
}
while ( v139 );
goto LABEL_155;
}
v108 = (_BYTE *)(v33 + v121);
v113 = (_BYTE *)(v33 + v121 + v139);
v138 = v139 + v33;
do
{
*v108 = v108[(v33 < v135 ? v127 : 0) - v135];
++v108;
}
while ( v108 != v113 );
LABEL_156:
if ( v138 >= a2 || (unsigned int)v145 >= a3 )
goto LABEL_161;
v6 = v111;
v4 = v136;
v3 = a1;
}
v53 = v52;
if ( v52 >= 4 )
v53 = 3;
v54 = (int)&v128[64 * v53 + 432];
v55 = *(unsigned __int16 *)(v54 + 2);
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v56 = v55 * (v7 >> 11);
if ( v5 >= v56 )
{
v57 = v7 - v56;
v5 -= v56;
*(_WORD *)(v54 + 2) -= *(_WORD *)(v54 + 2) >> 5;
v58 = 3;
}
else
{
v57 = v55 * (v7 >> 11);
*(_WORD *)(v54 + 2) = v55 + ((unsigned int)(2048 - v55) >> 5);
v58 = 2;
}
v59 = 2 * v58;
v60 = *(unsigned __int16 *)(2 * v58 + v54);
if ( v57 < 0x1000000 )
{
v57 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v61 = v60 * (v57 >> 11);
if ( v5 >= v61 )
{
v62 = v57 - v61;
v5 -= v61;
*(_WORD *)(v59 + v54) = v60 - (v60 >> 5);
++v59;
}
else
{
v62 = v60 * (v57 >> 11);
*(_WORD *)(v59 + v54) = v60 + ((2048 - v60) >> 5);
}
v63 = 2 * v59;
v64 = *(unsigned __int16 *)(v63 + v54);
if ( v62 < 0x1000000 )
{
v62 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v65 = v64 * (v62 >> 11);
if ( v5 >= v65 )
{
v66 = v62 - v65;
v5 -= v65;
*(_WORD *)(v63 + v54) -= *(_WORD *)(v63 + v54) >> 5;
++v63;
}
else
{
v66 = v64 * (v62 >> 11);
*(_WORD *)(v63 + v54) = v64 + ((unsigned int)(2048 - v64) >> 5);
}
v67 = 2 * v63;
v68 = *(unsigned __int16 *)(v67 + v54);
if ( v66 < 0x1000000 )
{
v66 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v69 = v68 * (v66 >> 11);
if ( v5 >= v69 )
{
v70 = v66 - v69;
v5 -= v69;
*(_WORD *)(v67 + v54) -= *(_WORD *)(v67 + v54) >> 5;
++v67;
}
else
{
v70 = v68 * (v66 >> 11);
*(_WORD *)(v67 + v54) = v68 + ((unsigned int)(2048 - v68) >> 5);
}
v71 = 2 * v67;
v72 = *(unsigned __int16 *)(v71 + v54);
if ( v70 < 0x1000000 )
{
v70 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v73 = v72 * (v70 >> 11);
if ( v5 >= v73 )
{
v74 = v70 - v73;
v5 -= v73;
*(_WORD *)(v71 + v54) -= *(_WORD *)(v71 + v54) >> 5;
++v71;
}
else
{
v74 = v72 * (v70 >> 11);
*(_WORD *)(v71 + v54) = v72 + ((unsigned int)(2048 - v72) >> 5);
}
v75 = 2 * v71;
v76 = *(unsigned __int16 *)(v75 + v54);
if ( v74 < 0x1000000 )
{
v74 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v77 = v76 * (v74 >> 11);
if ( v5 >= v77 )
{
v7 = v74 - v77;
v5 -= v77;
*(_WORD *)(v75 + v54) -= *(_WORD *)(v75 + v54) >> 5;
++v75;
}
else
{
v7 = v76 * (v74 >> 11);
*(_WORD *)(v75 + v54) = v76 + ((unsigned int)(2048 - v76) >> 5);
}
v78 = v75 - 64;
if ( v78 < 4 )
{
LABEL_140:
v104 = v123;
v119 = v122;
v123 = v135;
v122 = v104;
v135 = v78 + 1;
if ( v118 )
v105 = v78 < v118;
else
v105 = v78 < v137;
if ( !v105 )
return 1;
v52 = v126;
v136 = v136 < 0x13 ? 7 : 10;
goto LABEL_145;
}
v79 = v78;
v80 = 1;
v81 = (v78 >> 1) - 1;
v82 = v78 & 1 | 2;
v116 = v81;
if ( v79 < 0xE )
{
v78 = v82 << v81;
v120 = 1;
v83 = (int)&v128[v78 - v79 + 687];
v144 = v83;
do
{
v84 = *(unsigned __int16 *)(v83 + 2 * v80);
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v85 = v84 * (v7 >> 11);
if ( v5 >= v85 )
{
v7 -= v85;
v5 -= v85;
v83 = v144;
v78 |= v120;
*(_WORD *)(v144 + 2 * v80) = v84 - (v84 >> 5);
v80 = 2 * v80 + 1;
}
else
{
v7 = v84 * (v7 >> 11);
v83 = v144;
*(_WORD *)(v144 + 2 * v80) = v84 + ((2048 - v84) >> 5);
v80 *= 2;
}
v120 *= 2;
--v116;
}
while ( v116 );
goto LABEL_140;
}
v86 = v81 - 4;
do
{
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v7 >>= 1;
v87 = v5 - v7;
v82 = 2 * v82 - (v87 >> 31) + 1;
v5 = (v7 & -(v87 >> 31)) + v87;
--v86;
}
while ( v86 );
v88 = v128[803];
v78 = 16 * v82;
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v89 = v88 * (v7 >> 11);
if ( v5 >= v89 )
{
v90 = v7 - v89;
v5 -= v89;
v128[803] -= v128[803] >> 5;
v91 = 3;
v78 |= 1u;
}
else
{
v90 = v88 * (v7 >> 11);
v128[803] = v88 + ((unsigned int)(2048 - v88) >> 5);
v91 = 2;
}
v132 = v91;
v92 = v128[v91 + 802];
if ( v90 < 0x1000000 )
{
v90 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v93 = v92 * (v90 >> 11);
if ( v5 >= v93 )
{
v94 = v90 - v93;
v5 -= v93;
v128[v132 + 802] = v92 - (v92 >> 5);
v96 = v132 * 2 + 1;
v78 |= 2u;
}
else
{
v94 = v92 * (v90 >> 11);
v95 = v92 + ((2048 - v92) >> 5);
v96 = v132 * 2;
v128[v132 + 802] = v95;
}
v133 = v96;
v97 = v128[v96 + 802];
if ( v94 < 0x1000000 )
{
v94 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v98 = v97 * (v94 >> 11);
if ( v5 >= v98 )
{
v99 = v94 - v98;
v5 -= v98;
v128[v133 + 802] = v97 - (v97 >> 5);
v101 = v133 * 2 + 1;
v78 |= 4u;
}
else
{
v99 = v97 * (v94 >> 11);
v100 = v97 + ((2048 - v97) >> 5);
v101 = v133 * 2;
v128[v133 + 802] = v100;
}
v134 = v101;
v102 = v128[v101 + 802];
if ( v99 < 0x1000000 )
{
v99 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v103 = v102 * (v99 >> 11);
if ( v5 >= v103 )
{
v7 = v99 - v103;
v5 -= v103;
v128[v134 + 802] = v102 - (v102 >> 5);
v78 |= 8u;
}
else
{
v7 = v102 * (v99 >> 11);
v128[v134 + 802] = v102 + ((2048 - v102) >> 5);
}
if ( v78 != -1 )
goto LABEL_140;
v124 = v126 + 274;
v136 -= 12;
LABEL_161:
v110 = v145;
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145 | (v5 << 8);
v110 = v145 + 1;
}
a1[7] = v7;
a1[6] = v110;
a1[9] = v138;
a1[18] = v124;
a1[14] = v135;
a1[11] = v137;
a1[16] = v122;
a1[8] = v5;
a1[15] = v123;
a1[13] = v136;
a1[17] = v119;
return 0;
}
int __stdcall sub_407B10(_DWORD *a1, unsigned int a2, unsigned int a3)
{
_DWORD *v3; // edi
unsigned int v4; // ebx
unsigned int v5; // esi
int v6; // edx
unsigned int v7; // eax
int v8; // ecx
unsigned int v9; // edx
unsigned __int16 *v10; // edx
unsigned int v11; // ecx
int v12; // ecx
unsigned int v13; // ecx
int v14; // edi
unsigned int v15; // ebx
int v16; // edi
int v17; // edi
int v18; // edx
int v19; // edi
unsigned int v20; // ebx
unsigned int v21; // eax
unsigned int v22; // edx
unsigned int v23; // edi
unsigned int v24; // eax
unsigned int v25; // ebx
unsigned __int16 *v26; // ecx
unsigned int v27; // eax
unsigned int v28; // edx
unsigned int v29; // edi
unsigned int v30; // eax
int v31; // edx
unsigned int v32; // edi
unsigned int v33; // edi
unsigned int v34; // eax
unsigned int v35; // edx
unsigned int v36; // edi
unsigned __int16 v37; // di
unsigned int v38; // edx
unsigned int v39; // eax
unsigned int v40; // edx
unsigned int v41; // edi
unsigned __int16 v42; // di
int v43; // edx
unsigned int v44; // edi
int v45; // edi
unsigned int v46; // eax
int v47; // edx
unsigned int v48; // edi
unsigned int v49; // edx
unsigned int v50; // ecx
unsigned int v51; // edi
unsigned int v52; // edx
int v53; // ecx
int v54; // ecx
int v55; // edx
unsigned int v56; // edi
unsigned int v57; // eax
int v58; // edx
int v59; // ebx
unsigned int v60; // edx
unsigned int v61; // edi
unsigned int v62; // eax
int v63; // ebx
int v64; // edx
unsigned int v65; // edi
unsigned int v66; // eax
int v67; // ebx
int v68; // edx
unsigned int v69; // edi
unsigned int v70; // eax
int v71; // ebx
int v72; // edx
unsigned int v73; // edi
unsigned int v74; // eax
int v75; // ebx
int v76; // edx
unsigned int v77; // edi
unsigned int v78; // ebx
unsigned int v79; // edx
int v80; // edi
int v81; // ecx
int v82; // ebx
int v83; // ecx
unsigned int v84; // edx
unsigned int v85; // ecx
int v86; // ecx
unsigned int v87; // esi
int v88; // edx
unsigned int v89; // edi
unsigned int v90; // eax
int v91; // edx
unsigned int v92; // edx
unsigned int v93; // edi
unsigned int v94; // eax
unsigned __int16 v95; // di
int v96; // edx
unsigned int v97; // edx
unsigned int v98; // edi
unsigned int v99; // eax
unsigned __int16 v100; // di
int v101; // edx
unsigned int v102; // edx
unsigned int v103; // edi
unsigned int v104; // edx
bool v105; // cf
unsigned int v106; // edx
unsigned int v107; // ecx
_BYTE *v108; // edx
unsigned __int8 *v110; // edx
int v111; // [esp+Ch] [ebp-50h]
int v112; // [esp+10h] [ebp-4Ch]
_BYTE *v113; // [esp+10h] [ebp-4Ch]
int v114; // [esp+14h] [ebp-48h]
unsigned __int16 *v115; // [esp+18h] [ebp-44h]
int v116; // [esp+18h] [ebp-44h]
int v117; // [esp+1Ch] [ebp-40h]
unsigned int v118; // [esp+20h] [ebp-3Ch]
unsigned int v119; // [esp+24h] [ebp-38h]
int v120; // [esp+24h] [ebp-38h]
int v121; // [esp+28h] [ebp-34h]
unsigned int v122; // [esp+2Ch] [ebp-30h]
unsigned int v123; // [esp+30h] [ebp-2Ch]
unsigned int v124; // [esp+34h] [ebp-28h]
int v125; // [esp+34h] [ebp-28h]
unsigned int v126; // [esp+34h] [ebp-28h]
unsigned int v127; // [esp+38h] [ebp-24h]
unsigned __int16 *v128; // [esp+3Ch] [ebp-20h]
int v129; // [esp+40h] [ebp-1Ch]
int v130; // [esp+40h] [ebp-1Ch]
unsigned int v131; // [esp+40h] [ebp-1Ch]
int v132; // [esp+40h] [ebp-1Ch]
int v133; // [esp+40h] [ebp-1Ch]
int v134; // [esp+40h] [ebp-1Ch]
unsigned int v135; // [esp+44h] [ebp-18h]
unsigned int v136; // [esp+48h] [ebp-14h]
unsigned int v137; // [esp+4Ch] [ebp-10h]
unsigned int v138; // [esp+50h] [ebp-Ch]
unsigned int v139; // [esp+50h] [ebp-Ch]
unsigned __int16 *v140; // [esp+54h] [ebp-8h]
unsigned __int16 *v141; // [esp+54h] [ebp-8h]
unsigned __int16 *v142; // [esp+54h] [ebp-8h]
int v143; // [esp+54h] [ebp-8h]
int v144; // [esp+54h] [ebp-8h]
unsigned __int8 *v145; // [esp+58h] [ebp-4h]
v3 = a1;
v128 = (unsigned __int16 *)a1[4];
v4 = a1[13];
v135 = a1[14];
v5 = a1[8];
v122 = a1[16];
v119 = a1[17];
v123 = a1[15];
v6 = (1 << a1[2]) - 1;
v121 = a1[5];
v114 = (1 << a1[1]) - 1;
v117 = *a1;
v127 = a1[10];
v137 = a1[11];
v138 = a1[9];
v145 = (unsigned __int8 *)a1[6];
v7 = a1[7];
v136 = v4;
v111 = v6;
v118 = a1[12];
v124 = 0;
while ( 1 )
{
v129 = v6 & v137;
v140 = &v128[16 * v4 + (v6 & v137)];
v8 = *v140;
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v9 = v8 * (v7 >> 11);
if ( v5 < v9 )
{
v7 = v8 * (v7 >> 11);
*v140 = v8 + ((unsigned int)(2048 - v8) >> 5);
v10 = v128 + 1846;
v141 = v128 + 1846;
if ( v118 || v137 )
{
v11 = v138;
if ( !v138 )
v11 = v127;
v10 = &v141[768 * ((v114 & v137) << v117) + 768 * (*(unsigned __int8 *)(v11 + v121 - 1) >> (8 - v117))];
v4 = v136;
v141 = v10;
}
if ( v4 >= 7 )
{
v130 = 256;
v16 = *(unsigned __int8 *)(v3[5] + (v138 < v135 ? v127 : 0) - v135 + v138);
v136 = v4 - (v4 < 0xA ? 3 : 6);
v13 = 1;
while ( 1 )
{
v17 = 2 * v16;
v18 = v17 & v130;
v112 = v17;
v115 = &v141[v13 + (v17 & v130) + v130];
v19 = *v115;
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v20 = v19 * (v7 >> 11);
if ( v5 >= v20 )
{
v7 -= v20;
v5 -= v20;
*v115 -= *v115 >> 5;
v13 = 2 * v13 + 1;
}
else
{
v7 = v19 * (v7 >> 11);
*v115 = v19 + ((unsigned int)(2048 - v19) >> 5);
v13 *= 2;
v18 = ~v18;
}
v130 &= v18;
if ( v13 >= 0x100 )
break;
v16 = v112;
}
}
else
{
v12 = v4;
if ( v4 >= 4 )
v12 = 3;
v136 = v4 - v12;
v13 = 1;
do
{
v14 = v10[v13];
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v15 = v14 * (v7 >> 11);
if ( v5 >= v15 )
{
v7 -= v15;
v5 -= v15;
v10[v13] -= v10[v13] >> 5;
v13 = 2 * v13 + 1;
}
else
{
v7 = v14 * (v7 >> 11);
v10[v13] = v14 + ((unsigned int)(2048 - v14) >> 5);
v13 *= 2;
}
}
while ( v13 < 0x100 );
}
*(_BYTE *)(v138 + v121) = v13;
++v137;
++v138;
goto LABEL_156;
}
v21 = v7 - v9;
v5 -= v9;
*v140 -= *v140 >> 5;
v22 = v128[v4 + 192];
if ( v21 < 0x1000000 )
{
v21 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v23 = v22 * (v21 >> 11);
if ( v5 >= v23 )
{
v27 = v21 - v23;
v5 -= v23;
v128[v4 + 192] = v22 - (v22 >> 5);
if ( !v118 && !v137 )
return 1;
v28 = v128[v4 + 204];
if ( v27 < 0x1000000 )
{
v27 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v29 = v28 * (v27 >> 11);
if ( v5 >= v29 )
{
v34 = v27 - v29;
v5 -= v29;
v128[v4 + 204] = v28 - (v28 >> 5);
v35 = v128[v4 + 216];
if ( v34 < 0x1000000 )
{
v34 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v36 = v35 * (v34 >> 11);
if ( v5 >= v36 )
{
v39 = v34 - v36;
v5 -= v36;
v128[v4 + 216] = v35 - (v35 >> 5);
v40 = v128[v4 + 228];
if ( v39 < 0x1000000 )
{
v39 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v41 = v40 * (v39 >> 11);
if ( v5 >= v41 )
{
v24 = v39 - v41;
v5 -= v41;
v128[v4 + 228] = v40 - (v40 >> 5);
v38 = v119;
v119 = v122;
}
else
{
v24 = v40 * (v39 >> 11);
v42 = v40 + ((2048 - v40) >> 5);
v38 = v122;
v128[v4 + 228] = v42;
}
v122 = v123;
}
else
{
v24 = v35 * (v34 >> 11);
v37 = v35 + ((2048 - v35) >> 5);
v38 = v123;
v128[v4 + 216] = v37;
}
v123 = v135;
v135 = v38;
}
else
{
v30 = v28 * (v27 >> 11);
v128[v4 + 204] = v28 + ((2048 - v28) >> 5);
v142 = &v128[16 * v4 + 240 + v129];
v31 = *v142;
if ( v30 < 0x1000000 )
{
v30 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v32 = v31 * (v30 >> 11);
if ( v5 < v32 )
{
*v142 = v31 + ((unsigned int)(2048 - v31) >> 5);
v7 = v31 * (v30 >> 11);
++v137;
*(_BYTE *)(v138 + v121) = *(_BYTE *)(v138 + (v138 < v135 ? v127 : 0) - v135 + v121);
v33 = v138 + 1;
v136 = v4 < 7 ? 9 : 11;
LABEL_155:
v138 = v33;
goto LABEL_156;
}
v24 = v30 - v32;
v5 -= v32;
*v142 -= *v142 >> 5;
}
v25 = v4 < 7 ? 8 : 11;
v26 = v128 + 1332;
}
else
{
v24 = v22 * (v21 >> 11);
v128[v4 + 192] = v22 + ((2048 - v22) >> 5);
v25 = v4 + 12;
v26 = v128 + 818;
}
v43 = *v26;
v136 = v25;
if ( v24 < 0x1000000 )
{
v24 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v44 = v43 * (v24 >> 11);
if ( v5 >= v44 )
{
v46 = v24 - v44;
v5 -= v44;
*v26 -= *v26 >> 5;
v47 = v26[1];
if ( v46 < 0x1000000 )
{
v46 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v48 = v47 * (v46 >> 11);
if ( v5 >= v48 )
{
v7 = v46 - v48;
v5 -= v48;
v26[1] -= v26[1] >> 5;
v45 = (int)(v26 + 258);
v143 = 16;
v131 = 256;
}
else
{
v7 = v47 * (v46 >> 11);
v26[1] = v47 + ((unsigned int)(2048 - v47) >> 5);
v45 = (int)&v26[8 * v129 + 130];
v143 = 8;
v131 = 8;
}
}
else
{
v7 = v43 * (v24 >> 11);
*v26 = v43 + ((unsigned int)(2048 - v43) >> 5);
v45 = (int)&v26[8 * v129 + 2];
v143 = 0;
v131 = 8;
}
v125 = v45;
v49 = 1;
do
{
v50 = *(unsigned __int16 *)(v45 + 2 * v49);
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v51 = v50 * (v7 >> 11);
if ( v5 >= v51 )
{
v7 -= v51;
v5 -= v51;
v45 = v125;
*(_WORD *)(v125 + 2 * v49) = v50 - (v50 >> 5);
v49 = 2 * v49 + 1;
}
else
{
v7 = v50 * (v7 >> 11);
v45 = v125;
*(_WORD *)(v125 + 2 * v49) = v50 + ((2048 - v50) >> 5);
v49 *= 2;
}
}
while ( v49 < v131 );
v52 = v143 - v131 + v49;
v126 = v52;
if ( v25 >= 0xC )
break;
LABEL_145:
v33 = v138;
v106 = v52 + 2;
if ( a2 == v138 )
return 1;
v139 = a2 - v138;
if ( v139 >= v106 )
v139 = v106;
v137 += v139;
v107 = v33 + (v33 < v135 ? v127 : 0) - v135;
v124 = v106 - v139;
if ( v107 + v139 > v127 )
{
do
{
*(_BYTE *)(v33 + v121) = *(_BYTE *)(v107 + v121);
++v107;
++v33;
if ( v107 == v127 )
v107 = 0;
--v139;
}
while ( v139 );
goto LABEL_155;
}
v108 = (_BYTE *)(v33 + v121);
v113 = (_BYTE *)(v33 + v121 + v139);
v138 = v139 + v33;
do
{
*v108 = v108[(v33 < v135 ? v127 : 0) - v135];
++v108;
}
while ( v108 != v113 );
LABEL_156:
if ( v138 >= a2 || (unsigned int)v145 >= a3 )
goto LABEL_161;
v6 = v111;
v4 = v136;
v3 = a1;
}
v53 = v52;
if ( v52 >= 4 )
v53 = 3;
v54 = (int)&v128[64 * v53 + 432];
v55 = *(unsigned __int16 *)(v54 + 2);
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v56 = v55 * (v7 >> 11);
if ( v5 >= v56 )
{
v57 = v7 - v56;
v5 -= v56;
*(_WORD *)(v54 + 2) -= *(_WORD *)(v54 + 2) >> 5;
v58 = 3;
}
else
{
v57 = v55 * (v7 >> 11);
*(_WORD *)(v54 + 2) = v55 + ((unsigned int)(2048 - v55) >> 5);
v58 = 2;
}
v59 = 2 * v58;
v60 = *(unsigned __int16 *)(2 * v58 + v54);
if ( v57 < 0x1000000 )
{
v57 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v61 = v60 * (v57 >> 11);
if ( v5 >= v61 )
{
v62 = v57 - v61;
v5 -= v61;
*(_WORD *)(v59 + v54) = v60 - (v60 >> 5);
++v59;
}
else
{
v62 = v60 * (v57 >> 11);
*(_WORD *)(v59 + v54) = v60 + ((2048 - v60) >> 5);
}
v63 = 2 * v59;
v64 = *(unsigned __int16 *)(v63 + v54);
if ( v62 < 0x1000000 )
{
v62 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v65 = v64 * (v62 >> 11);
if ( v5 >= v65 )
{
v66 = v62 - v65;
v5 -= v65;
*(_WORD *)(v63 + v54) -= *(_WORD *)(v63 + v54) >> 5;
++v63;
}
else
{
v66 = v64 * (v62 >> 11);
*(_WORD *)(v63 + v54) = v64 + ((unsigned int)(2048 - v64) >> 5);
}
v67 = 2 * v63;
v68 = *(unsigned __int16 *)(v67 + v54);
if ( v66 < 0x1000000 )
{
v66 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v69 = v68 * (v66 >> 11);
if ( v5 >= v69 )
{
v70 = v66 - v69;
v5 -= v69;
*(_WORD *)(v67 + v54) -= *(_WORD *)(v67 + v54) >> 5;
++v67;
}
else
{
v70 = v68 * (v66 >> 11);
*(_WORD *)(v67 + v54) = v68 + ((unsigned int)(2048 - v68) >> 5);
}
v71 = 2 * v67;
v72 = *(unsigned __int16 *)(v71 + v54);
if ( v70 < 0x1000000 )
{
v70 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v73 = v72 * (v70 >> 11);
if ( v5 >= v73 )
{
v74 = v70 - v73;
v5 -= v73;
*(_WORD *)(v71 + v54) -= *(_WORD *)(v71 + v54) >> 5;
++v71;
}
else
{
v74 = v72 * (v70 >> 11);
*(_WORD *)(v71 + v54) = v72 + ((unsigned int)(2048 - v72) >> 5);
}
v75 = 2 * v71;
v76 = *(unsigned __int16 *)(v75 + v54);
if ( v74 < 0x1000000 )
{
v74 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v77 = v76 * (v74 >> 11);
if ( v5 >= v77 )
{
v7 = v74 - v77;
v5 -= v77;
*(_WORD *)(v75 + v54) -= *(_WORD *)(v75 + v54) >> 5;
++v75;
}
else
{
v7 = v76 * (v74 >> 11);
*(_WORD *)(v75 + v54) = v76 + ((unsigned int)(2048 - v76) >> 5);
}
v78 = v75 - 64;
if ( v78 < 4 )
{
LABEL_140:
v104 = v123;
v119 = v122;
v123 = v135;
v122 = v104;
v135 = v78 + 1;
if ( v118 )
v105 = v78 < v118;
else
v105 = v78 < v137;
if ( !v105 )
return 1;
v52 = v126;
v136 = v136 < 0x13 ? 7 : 10;
goto LABEL_145;
}
v79 = v78;
v80 = 1;
v81 = (v78 >> 1) - 1;
v82 = v78 & 1 | 2;
v116 = v81;
if ( v79 < 0xE )
{
v78 = v82 << v81;
v120 = 1;
v83 = (int)&v128[v78 - v79 + 687];
v144 = v83;
do
{
v84 = *(unsigned __int16 *)(v83 + 2 * v80);
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v85 = v84 * (v7 >> 11);
if ( v5 >= v85 )
{
v7 -= v85;
v5 -= v85;
v83 = v144;
v78 |= v120;
*(_WORD *)(v144 + 2 * v80) = v84 - (v84 >> 5);
v80 = 2 * v80 + 1;
}
else
{
v7 = v84 * (v7 >> 11);
v83 = v144;
*(_WORD *)(v144 + 2 * v80) = v84 + ((2048 - v84) >> 5);
v80 *= 2;
}
v120 *= 2;
--v116;
}
while ( v116 );
goto LABEL_140;
}
v86 = v81 - 4;
do
{
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v7 >>= 1;
v87 = v5 - v7;
v82 = 2 * v82 - (v87 >> 31) + 1;
v5 = (v7 & -(v87 >> 31)) + v87;
--v86;
}
while ( v86 );
v88 = v128[803];
v78 = 16 * v82;
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v89 = v88 * (v7 >> 11);
if ( v5 >= v89 )
{
v90 = v7 - v89;
v5 -= v89;
v128[803] -= v128[803] >> 5;
v91 = 3;
v78 |= 1u;
}
else
{
v90 = v88 * (v7 >> 11);
v128[803] = v88 + ((unsigned int)(2048 - v88) >> 5);
v91 = 2;
}
v132 = v91;
v92 = v128[v91 + 802];
if ( v90 < 0x1000000 )
{
v90 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v93 = v92 * (v90 >> 11);
if ( v5 >= v93 )
{
v94 = v90 - v93;
v5 -= v93;
v128[v132 + 802] = v92 - (v92 >> 5);
v96 = v132 * 2 + 1;
v78 |= 2u;
}
else
{
v94 = v92 * (v90 >> 11);
v95 = v92 + ((2048 - v92) >> 5);
v96 = v132 * 2;
v128[v132 + 802] = v95;
}
v133 = v96;
v97 = v128[v96 + 802];
if ( v94 < 0x1000000 )
{
v94 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v98 = v97 * (v94 >> 11);
if ( v5 >= v98 )
{
v99 = v94 - v98;
v5 -= v98;
v128[v133 + 802] = v97 - (v97 >> 5);
v101 = v133 * 2 + 1;
v78 |= 4u;
}
else
{
v99 = v97 * (v94 >> 11);
v100 = v97 + ((2048 - v97) >> 5);
v101 = v133 * 2;
v128[v133 + 802] = v100;
}
v134 = v101;
v102 = v128[v101 + 802];
if ( v99 < 0x1000000 )
{
v99 <<= 8;
v5 = *v145++ | (v5 << 8);
}
v103 = v102 * (v99 >> 11);
if ( v5 >= v103 )
{
v7 = v99 - v103;
v5 -= v103;
v128[v134 + 802] = v102 - (v102 >> 5);
v78 |= 8u;
}
else
{
v7 = v102 * (v99 >> 11);
v128[v134 + 802] = v102 + ((2048 - v102) >> 5);
}
if ( v78 != -1 )
goto LABEL_140;
v124 = v126 + 274;
v136 -= 12;
LABEL_161:
v110 = v145;
if ( v7 < 0x1000000 )
{
v7 <<= 8;
v5 = *v145 | (v5 << 8);
v110 = v145 + 1;
}
a1[7] = v7;
a1[6] = v110;
a1[9] = v138;
a1[18] = v124;
a1[14] = v135;
a1[11] = v137;
a1[16] = v122;
a1[8] = v5;
a1[15] = v123;
a1[13] = v136;
a1[17] = v119;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment