sub_1403E93BC
VOID __fastcall sub_1403E93BC(INT64 a1, INT64 *a2){
INT64 *v2;
__int64 v3;
__int64 v4;
unsigned int v5;
INT64 v6;
INT64 v7;
__int64 v8;
__int64 v9;
unsigned __int64 v10;
unsigned __int64 v11;
int v12;
__int64 v13;
unsigned __int8 CurrentIrql;
unsigned int *v15;
unsigned int *v16;
char v17;
unsigned __int64 v18;
__int64 v19;
char *v20;
unsigned int *v21;
__int64 v22;
__int64 v23;
bool v24;
char v25;
char v26;
INT64 v27;
INT64 *v28;
__int64 v29;
unsigned __int64 v30;
unsigned __int64 v31;
__int64 v32;
__int64 v33;
INT64 v34;
unsigned int v35;
unsigned __int64 v36;
__int64 v37;
__int64 v38;
INT64 v39;
unsigned __int8 *v40;
__int64 v41;
_QWORD *v42;
char *v43;
unsigned __int64 v44;
int v45;
__int64 v46;
__int64 v47;
__int64 v48;
unsigned __int64 v49;
unsigned __int64 i;
_DWORD *v51;
unsigned int v52;
unsigned __int8 v53;
unsigned __int64 v54;
unsigned __int64 v55;
int v56;
__int64 v57;
__int64 v58;
INT64 *v59;
__int64 v60;
__int64 v61;
__int64 v62;
__int64 v63;
unsigned __int8 v64;
unsigned int *v65;
unsigned int *v66;
char v67;
unsigned __int64 v68;
__int64 v69;
char *v70;
unsigned int *v71;
__int64 v72;
__int64 v73;
bool v74;
char v75;
char v76;
int v77;
unsigned __int8 v78;
unsigned __int64 v79;
unsigned __int64 v80;
int v81;
__int64 v82;
__int64 v83;
char **v84;
unsigned int v85;
int v86;
unsigned int v87;
INT64 v88;
char *v89;
char **v90;
char *v91;
char *v92;
unsigned __int64 v93;
int v94;
char *j;
unsigned __int64 v96;
unsigned __int64 v97;
__int64 v98;
__int64 v99;
unsigned __int64 v100;
unsigned __int64 v101;
INT64 v102;
unsigned int v103;
unsigned int v104;
char *v105;
_DWORD *v106;
__int64 v107;
__int64 v108;
INT64 v109;
unsigned __int8 v110;
unsigned __int64 v111;
unsigned __int64 v112;
int v113;
__int64 v114;
__int64 *v115;
__int64 *v116;
__int64 v117;
__int64 v118;
__int64 v119;
__int64 v120;
INT64 v121;
unsigned __int8 v122;
unsigned __int64 v123;
int v124;
__int64 v125;
__int64 v126;
INT64 v127;
INT64 v128;
__int64 v129;
int v130;
unsigned __int64 v131;
unsigned __int64 v132;
unsigned __int64 v133;
INT64 v134;
unsigned int v135;
int v136;
INT64 v137;
unsigned __int64 v138;
unsigned int v139;
__int64 v140;
INT64 v141;
INT64 v142;
__int64 v143;
__int64 v144;
__int64 v145;
INT64 *v146;
INT64 a4[2];
char v148[88];
unsigned int v150;
int v151;
unsigned __int64 v152;
unsigned int v153;
unsigned __int8 v154;
unsigned __int64 v155;
int v156;
unsigned int v157;
v2 = a2;
v3 = a1;
if( *(_DWORD *)a2 == 12 )
{
if( *(_QWORD *)(a1 + 2432) )
{
v4 = *(unsigned int *)(a1 + 2084);
v5 = *(_DWORD *)(a1 + 2452);
LOBYTE(a1) = v5;
if( !(_DWORD)v4 )
{
LODWORD(a1) = v5 ^ ((unsigned __int8)v5 ^ (unsigned __int8)(8 * v5)) & 0x20;
*(_DWORD *)(v3 + 2452) = a1;
goto LABEL_6;
}
if( (((unsigned __int8)v5 ^ (unsigned __int8)(v5 >> 3)) & 4) == 0 )
{
LABEL_6:
if( (a1 & 4) != 0 )
{
v6 = v2[4];
if( v6 )
{
v7 = v6 + v4;
v8 = ((_WORD)v4 + (_WORD)v6) & 0xFFF;
v9 = (unsigned int)(*((_DWORD *)v2 + 10) - v4) + 4095i64;
}
else
{
v9 = v2[1] & 0xFFF;
v7 = v2[1];
v8 = *((unsigned int *)v2 + 4) + 4095i64;
}
v10 = v7 & 0xFFFFFFFFFFFFF000ui64;
v11 = (unsigned __int64)(v9 + v8) >> 12;
while( v11 )
{
--v11;
if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v3 + 688))(v10) && !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v3 + 2320) = *(int *)v2;
*(_QWORD *)(v3 + 2328) = v10;
*(_DWORD *)(v3 + 2296) = 1;
__b8(v3, 0i64);
}
*(_DWORD *)(v3 + 2088) += 256;
v10 += 4096i64;
v12 = *(_DWORD *)(v3 + 2088);
if( v6 )
{
*(_DWORD *)(v3 + 2084) += 4096;
if( v12 >= *(_DWORD *)(v3 + 2092) )
break;
}
}
if( v6 && !v11 )
*(_DWORD *)(v3 + 2084) = 0;
if( !*(_DWORD *)(v3 + 2084) )
{
v13 = *(_QWORD *)(v3 + 1344);
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xFui64);
(*(void(__fastcall **)(__int64))(v3 + 336))(v13);
v15 = **(unsigned int ***)(v3 + 1552);
v16 = v15 + 4;
v17 = *((_BYTE *)v15 + 12);
v18 = (unsigned __int64)&v15[6 * *v15 + 4];
while( 2 )
{
v19 = 24i64;
v20 = (char *)(v2 + 3);
v21 = v16;
while( 1 )
{
v22 = *(_QWORD *)v21;
v21 += 2;
v23 = *(_QWORD *)v20;
v20 += 8;
if( v22 != v23 )
break;
v19 = (unsigned int)(v19 - 8);
if( (unsigned int)v19 < 8 )
{
v24 = (_DWORD)v19 == 0;
while( !v24 )
{
v25 = *(_BYTE *)v21;
v21 = (unsigned int *)((char *)v21 + 1);
v26 = *v20++;
if( v25 != v26 )
goto LABEL_29;
v24 = (_DWORD)v19 == 1;
v19 = (unsigned int)(v19 - 1);
}
goto LABEL_30;
}
}
LABEL_29:
v16 += 6;
if( (unsigned __int64)v16 < v18 )
continue;
break;
}
LABEL_30:
(*(void(__fastcall **)(_QWORD, __int64, char *, unsigned int *))(v3 + 400))(
*(_QWORD *)(v3 + 1344),
v19,
v20,
v21);
__writecr8(CurrentIrql);
if( !v17 )
goto LABEL_35;
if( (*(_DWORD *)(v3 + 2452) & 0x10) != 0 && !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v3 + 2320) = *(int *)v2;
*(_QWORD *)(v3 + 2328) = 1i64;
*(_DWORD *)(v3 + 2296) = 1;
__b8(v3, 0i64);
}
if( v2[3] != 1 )
{
LABEL_35:
if( v16 == (unsigned int *)v18 && !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v3 + 2320) = *(int *)v2;
*(_QWORD *)(v3 + 2328) = v16;
*(_DWORD *)(v3 + 2296) = 1;
__b8(v3, 0i64);
}
}
}
return;
}
goto LABEL_39;
}
}
*(_DWORD *)(v3 + 2084) = 0;
return;
}
LABEL_39:
v27 = v2[4];
v28 = v2 + 6;
v127 = v27;
v146 = v2 + 6;
v29 = *(unsigned int *)(v3 + 2084);
v30 = ((v27 & 0xFFF) + (unsigned __int64)*((unsigned int *)v2 + 10) + 4095) >> 12;
v31 = (unsigned int)v30;
v130 = v30;
v138 = (unsigned int)v30;
v32 = (__int64)v2 + 20 * (unsigned int)v30 + 48;
v145 = v32;
v33 = (__int64)v2 + 20 * v29 + 48;
v34 = v27 + (unsigned int)((_DWORD)v29 << 12);
v144 = v33;
v137 = v34;
if( (*(_DWORD *)(v3 + 2448) & 0x40000000) != 0 && (*(_DWORD *)(v3 + 2452) & 0x1000) == 0 || !*(_QWORD *)(v3 + 2696) )
{
v35 = 0;
v150 = 0;
do
{
if( (unsigned int)v30 <= 0x10 )
{
v32 = v35;
if( v35 >= (unsigned int)v30 )
goto LABEL_82;
}
else
{
v36 = __rdtsc();
v37 = __ROR8__(v36, 3);
v32 = ((((v37 ^ v36) * (unsigned __int128)0x7010008004002001ui64) >> 64) ^ (0x7010008004002001i64 * (v37 ^ v36)))
% v31;
}
v38 = (unsigned int)v32;
v32 = (unsigned int)((_DWORD)v32 << 12);
v39 = v27 + (unsigned int)v32;
v40 = (unsigned __int8 *)v28 + 20 * v38;
if( (v40[15] & 0x80u) == 0 )
{
*(_DWORD *)(v3 + 2088) += 4096;
LODWORD(v41) = *(_DWORD *)(v3 + 2068);
v42 = (_QWORD *)v39;
v43 = (char *)v39;
if( v39 < (unsigned __int64)(v39 + 4096) )
{
do
{
_mm_prefetchnta(v43);
v43 += 64;
}
while( (unsigned __int64)v43 < v39 + 4096 );
}
v44 = *(_QWORD *)(v3 + 2072);
v45 = 32;
do
{
v46 = 8i64;
do
{
v47 = v44 ^ *v42;
v48 = v42[1];
v42 += 2;
v44 = __ROL8__(__ROL8__(v47, v41) ^ v48, v41);
--v46;
}
while( v46 );
v49 = __ROL8__(*(_QWORD *)(v3 + 2072) ^ ((unsigned __int64)v42 - v39), 17) ^ *(_QWORD *)(v3 + 2072) ^ ((unsigned __int64)v42 - v39);
v41 = ((unsigned __int8)(((v49 * (unsigned __int128)0x7010008004002001ui64) >> 64) ^ v49) ^ (unsigned __int8)v41) & 0x3F;
if( !(_DWORD)v41 )
v41 = 1i64;
--v45;
}
while( v45 );
for( i = v44; ; LODWORD(v44) = i ^ v44 )
{
i >>= 31;
if( !i )
break;
}
v51 = v40 + 16;
v52 = v44 & 0x7FFFFFFF;
if( v52 != (*((_DWORD *)v40 + 4) & 0x7FFFFFFF) )
{
v151 = *((_DWORD *)v40 + 4) >> 31;
if( (*(_DWORD *)(v3 + 2452) & 0x40) != 0 )
{
v53 = KeGetCurrentIrql();
v154 = v53;
__writecr8(2ui64);
v54 = v39 & 0xFFFFFFFFFFFFF000ui64;
v133 = (v39 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 2 )
{
v55 = v53;
while( 1 )
{
v56 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, _QWORD *, __int64))(v3 + 1128))(
v54,
0i64,
v42,
v41);
if( v56 != -1073741267 )
break;
if( !v151 )
goto LABEL_70;
v53 = v154;
if( v154 > 1u )
goto LABEL_68;
v55 = v154;
__writecr8(v154);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v56 < 0 )
{
LABEL_70:
__writecr8(v55);
v51 = v40 + 16;
goto LABEL_71;
}
v53 = v154;
LABEL_68:
v54 += 4096i64;
v133 += 4096i64;
if( v133 != ((v39 + 4095) | 0xFFF) )
continue;
break;
}
__writecr8(v55);
v51 = v40 + 16;
}
else
{
LABEL_71:
v57 = (unsigned int)*v51;
LODWORD(v57) = v57 & 0x7FFFFFFF;
if( !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(*(_QWORD *)(v3 + 1424) + 24i64) = v57 ^ v52;
if( !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v3 + 2320) = *(int *)v2;
*(_QWORD *)(v3 + 2328) = v39;
*(_DWORD *)(v3 + 2296) = 1;
__b8(v3, 0i64);
}
}
}
}
sub_1403E92DC(v3, v39, 0x1000ui64, (INT64)a4);
v58 = 16i64;
v59 = a4;
while( 1 )
{
v60 = *v59++;
v61 = *(_QWORD *)v40;
v40 += 8;
if( v60 != v61 )
break;
v58 = (unsigned int)(v58 - 8);
if( (unsigned int)v58 < 8 )
{
if( !(_DWORD)v58 )
goto LABEL_80;
while( 1 )
{
v32 = *(unsigned __int8 *)v59;
v59 = (INT64 *)((char *)v59 + 1);
v62 = *v40++;
if( v32 != v62 )
goto LABEL_90;
v24 = (_DWORD)v58 == 1;
v58 = (unsigned int)(v58 - 1);
if( v24 )
goto LABEL_80;
}
}
}
LABEL_90:
v77 = *v51 >> 31;
if( (*(_DWORD *)(v3 + 2452) & 0x40) != 0 )
{
v78 = KeGetCurrentIrql();
__writecr8(2ui64);
v79 = v39 & 0xFFFFFFFFFFFFF000ui64;
v152 = (v39 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 2 )
{
v80 = v78;
while( 1 )
{
v81 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, INT64 *))(v3 + 1128))(
v79,
0i64,
v58,
v59);
if( v81 != -1073741267 )
break;
if( !v77 )
goto LABEL_100;
if( v78 > 1u )
goto LABEL_98;
v80 = v78;
__writecr8(v78);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v81 < 0 )
{
LABEL_100:
__writecr8(v80);
goto LABEL_101;
}
LABEL_98:
v79 += 4096i64;
v152 += 4096i64;
if( v152 != ((v39 + 4095) | 0xFFF) )
continue;
break;
}
__writecr8(v80);
}
else
{
LABEL_101:
if( !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v3 + 2320) = *(int *)v2;
*(_QWORD *)(v3 + 2328) = v39;
*(_DWORD *)(v3 + 2296) = 1;
__b8(v3, 0i64);
}
}
LABEL_80:
*(_DWORD *)(v3 + 2088) += 0x10000;
v28 = v2 + 6;
LODWORD(v30) = v130;
v27 = v127;
v31 = v138;
}
v35 = v150 + 1;
v150 = v35;
}
while( v35 < 0x10 );
goto LABEL_82;
}
if( v33 == v32 )
goto LABEL_82;
do
{
if( *(_DWORD *)(v3 + 2088) >= *(_DWORD *)(v3 + 2092) )
break;
v82 = 0i64;
if( v33 == v32 )
goto LABEL_169;
v83 = v33;
do
{
if( *(char *)(v83 + 15) < 0 )
break;
v82 = (unsigned int)(v82 + 1);
v83 = v33 + 20 * v82;
}
while( v83 != v32 );
if( !(_DWORD)v82 )
goto LABEL_169;
v84 = *(char ***)(v3 + 2696);
v85 = v82;
LODWORD(v82) = 0;
v135 = v85;
v136 = 0;
v129 = v33;
v128 = v34;
v134 = (INT64)v84;
do
{
v86 = 8;
if( v85 < 8 )
v86 = v85;
v87 = 0;
v153 = v86;
v88 = v128;
v89 = v148;
v90 = v84;
do
{
v90[1] = (char *)4096;
v91 = (char *)(v88 + (v87 << 12));
*v90 = v91;
v92 = v91;
v93 = *(_QWORD *)(v3 + 2072);
*(_DWORD *)(v3 + 2088) += 4096;
v94 = *(_DWORD *)(v3 + 2068);
v155 = v93;
for( j = v91; j < v91 + 4096; j += 64 )
_mm_prefetchnta(j);
v96 = v155;
v97 = v155;
v156 = 32;
do
{
v98 = 8i64;
do
{
v99 = *((_QWORD *)v92 + 1) ^ __ROL8__(*(_QWORD *)v92 ^ v97, v94);
v92 += 16;
v97 = __ROL8__(v99, v94);
--v98;
}
while( v98 );
v100 = __ROL8__(v96 ^ (v92 - v91), 17) ^ v96 ^ (v92 - v91);
v94 = ((unsigned __int8)(((v100 * (unsigned __int128)0x7010008004002001ui64) >> 64) ^ v100) ^ (unsigned __int8)v94) & 0x3F;
if( !v94 )
LOBYTE(v94) = 1;
--v156;
}
while( v156 );
v101 = v97;
v88 = v128;
while( 1 )
{
v101 >>= 31;
if( !v101 )
break;
LODWORD(v97) = v101 ^ v97;
}
++v87;
*(_DWORD *)v89 = v97 & 0x7FFFFFFF;
v90 += 6;
v89 += 4;
}
while( v87 < v153 );
v2 = a2;
v102 = v128;
v103 = v153;
sub_1403E933C(v3, v134, v153);
v104 = 0;
v157 = 0;
if( v153 )
{
v105 = v148;
v106 = (_DWORD *)(v129 + 16);
while( 1 )
{
v107 = *(unsigned int *)v105;
v108 = (unsigned int)*v106;
v139 = v107;
if( (_DWORD)v107 != (*v106 & 0x7FFFFFFF) )
{
v109 = v102 + (v104 << 12);
v142 = v109;
if( (*(_DWORD *)(v3 + 2452) & 0x40) != 0 )
{
v110 = KeGetCurrentIrql();
__writecr8(2ui64);
v111 = v109 & 0xFFFFFFFFFFFFF000ui64;
v140 = (v109 + 4095) | 0xFFF;
v131 = (v109 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 2 )
{
v112 = v110;
while( 1 )
{
v113 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v3 + 1128))(v111, 0i64);
if( v113 != -1073741267 )
break;
if( v110 > 1u )
goto LABEL_136;
v112 = v110;
__writecr8(v110);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v113 < 0 )
{
__writecr8(v112);
v108 = (unsigned int)*v106;
v103 = v153;
v107 = v139;
v109 = v142;
v104 = v157;
v102 = v128;
break;
}
LABEL_136:
v111 += 4096i64;
v131 += 4096i64;
if( v131 != v140 )
continue;
goto LABEL_137;
}
}
LODWORD(v108) = v108 & 0x7FFFFFFF;
if( !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(*(_QWORD *)(v3 + 1424) + 24i64) = v107 ^ v108;
if( !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v3 + 2312) = (char *)a2 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v3 + 2320) = *(int *)a2;
*(_QWORD *)(v3 + 2328) = v109;
*(_DWORD *)(v3 + 2296) = 1;
__b8(v3, 0i64);
}
}
}
v114 = 16i64;
v115 = (__int64 *)(v129 + 20i64 * v104);
v116 = (__int64 *)(48i64 * v104 + v134 + 16);
while( 1 )
{
v117 = *v116++;
v118 = *v115++;
if( v117 != v118 )
break;
v114 = (unsigned int)(v114 - 8);
if( (unsigned int)v114 < 8 )
{
if( !(_DWORD)v114 )
goto LABEL_162;
while( 1 )
{
v119 = *(unsigned __int8 *)v116;
v116 = (__int64 *)((char *)v116 + 1);
v120 = *(unsigned __int8 *)v115;
v115 = (__int64 *)((char *)v115 + 1);
if( v119 != v120 )
goto LABEL_149;
v24 = (_DWORD)v114 == 1;
v114 = (unsigned int)(v114 - 1);
if( v24 )
goto LABEL_162;
}
}
}
LABEL_149:
v121 = v102 + (v104 << 12);
v141 = v121;
if( (*(_DWORD *)(v3 + 2452) & 0x40) != 0 )
{
v122 = KeGetCurrentIrql();
__writecr8(2ui64);
v123 = v121 & 0xFFFFFFFFFFFFF000ui64;
v143 = (v121 + 4095) | 0xFFF;
v132 = (v121 & 0xFFFFFFFFFFFFF000ui64) - 1;
while( 2 )
{
v112 = v122;
while( 1 )
{
v124 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, __int64 *))(v3 + 1128))(
v123,
0i64,
v114,
v115);
if( v124 != -1073741267 )
break;
if( v122 > 1u )
goto LABEL_156;
v112 = v122;
__writecr8(v122);
KeGetCurrentIrql();
__writecr8(2ui64);
}
if( v124 < 0 )
{
__writecr8(v112);
v121 = v141;
v104 = v157;
goto LABEL_159;
}
LABEL_156:
v123 += 4096i64;
v132 += 4096i64;
if( v132 != v143 )
continue;
break;
}
LABEL_137:
__writecr8(v112);
v104 = v157;
goto LABEL_161;
}
LABEL_159:
if( !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v3 + 2312) = (char *)a2 - 0x4C48B4211BBACBEBi64;
v125 = *(int *)a2;
*(_QWORD *)(v3 + 2328) = v121;
*(_QWORD *)(v3 + 2320) = v125;
*(_DWORD *)(v3 + 2296) = 1;
__b8(v3, 0i64);
}
LABEL_161:
v103 = v153;
LABEL_162:
v102 = v128;
++v104;
v105 += 4;
v157 = v104;
v106 += 5;
if( v104 >= v103 )
{
LODWORD(v82) = v136;
break;
}
}
}
v82 = v103 + (unsigned int)v82;
v136 = v82;
v128 = (v103 << 12) + v102;
*(_DWORD *)(v3 + 2088) += v103 << 15;
v85 = v135 - v103;
v129 += 20i64 * v103;
v135 -= v103;
if( *(_DWORD *)(v3 + 2088) >= *(_DWORD *)(v3 + 2092) )
break;
v84 = (char **)v134;
}
while( v85 );
v33 = v144;
v32 = v145;
v34 = v137;
LABEL_169:
while( 1 )
{
v126 = v33 + 20 * v82;
if( v126 == v32 || *(char *)(v126 + 15) >= 0 )
break;
v82 = (unsigned int)(v82 + 1);
}
v34 += (unsigned int)((_DWORD)v82 << 12);
v137 = v34;
v33 += 20 * v82;
v144 = v33;
}
while( v33 != v32 );
if( v33 != v32 )
{
*(_DWORD *)(v3 + 2084) = (v33 - (__int64)v146) / 20;
return;
}
LABEL_82:
v63 = *(_QWORD *)(v3 + 1344);
v64 = KeGetCurrentIrql();
__writecr8(0xFui64);
(*(void(__fastcall **)(__int64, __int64))(v3 + 336))(v63, v32);
v65 = **(unsigned int ***)(v3 + 1552);
v66 = v65 + 4;
v67 = *((_BYTE *)v65 + 12);
v68 = (unsigned __int64)&v65[6 * *v65 + 4];
while( 2 )
{
v69 = 24i64;
v70 = (char *)(v2 + 3);
v71 = v66;
while( 1 )
{
v72 = *(_QWORD *)v71;
v71 += 2;
v73 = *(_QWORD *)v70;
v70 += 8;
if( v72 != v73 )
break;
v69 = (unsigned int)(v69 - 8);
if( (unsigned int)v69 < 8 )
{
v74 = (_DWORD)v69 == 0;
while( !v74 )
{
v75 = *(_BYTE *)v71;
v71 = (unsigned int *)((char *)v71 + 1);
v76 = *v70++;
if( v75 != v76 )
goto LABEL_173;
v74 = (_DWORD)v69 == 1;
v69 = (unsigned int)(v69 - 1);
}
goto LABEL_174;
}
}
LABEL_173:
v66 += 6;
if( (unsigned __int64)v66 < v68 )
continue;
break;
}
LABEL_174:
(*(void(__fastcall **)(_QWORD, __int64, char *, unsigned int *))(v3 + 400))(*(_QWORD *)(v3 + 1344), v69, v70, v71);
__writecr8(v64);
if( !v67 )
goto LABEL_185;
if( (*(_DWORD *)(v3 + 2452) & 0x10) != 0 && !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v3 + 2320) = *(int *)v2;
*(_QWORD *)(v3 + 2328) = 1i64;
*(_DWORD *)(v3 + 2296) = 1;
__b8(v3, 0i64);
}
if( v2[3] != 1 )
{
LABEL_185:
if( v66 == (unsigned int *)v68 && !*(_DWORD *)(v3 + 2296) )
{
*(_QWORD *)(v3 + 2304) = v3 - 0x5C5FC0A76E374B18i64;
*(_QWORD *)(v3 + 2312) = (char *)v2 - 0x4C48B4211BBACBEBi64;
*(_QWORD *)(v3 + 2320) = *(int *)v2;
*(_QWORD *)(v3 + 2328) = v66;
*(_DWORD *)(v3 + 2296) = 1;
__b8(v3, 0i64);
}
}
*(_DWORD *)(v3 + 2084) = 0;
}Referenced by:
Argument1