unsigned int __thiscall sub_540CB0(_DWORD *this, _DWORD *a2, int a3)
{
_DWORD *v3; // ebp
int v4; // edi
char *v5; // ST14_4
int v6; // eax
int v7; // edi
float v8; // ST14_4
int v9; // eax
int v10; // edi
float v11; // ST14_4
int v12; // eax
int v13; // edi
float v14; // ST14_4
int v15; // eax
int v16; // edi
char *v17; // ST14_4
int v18; // eax
int v19; // edi
char *v20; // ST14_4
int v21; // eax
int v22; // edi
char *v23; // ST14_4
int v24; // eax
int v25; // edi
float v26; // ST14_4
int v27; // eax
int v28; // edi
float v29; // ST14_4
int v30; // eax
int v31; // edi
float v32; // ST14_4
int v33; // eax
int v34; // edi
float v35; // ST14_4
int v36; // eax
int v37; // edi
int v38; // eax
int v39; // edi
char *v40; // ST14_4
int v41; // eax
int v42; // edi
unsigned int v43; // eax
int v44; // eax
int v45; // eax
int v46; // edi
char *v47; // ST14_4
int v48; // eax
int v49; // edi
char *v50; // ST14_4
int v51; // eax
int v52; // edi
char *v53; // ST14_4
int v54; // eax
int v55; // edi
char *v56; // ST14_4
int v57; // eax
int v58; // edi
char *v59; // ST14_4
int v60; // eax
int v61; // edi
char *v62; // ST14_4
int v63; // eax
int v64; // edi
char *v65; // ST14_4
int v66; // eax
int v67; // edi
float v68; // ST14_4
int v69; // eax
int v70; // edi
float v71; // ST14_4
int v72; // eax
int v73; // edi
float v74; // ST14_4
int v75; // eax
int v76; // edi
float v77; // ST14_4
int v78; // eax
int v79; // edi
float v80; // ST14_4
int v81; // eax
int v82; // edi
float v83; // ST14_4
int v84; // eax
int v85; // edi
float v86; // ST14_4
int v87; // eax
int v88; // edi
int v89; // eax
int v90; // edi
int v91; // eax
int v92; // edi
int v93; // eax
int v94; // edi
int v95; // eax
int v96; // edi
int v97; // eax
int v98; // edi
int v99; // eax
signed int v100; // edi
int v101; // eax
int v102; // edi
char *v103; // ST14_4
int v104; // eax
int v105; // edi
char *v106; // ST14_4
int v107; // eax
int v108; // edi
char *v109; // ST14_4
int v110; // eax
int v111; // esi
char *v112; // ST14_4
int v113; // eax
unsigned int result; // eax
unsigned int v115; // eax
unsigned int v116; // eax
int v117; // eax
unsigned int v118; // eax
unsigned int v119; // eax
unsigned int v120; // eax
unsigned int v121; // eax
unsigned int v122; // eax
unsigned int v123; // eax
unsigned int v124; // eax
unsigned int v125; // eax
int v126; // eax
unsigned int v127; // eax
int v128; // eax
unsigned int v129; // eax
unsigned int v130; // eax
unsigned int v131; // eax
int v132; // eax
int v133; // eax
int v134; // eax
int v135; // eax
int v136; // eax
int v137; // eax
int v138; // eax
int v139; // eax
int v140; // eax
int v141; // eax
int v142; // eax
int v143; // eax
int v144; // eax
int v145; // eax
signed int v146; // edi
int v147; // ebx
int v148; // eax
int v149; // eax
signed int v150; // edi
int v151; // ebx
int v152; // eax
int v153; // eax
signed int v154; // edi
int v155; // ebx
int v156; // eax
int v157; // eax
signed int v158; // edi
int v159; // ebx
int v160; // eax
int v161; // eax
int v162; // eax
int v163; // eax
int v164; // eax
unsigned int v165; // eax
unsigned int v166; // eax
unsigned int v167; // eax
unsigned __int8 *v168; // [esp+10h] [ebp-1D0h]
char v169; // [esp+14h] [ebp-1CCh]
unsigned int i; // [esp+24h] [ebp-1BCh]
char v171; // [esp+28h] [ebp-1B8h]
int v172; // [esp+38h] [ebp-1A8h]
char v173[80]; // [esp+3Ch] [ebp-1A4h]
char v174; // [esp+8Ch] [ebp-154h]
char v175; // [esp+C0h] [ebp-120h]
char v176; // [esp+144h] [ebp-9Ch]
char v177; // [esp+145h] [ebp-9Bh]
__int16 v178; // [esp+1C1h] [ebp-1Fh]
char v179; // [esp+1C3h] [ebp-1Dh]
char v180; // [esp+1C4h] [ebp-1Ch]
int v181; // [esp+1DCh] [ebp-4h]
v3 = this;
sub_40289C(a2, a3);
v176 = 0;
memset(&v177, 0, 0x7Cu);
v178 = 0;
v179 = 0;
if ( (_BYTE)a3 )
{
v4 = sub_85AAE0(aCategory) + 16;
sub_402E96(2, 1);
v5 = (char *)v3[4];
v181 = 0;
sub_40802B(v5);
if ( *(_DWORD *)(v4 + 8) )
sub_405957(1, 32);
v6 = sub_40DF53(&v171);
LOBYTE(v181) = 1;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v6, 0, -1);
LOBYTE(v181) = 0;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
sub_85AAE0(aName);
sub_406EBF(v3 + 5, 0, -1);
sub_85AAE0(aComment);
sub_406EBF(v3 + 9, 0, -1);
sub_85AAE0(aModel);
sub_406EBF(v3 + 13, 0, -1);
v7 = sub_85AAE0(aHeight) + 16;
sub_402E96(2, 1);
v8 = *((float *)v3 + 17);
v181 = 2;
sub_408189(v8);
if ( *(_DWORD *)(v7 + 8) )
sub_405957(1, 32);
v9 = sub_40DF53(&v171);
LOBYTE(v181) = 3;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v9, 0, -1);
LOBYTE(v181) = 2;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
v10 = sub_85AAE0(aSize) + 16;
sub_402E96(2, 1);
v11 = *((float *)v3 + 18);
v181 = 4;
sub_408189(v11);
if ( *(_DWORD *)(v10 + 8) )
sub_405957(1, 32);
v12 = sub_40DF53(&v171);
LOBYTE(v181) = 5;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v12, 0, -1);
LOBYTE(v181) = 4;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
v13 = sub_85AAE0(aDelaytime) + 16;
sub_402E96(2, 1);
v14 = *((float *)v3 + 19);
v181 = 6;
sub_408189(v14);
if ( *(_DWORD *)(v13 + 8) )
sub_405957(1, 32);
v15 = sub_40DF53(&v171);
LOBYTE(v181) = 7;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v15, 0, -1);
LOBYTE(v181) = 6;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
v16 = sub_85AAE0(aLevel) + 16;
sub_402E96(2, 1);
v17 = (char *)v3[20];
v181 = 8;
sub_40802B(v17);
if ( *(_DWORD *)(v16 + 8) )
sub_405957(1, 32);
v18 = sub_40DF53(&v171);
LOBYTE(v181) = 9;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v18, 0, -1);
LOBYTE(v181) = 8;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
v19 = sub_85AAE0(aMaxhp) + 16;
sub_402E96(2, 1);
v20 = (char *)v3[21];
v181 = 10;
sub_40802B(v20);
if ( *(_DWORD *)(v19 + 8) )
sub_405957(1, 32);
v21 = sub_40DF53(&v171);
LOBYTE(v181) = 11;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v21, 0, -1);
LOBYTE(v181) = 10;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
v22 = sub_85AAE0(aMaxmp) + 16;
sub_402E96(2, 1);
v23 = (char *)v3[22];
v181 = 12;
sub_40802B(v23);
if ( *(_DWORD *)(v22 + 8) )
sub_405957(1, 32);
v24 = sub_40DF53(&v171);
LOBYTE(v181) = 13;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v24, 0, -1);
LOBYTE(v181) = 12;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
v25 = sub_85AAE0(aMovespeed) + 16;
sub_402E96(2, 1);
v26 = *((float *)v3 + 23);
v181 = 14;
sub_408189(v26);
if ( *(_DWORD *)(v25 + 8) )
sub_405957(1, 32);
v27 = sub_40DF53(&v171);
LOBYTE(v181) = 15;
v28 = std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v27, 0, -1);
LOBYTE(v181) = 14;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
sub_402E96(2, 1);
v29 = *((float *)v3 + 24);
v181 = 16;
sub_408189(v29);
if ( *(_DWORD *)(v28 + 8) )
sub_405957(1, 32);
v30 = sub_40DF53(&v169);
LOBYTE(v181) = 17;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v30, 0, -1);
LOBYTE(v181) = 16;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v31 = sub_85AAE0(aBasemovespeed) + 16;
sub_402E96(2, 1);
v32 = *((float *)v3 + 25);
v181 = 18;
sub_408189(v32);
if ( *(_DWORD *)(v31 + 8) )
sub_405957(1, 32);
v33 = sub_40DF53(&v169);
LOBYTE(v181) = 19;
v34 = std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v33, 0, -1);
LOBYTE(v181) = 18;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
sub_402E96(2, 1);
v35 = *((float *)v3 + 26);
v181 = 20;
sub_408189(v35);
if ( *(_DWORD *)(v34 + 8) )
sub_405957(1, 32);
v36 = sub_40DF53(&v171);
LOBYTE(v181) = 21;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v36, 0, -1);
LOBYTE(v181) = 20;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
v168 = (unsigned __int8 *)v3[27];
v37 = sub_85AAE0(aNatural) + 16;
sub_402E96(2, 1);
v181 = 22;
sub_40802B((char *)v168);
if ( *(_DWORD *)(v37 + 8) )
sub_405957(1, 32);
v38 = sub_40DF53(&v169);
LOBYTE(v181) = 23;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v38, 0, -1);
LOBYTE(v181) = 22;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v39 = sub_85AAE0(aImmunitylevel) + 16;
sub_402E96(2, 1);
v40 = (char *)v3[28];
v181 = 24;
sub_40802B(v40);
if ( *(_DWORD *)(v39 + 8) )
sub_405957(1, 32);
v41 = sub_40DF53(&v169);
LOBYTE(v181) = 25;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v41, 0, -1);
LOBYTE(v181) = 24;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v42 = sub_85AAE0(aAbnormalimmuni) + 16;
i = -1;
sub_40E089(v42);
v43 = *(_DWORD *)(v42 + 8);
if ( v43 < i )
i = *(_DWORD *)(v42 + 8);
if ( i )
{
memcpy(*(void **)(v42 + 4), (const void *)(*(_DWORD *)(v42 + 4) + i), v43 - i);
v168 = (unsigned __int8 *)(*(_DWORD *)(v42 + 8) - i);
if ( (unsigned __int8)sub_40414C(v168, 0) )
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::_Eos(v168);
}
for ( i = 0; ; ++i )
{
v44 = v3[30];
if ( !v44 || i >= (v3[31] - v44) >> 2 )
break;
v168 = (unsigned __int8 *)v3[30];
sub_402E96(2, 1);
v181 = 26;
sub_40802B(*(char **)&v168[4 * i]);
if ( *(_DWORD *)(v42 + 8) )
sub_405957(1, 32);
v45 = sub_40DF53(&v169);
LOBYTE(v181) = 27;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v45, 0, -1);
LOBYTE(v181) = 26;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
}
v46 = sub_85AAE0(aBonusexp) + 16;
sub_402E96(2, 1);
v47 = (char *)v3[33];
v181 = 28;
sub_40802B(v47);
if ( *(_DWORD *)(v46 + 8) )
sub_405957(1, 32);
v48 = sub_40DF53(&v169);
LOBYTE(v181) = 29;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v48, 0, -1);
LOBYTE(v181) = 28;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v49 = sub_85AAE0(aAtkpointP) + 16;
sub_402E96(2, 1);
v50 = (char *)v3[34];
v181 = 30;
sub_40802B(v50);
if ( *(_DWORD *)(v49 + 8) )
sub_405957(1, 32);
v51 = sub_40DF53(&v169);
LOBYTE(v181) = 31;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v51, 0, -1);
LOBYTE(v181) = 30;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v52 = sub_85AAE0(aAtkpointM) + 16;
sub_402E96(2, 1);
v53 = (char *)v3[35];
v181 = 32;
sub_40802B(v53);
if ( *(_DWORD *)(v52 + 8) )
sub_405957(1, 32);
v54 = sub_40DF53(&v169);
LOBYTE(v181) = 33;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v54, 0, -1);
LOBYTE(v181) = 32;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v55 = sub_85AAE0(aDefpointP) + 16;
sub_402E96(2, 1);
v56 = (char *)v3[36];
v181 = 34;
sub_40802B(v56);
if ( *(_DWORD *)(v55 + 8) )
sub_405957(1, 32);
v57 = sub_40DF53(&v169);
LOBYTE(v181) = 35;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v57, 0, -1);
LOBYTE(v181) = 34;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v58 = sub_85AAE0(aDefpointM) + 16;
sub_402E96(2, 1);
v59 = (char *)v3[37];
v181 = 36;
sub_40802B(v59);
if ( *(_DWORD *)(v58 + 8) )
sub_405957(1, 32);
v60 = sub_40DF53(&v169);
LOBYTE(v181) = 37;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v60, 0, -1);
LOBYTE(v181) = 36;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v61 = sub_85AAE0(aHitrate) + 16;
sub_402E96(2, 1);
v62 = (char *)v3[38];
v181 = 38;
sub_40802B(v62);
if ( *(_DWORD *)(v61 + 8) )
sub_405957(1, 32);
v63 = sub_40DF53(&v169);
LOBYTE(v181) = 39;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v63, 0, -1);
LOBYTE(v181) = 38;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v64 = sub_85AAE0(aAvirate) + 16;
sub_402E96(2, 1);
v65 = (char *)v3[39];
v181 = 40;
sub_40802B(v65);
if ( *(_DWORD *)(v64 + 8) )
sub_405957(1, 32);
v66 = sub_40DF53(&v169);
LOBYTE(v181) = 41;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v66, 0, -1);
LOBYTE(v181) = 40;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v67 = sub_85AAE0(aAtkinterval) + 16;
sub_402E96(2, 1);
v68 = *((float *)v3 + 40);
v181 = 42;
sub_408189(v68);
if ( *(_DWORD *)(v67 + 8) )
sub_405957(1, 32);
v69 = sub_40DF53(&v169);
LOBYTE(v181) = 43;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v69, 0, -1);
LOBYTE(v181) = 42;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v70 = sub_85AAE0(aViewrange) + 16;
sub_402E96(2, 1);
v71 = *((float *)v3 + 41);
v181 = 44;
sub_408189(v71);
if ( *(_DWORD *)(v70 + 8) )
sub_405957(1, 32);
v72 = sub_40DF53(&v169);
LOBYTE(v181) = 45;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v72, 0, -1);
LOBYTE(v181) = 44;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v73 = sub_85AAE0(aTracerange) + 16;
sub_402E96(2, 1);
v74 = *((float *)v3 + 42);
v181 = 46;
sub_408189(v74);
if ( *(_DWORD *)(v73 + 8) )
sub_405957(1, 32);
v75 = sub_40DF53(&v169);
LOBYTE(v181) = 47;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v75, 0, -1);
LOBYTE(v181) = 46;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v76 = sub_85AAE0(aAttackrange) + 16;
sub_402E96(2, 1);
v77 = *((float *)v3 + 43);
v181 = 48;
sub_408189(v77);
if ( *(_DWORD *)(v76 + 8) )
sub_405957(1, 32);
v78 = sub_40DF53(&v169);
LOBYTE(v181) = 49;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v78, 0, -1);
LOBYTE(v181) = 48;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v79 = sub_85AAE0(aEchorange) + 16;
sub_402E96(2, 1);
v80 = *((float *)v3 + 44);
v181 = 50;
sub_408189(v80);
if ( *(_DWORD *)(v79 + 8) )
sub_405957(1, 32);
v81 = sub_40DF53(&v169);
LOBYTE(v181) = 51;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v81, 0, -1);
LOBYTE(v181) = 50;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v82 = sub_85AAE0(aPatrolrange) + 16;
sub_402E96(2, 1);
v83 = *((float *)v3 + 45);
v181 = 52;
sub_408189(v83);
if ( *(_DWORD *)(v82 + 8) )
sub_405957(1, 32);
v84 = sub_40DF53(&v169);
LOBYTE(v181) = 53;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v84, 0, -1);
LOBYTE(v181) = 52;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v85 = sub_85AAE0(aEscapehp) + 16;
sub_402E96(2, 1);
v86 = *((float *)v3 + 46);
v181 = 54;
sub_408189(v86);
if ( *(_DWORD *)(v85 + 8) )
sub_405957(1, 32);
v87 = sub_40DF53(&v169);
LOBYTE(v181) = 55;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v87, 0, -1);
LOBYTE(v181) = 54;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v168 = (unsigned __int8 *)1;
i = (unsigned int)(v3 + 52);
do
{
sprintf(&v176, aDropitemND, v168);
v88 = sub_85AAE0((unsigned __int8 *)&v176) + 16;
sub_402E96(2, 1);
v181 = 56;
sub_40802B(*(char **)(i - 4));
if ( *(_DWORD *)(v88 + 8) )
sub_405957(1, 32);
v89 = sub_40DF53(&v169);
LOBYTE(v181) = 57;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v89, 0, -1);
LOBYTE(v181) = 56;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
sprintf(&v176, aDroprateND, v168);
v90 = sub_85AAE0((unsigned __int8 *)&v176) + 16;
sub_402E96(2, 1);
v181 = 58;
sub_408189(*(float *)i);
if ( *(_DWORD *)(v90 + 8) )
sub_405957(1, 32);
v91 = sub_40DF53(&v171);
LOBYTE(v181) = 59;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v91, 0, -1);
LOBYTE(v181) = 58;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
++v168;
i += 8;
}
while ( (unsigned int)(v168 - 1) < 0x18 );
i = 1;
v168 = (unsigned __int8 *)(v3 + 100);
do
{
sprintf(&v176, aDropitemMD, i);
v92 = sub_85AAE0((unsigned __int8 *)&v176) + 16;
sub_402E96(2, 1);
v181 = 60;
sub_40802B(*((char **)v168 - 1));
if ( *(_DWORD *)(v92 + 8) )
sub_405957(1, 32);
v93 = sub_40DF53(&v169);
LOBYTE(v181) = 61;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v93, 0, -1);
LOBYTE(v181) = 60;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
sprintf(&v176, aDroprateMD, i);
v94 = sub_85AAE0((unsigned __int8 *)&v176) + 16;
sub_402E96(2, 1);
v181 = 62;
sub_408189(*(float *)v168);
if ( *(_DWORD *)(v94 + 8) )
sub_405957(1, 32);
v95 = sub_40DF53(&v171);
LOBYTE(v181) = 63;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v95, 0, -1);
LOBYTE(v181) = 62;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
++i;
v168 += 8;
}
while ( i - 1 < 3 );
i = 1;
v168 = (unsigned __int8 *)(v3 + 106);
do
{
sprintf(&v176, aDropitemBD, i);
v96 = sub_85AAE0((unsigned __int8 *)&v176) + 16;
sub_402E96(2, 1);
v181 = 64;
sub_40802B(*((char **)v168 - 1));
if ( *(_DWORD *)(v96 + 8) )
sub_405957(1, 32);
v97 = sub_40DF53(&v169);
LOBYTE(v181) = 65;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v97, 0, -1);
LOBYTE(v181) = 64;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
sprintf(&v176, aDroprateBD, i);
v98 = sub_85AAE0((unsigned __int8 *)&v176) + 16;
sub_402E96(2, 1);
v181 = 66;
sub_408189(*(float *)v168);
if ( *(_DWORD *)(v98 + 8) )
sub_405957(1, 32);
v99 = sub_40DF53(&v171);
LOBYTE(v181) = 67;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v99, 0, -1);
LOBYTE(v181) = 66;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v175);
++i;
v168 += 8;
}
while ( i - 1 < 9 );
v100 = 1;
v168 = (unsigned __int8 *)(v3 + 162);
do
{
sprintf(&v176, aUsechatHpD, v100);
v101 = sub_85AAE0((unsigned __int8 *)&v176);
sub_405808(v101 + 16);
sprintf(&v176, aUsechatTextD, v100);
sub_85AAE0((unsigned __int8 *)&v176);
sub_406EBF(v168, 0, -1);
++v100;
v168 += 28;
}
while ( (unsigned int)(v100 - 1) < 3 );
sub_85AAE0(aAttacksound);
sub_406EBF(v3 + 180, 0, -1);
sub_85AAE0(aDiesound);
sub_406EBF(v3 + 184, 0, -1);
sub_85AAE0(aIdlesound);
sub_406EBF(v3 + 188, 0, -1);
v102 = sub_85AAE0(aTransformablei) + 16;
sub_402E96(2, 1);
v103 = (char *)v3[192];
v181 = 68;
sub_40802B(v103);
if ( *(_DWORD *)(v102 + 8) )
sub_405957(1, 32);
v104 = sub_40DF53(&v169);
LOBYTE(v181) = 69;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v104, 0, -1);
LOBYTE(v181) = 68;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v105 = sub_85AAE0(aTransformablei_0) + 16;
sub_402E96(2, 1);
v106 = (char *)v3[193];
v181 = 70;
sub_40802B(v106);
if ( *(_DWORD *)(v105 + 8) )
sub_405957(1, 32);
v107 = sub_40DF53(&v169);
LOBYTE(v181) = 71;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v107, 0, -1);
LOBYTE(v181) = 70;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v108 = sub_85AAE0(aEventid) + 16;
sub_402E96(2, 1);
v109 = (char *)v3[195];
v181 = 72;
sub_40802B(v109);
if ( *(_DWORD *)(v108 + 8) )
sub_405957(1, 32);
v110 = sub_40DF53(&v169);
LOBYTE(v181) = 73;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v110, 0, -1);
LOBYTE(v181) = 72;
sub_4029D7(1);
v181 = -1;
sub_40D04E(&v172);
v111 = sub_85AAE0(aTowerspecified) + 16;
sub_402E96(2, 1);
v112 = (char *)v3[196];
v181 = 74;
sub_40802B(v112);
if ( *(_DWORD *)(v111 + 8) )
sub_405957(1, 32);
v113 = sub_40DF53(&v169);
LOBYTE(v181) = 75;
std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(v113, 0, -1);
LOBYTE(v181) = 74;
sub_4029D7(1);
v181 = -1;
result = sub_40D04E(&v172);
}
else
{
v115 = sub_85AD90(a2, aCategory);
if ( !v115 )
{
v168 = aCategory;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_407270(&v169, v115 + 16, v3 + 4);
sub_4029D7(1);
v116 = sub_85AD90(a2, aName);
if ( !v116 )
{
v168 = aName;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_406EBF(v116 + 16, 0, -1);
v117 = sub_85AAE0(aComment);
sub_406EBF(v117 + 16, 0, -1);
v118 = sub_85AD90(a2, aModel);
if ( !v118 )
{
v168 = aModel;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_406EBF(v118 + 16, 0, -1);
v119 = sub_85AD90(a2, aHeight);
if ( !v119 )
{
v168 = aHeight;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_407018(&v169, v119 + 16, v3 + 17);
sub_4029D7(1);
v120 = sub_85AD90(a2, aSize);
if ( !v120 )
{
v168 = aSize;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_407018(&v169, v120 + 16, v3 + 18);
sub_4029D7(1);
v121 = sub_85AD90(a2, aDelaytime);
if ( !v121 )
{
v168 = aDelaytime;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_407018(&v169, v121 + 16, v3 + 19);
sub_4029D7(1);
v122 = sub_85AD90(a2, aLevel);
if ( !v122 )
{
v168 = aLevel;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_407270(&v169, v122 + 16, v3 + 20);
sub_4029D7(1);
v123 = sub_85AD90(a2, aMaxhp);
if ( !v123 )
{
v168 = aMaxhp;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_407270(&v169, v123 + 16, v3 + 21);
sub_4029D7(1);
v124 = sub_85AD90(a2, aMaxmp);
if ( !v124 )
{
v168 = aMaxmp;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_407270(&v169, v124 + 16, v3 + 22);
sub_4029D7(1);
v125 = sub_85AD90(a2, aMovespeed);
if ( !v125 )
{
v168 = aMovespeed;
_CxxThrowException(&v168, &dword_AE1C08);
}
v126 = sub_407018(&v171, v125 + 16, v3 + 23);
v181 = 76;
sub_407018(&v169, v126, v3 + 24);
sub_4029D7(1);
v181 = -1;
sub_4029D7(1);
v127 = sub_85AD90(a2, aBasemovespeed);
if ( v127 )
{
v128 = sub_407018(&v171, v127 + 16, v3 + 25);
v181 = 77;
sub_407018(&v169, v128, v3 + 26);
sub_4029D7(1);
v181 = -1;
sub_4029D7(1);
}
v129 = sub_85AD90(a2, aNatural);
if ( !v129 )
{
v168 = aNatural;
_CxxThrowException(&v168, &dword_AE1C08);
}
sub_407270(&v169, v129 + 16, v3 + 27);
sub_4029D7(1);
v130 = sub_85AD90(a2, aImmunitylevel);
if ( v130 )
{
sub_407270(&v169, v130 + 16, v3 + 28);
sub_4029D7(1);
}
sub_408981(v3[30], v3[31]);
v131 = sub_85AD90(a2, aAbnormalimmuni);
if ( v131 )
{
sub_401915(v131 + 16, 1, 1);
v181 = 78;
while ( !(v173[*(_DWORD *)(v172 + 4)] & 1) )
{
sub_4036A2(&v168);
if ( v173[*(_DWORD *)(v172 + 4)] & 6 )
break;
sub_40930E(v3[31], &v168);
}
v181 = -1;
sub_401D61(&v174);
sub_406361(&v174);
}
v132 = sub_405399((int)a2, aBonusexp);
sub_407270(&v169, v132, v3 + 33);
sub_4029D7(1);
v133 = sub_405399((int)a2, aAtkpointP);
sub_407270(&v169, v133, v3 + 34);
sub_4029D7(1);
v134 = sub_405399((int)a2, aAtkpointM);
sub_407270(&v169, v134, v3 + 35);
sub_4029D7(1);
v135 = sub_405399((int)a2, aDefpointP);
sub_407270(&v169, v135, v3 + 36);
sub_4029D7(1);
v136 = sub_405399((int)a2, aDefpointM);
sub_407270(&v169, v136, v3 + 37);
sub_4029D7(1);
v137 = sub_405399((int)a2, aHitrate);
sub_407270(&v169, v137, v3 + 38);
sub_4029D7(1);
v138 = sub_405399((int)a2, aAvirate);
sub_407270(&v169, v138, v3 + 39);
sub_4029D7(1);
v139 = sub_405399((int)a2, aAtkinterval);
sub_407018(&v169, v139, v3 + 40);
sub_4029D7(1);
v140 = sub_405399((int)a2, aViewrange);
sub_407018(&v169, v140, v3 + 41);
sub_4029D7(1);
v141 = sub_405399((int)a2, aTracerange);
sub_407018(&v169, v141, v3 + 42);
sub_4029D7(1);
v142 = sub_405399((int)a2, aAttackrange);
sub_407018(&v169, v142, v3 + 43);
sub_4029D7(1);
v143 = sub_405399((int)a2, aEchorange);
sub_407018(&v169, v143, v3 + 44);
sub_4029D7(1);
v144 = sub_405399((int)a2, aPatrolrange);
sub_407018(&v169, v144, v3 + 45);
sub_4029D7(1);
v145 = sub_405399((int)a2, aEscapehp);
sub_407018(&v169, v145, v3 + 46);
sub_4029D7(1);
if ( *((float *)v3 + 42) < (double)*((float *)v3 + 45) )
v3[42] = v3[45];
v146 = 1;
v147 = (int)(v3 + 52);
do
{
sprintf(&v176, aDropitemND, v146);
v148 = sub_405399((int)a2, (unsigned __int8 *)&v176);
sub_407270(&v169, v148, v147 - 4);
sub_4029D7(1);
sprintf(&v176, aDroprateND, v146);
v149 = sub_405399((int)a2, (unsigned __int8 *)&v176);
sub_407018(&v171, v149, v147);
sub_4029D7(1);
v147 += 8;
++v146;
}
while ( (unsigned int)(v146 - 1) < 0x18 );
v150 = 1;
v151 = (int)(v3 + 100);
do
{
sprintf(&v176, aDropitemMD, v150);
v152 = sub_405399((int)a2, (unsigned __int8 *)&v176);
sub_407270(&v169, v152, v151 - 4);
sub_4029D7(1);
sprintf(&v176, aDroprateMD, v150);
v153 = sub_405399((int)a2, (unsigned __int8 *)&v176);
sub_407018(&v171, v153, v151);
sub_4029D7(1);
v151 += 8;
++v150;
}
while ( (unsigned int)(v150 - 1) < 3 );
v154 = 1;
v155 = (int)(v3 + 106);
do
{
sprintf(&v176, aDropitemBD, v154);
v156 = sub_405399((int)a2, (unsigned __int8 *)&v176);
sub_407270(&v169, v156, v155 - 4);
sub_4029D7(1);
sprintf(&v176, aDroprateBD, v154);
v157 = sub_405399((int)a2, (unsigned __int8 *)&v176);
sub_407018(&v171, v157, v155);
sub_4029D7(1);
v155 += 8;
++v154;
}
while ( (unsigned int)(v154 - 1) < 9 );
v158 = 1;
v159 = (int)(v3 + 162);
do
{
sprintf(&v176, aUsechatHpD, v158);
v160 = sub_405399((int)a2, (unsigned __int8 *)&v176);
sub_40205E(&v169, v160, v159 - 12);
sub_4029D7(1);
sprintf(&v176, aUsechatTextD, v158);
v161 = sub_405399((int)a2, (unsigned __int8 *)&v176);
sub_406EBF(v161, 0, -1);
++v158;
v159 += 28;
}
while ( (unsigned int)(v158 - 1) < 3 );
v162 = sub_405399((int)a2, aAttacksound);
sub_406EBF(v162, 0, -1);
v163 = sub_405399((int)a2, aDiesound);
sub_406EBF(v163, 0, -1);
v164 = sub_405399((int)a2, aIdlesound);
sub_406EBF(v164, 0, -1);
v165 = sub_85AD90(a2, aTransformablei);
if ( v165 )
{
sub_407270(&v169, v165 + 16, v3 + 192);
sub_4029D7(1);
}
v166 = sub_85AD90(a2, aTransformablei_0);
if ( v166 )
{
sub_407270(&v169, v166 + 16, v3 + 193);
sub_4029D7(1);
}
v167 = sub_85AD90(a2, aEventid);
if ( v167 )
{
sub_407270(&v169, v167 + 16, v3 + 195);
sub_4029D7(1);
}
result = sub_85AD90(a2, aTowerspecified);
if ( result )
{
sub_407270(&v180, result + 16, v3 + 196);
result = sub_4029D7(1);
}
}
return result;
}
dW5zaWduZWQgaW50IF9fdGhpc2NhbGwgc3ViXzU0MENCMChfRFdPUkQgKnRoaXMsIF9EV09SRCAqYTIsIGludCBhMykKewogIF9EV09SRCAqdjM7IC8vIGVicAogIGludCB2NDsgLy8gZWRpCiAgY2hhciAqdjU7IC8vIFNUMTRfNAogIGludCB2NjsgLy8gZWF4CiAgaW50IHY3OyAvLyBlZGkKICBmbG9hdCB2ODsgLy8gU1QxNF80CiAgaW50IHY5OyAvLyBlYXgKICBpbnQgdjEwOyAvLyBlZGkKICBmbG9hdCB2MTE7IC8vIFNUMTRfNAogIGludCB2MTI7IC8vIGVheAogIGludCB2MTM7IC8vIGVkaQogIGZsb2F0IHYxNDsgLy8gU1QxNF80CiAgaW50IHYxNTsgLy8gZWF4CiAgaW50IHYxNjsgLy8gZWRpCiAgY2hhciAqdjE3OyAvLyBTVDE0XzQKICBpbnQgdjE4OyAvLyBlYXgKICBpbnQgdjE5OyAvLyBlZGkKICBjaGFyICp2MjA7IC8vIFNUMTRfNAogIGludCB2MjE7IC8vIGVheAogIGludCB2MjI7IC8vIGVkaQogIGNoYXIgKnYyMzsgLy8gU1QxNF80CiAgaW50IHYyNDsgLy8gZWF4CiAgaW50IHYyNTsgLy8gZWRpCiAgZmxvYXQgdjI2OyAvLyBTVDE0XzQKICBpbnQgdjI3OyAvLyBlYXgKICBpbnQgdjI4OyAvLyBlZGkKICBmbG9hdCB2Mjk7IC8vIFNUMTRfNAogIGludCB2MzA7IC8vIGVheAogIGludCB2MzE7IC8vIGVkaQogIGZsb2F0IHYzMjsgLy8gU1QxNF80CiAgaW50IHYzMzsgLy8gZWF4CiAgaW50IHYzNDsgLy8gZWRpCiAgZmxvYXQgdjM1OyAvLyBTVDE0XzQKICBpbnQgdjM2OyAvLyBlYXgKICBpbnQgdjM3OyAvLyBlZGkKICBpbnQgdjM4OyAvLyBlYXgKICBpbnQgdjM5OyAvLyBlZGkKICBjaGFyICp2NDA7IC8vIFNUMTRfNAogIGludCB2NDE7IC8vIGVheAogIGludCB2NDI7IC8vIGVkaQogIHVuc2lnbmVkIGludCB2NDM7IC8vIGVheAogIGludCB2NDQ7IC8vIGVheAogIGludCB2NDU7IC8vIGVheAogIGludCB2NDY7IC8vIGVkaQogIGNoYXIgKnY0NzsgLy8gU1QxNF80CiAgaW50IHY0ODsgLy8gZWF4CiAgaW50IHY0OTsgLy8gZWRpCiAgY2hhciAqdjUwOyAvLyBTVDE0XzQKICBpbnQgdjUxOyAvLyBlYXgKICBpbnQgdjUyOyAvLyBlZGkKICBjaGFyICp2NTM7IC8vIFNUMTRfNAogIGludCB2NTQ7IC8vIGVheAogIGludCB2NTU7IC8vIGVkaQogIGNoYXIgKnY1NjsgLy8gU1QxNF80CiAgaW50IHY1NzsgLy8gZWF4CiAgaW50IHY1ODsgLy8gZWRpCiAgY2hhciAqdjU5OyAvLyBTVDE0XzQKICBpbnQgdjYwOyAvLyBlYXgKICBpbnQgdjYxOyAvLyBlZGkKICBjaGFyICp2NjI7IC8vIFNUMTRfNAogIGludCB2NjM7IC8vIGVheAogIGludCB2NjQ7IC8vIGVkaQogIGNoYXIgKnY2NTsgLy8gU1QxNF80CiAgaW50IHY2NjsgLy8gZWF4CiAgaW50IHY2NzsgLy8gZWRpCiAgZmxvYXQgdjY4OyAvLyBTVDE0XzQKICBpbnQgdjY5OyAvLyBlYXgKICBpbnQgdjcwOyAvLyBlZGkKICBmbG9hdCB2NzE7IC8vIFNUMTRfNAogIGludCB2NzI7IC8vIGVheAogIGludCB2NzM7IC8vIGVkaQogIGZsb2F0IHY3NDsgLy8gU1QxNF80CiAgaW50IHY3NTsgLy8gZWF4CiAgaW50IHY3NjsgLy8gZWRpCiAgZmxvYXQgdjc3OyAvLyBTVDE0XzQKICBpbnQgdjc4OyAvLyBlYXgKICBpbnQgdjc5OyAvLyBlZGkKICBmbG9hdCB2ODA7IC8vIFNUMTRfNAogIGludCB2ODE7IC8vIGVheAogIGludCB2ODI7IC8vIGVkaQogIGZsb2F0IHY4MzsgLy8gU1QxNF80CiAgaW50IHY4NDsgLy8gZWF4CiAgaW50IHY4NTsgLy8gZWRpCiAgZmxvYXQgdjg2OyAvLyBTVDE0XzQKICBpbnQgdjg3OyAvLyBlYXgKICBpbnQgdjg4OyAvLyBlZGkKICBpbnQgdjg5OyAvLyBlYXgKICBpbnQgdjkwOyAvLyBlZGkKICBpbnQgdjkxOyAvLyBlYXgKICBpbnQgdjkyOyAvLyBlZGkKICBpbnQgdjkzOyAvLyBlYXgKICBpbnQgdjk0OyAvLyBlZGkKICBpbnQgdjk1OyAvLyBlYXgKICBpbnQgdjk2OyAvLyBlZGkKICBpbnQgdjk3OyAvLyBlYXgKICBpbnQgdjk4OyAvLyBlZGkKICBpbnQgdjk5OyAvLyBlYXgKICBzaWduZWQgaW50IHYxMDA7IC8vIGVkaQogIGludCB2MTAxOyAvLyBlYXgKICBpbnQgdjEwMjsgLy8gZWRpCiAgY2hhciAqdjEwMzsgLy8gU1QxNF80CiAgaW50IHYxMDQ7IC8vIGVheAogIGludCB2MTA1OyAvLyBlZGkKICBjaGFyICp2MTA2OyAvLyBTVDE0XzQKICBpbnQgdjEwNzsgLy8gZWF4CiAgaW50IHYxMDg7IC8vIGVkaQogIGNoYXIgKnYxMDk7IC8vIFNUMTRfNAogIGludCB2MTEwOyAvLyBlYXgKICBpbnQgdjExMTsgLy8gZXNpCiAgY2hhciAqdjExMjsgLy8gU1QxNF80CiAgaW50IHYxMTM7IC8vIGVheAogIHVuc2lnbmVkIGludCByZXN1bHQ7IC8vIGVheAogIHVuc2lnbmVkIGludCB2MTE1OyAvLyBlYXgKICB1bnNpZ25lZCBpbnQgdjExNjsgLy8gZWF4CiAgaW50IHYxMTc7IC8vIGVheAogIHVuc2lnbmVkIGludCB2MTE4OyAvLyBlYXgKICB1bnNpZ25lZCBpbnQgdjExOTsgLy8gZWF4CiAgdW5zaWduZWQgaW50IHYxMjA7IC8vIGVheAogIHVuc2lnbmVkIGludCB2MTIxOyAvLyBlYXgKICB1bnNpZ25lZCBpbnQgdjEyMjsgLy8gZWF4CiAgdW5zaWduZWQgaW50IHYxMjM7IC8vIGVheAogIHVuc2lnbmVkIGludCB2MTI0OyAvLyBlYXgKICB1bnNpZ25lZCBpbnQgdjEyNTsgLy8gZWF4CiAgaW50IHYxMjY7IC8vIGVheAogIHVuc2lnbmVkIGludCB2MTI3OyAvLyBlYXgKICBpbnQgdjEyODsgLy8gZWF4CiAgdW5zaWduZWQgaW50IHYxMjk7IC8vIGVheAogIHVuc2lnbmVkIGludCB2MTMwOyAvLyBlYXgKICB1bnNpZ25lZCBpbnQgdjEzMTsgLy8gZWF4CiAgaW50IHYxMzI7IC8vIGVheAogIGludCB2MTMzOyAvLyBlYXgKICBpbnQgdjEzNDsgLy8gZWF4CiAgaW50IHYxMzU7IC8vIGVheAogIGludCB2MTM2OyAvLyBlYXgKICBpbnQgdjEzNzsgLy8gZWF4CiAgaW50IHYxMzg7IC8vIGVheAogIGludCB2MTM5OyAvLyBlYXgKICBpbnQgdjE0MDsgLy8gZWF4CiAgaW50IHYxNDE7IC8vIGVheAogIGludCB2MTQyOyAvLyBlYXgKICBpbnQgdjE0MzsgLy8gZWF4CiAgaW50IHYxNDQ7IC8vIGVheAogIGludCB2MTQ1OyAvLyBlYXgKICBzaWduZWQgaW50IHYxNDY7IC8vIGVkaQogIGludCB2MTQ3OyAvLyBlYngKICBpbnQgdjE0ODsgLy8gZWF4CiAgaW50IHYxNDk7IC8vIGVheAogIHNpZ25lZCBpbnQgdjE1MDsgLy8gZWRpCiAgaW50IHYxNTE7IC8vIGVieAogIGludCB2MTUyOyAvLyBlYXgKICBpbnQgdjE1MzsgLy8gZWF4CiAgc2lnbmVkIGludCB2MTU0OyAvLyBlZGkKICBpbnQgdjE1NTsgLy8gZWJ4CiAgaW50IHYxNTY7IC8vIGVheAogIGludCB2MTU3OyAvLyBlYXgKICBzaWduZWQgaW50IHYxNTg7IC8vIGVkaQogIGludCB2MTU5OyAvLyBlYngKICBpbnQgdjE2MDsgLy8gZWF4CiAgaW50IHYxNjE7IC8vIGVheAogIGludCB2MTYyOyAvLyBlYXgKICBpbnQgdjE2MzsgLy8gZWF4CiAgaW50IHYxNjQ7IC8vIGVheAogIHVuc2lnbmVkIGludCB2MTY1OyAvLyBlYXgKICB1bnNpZ25lZCBpbnQgdjE2NjsgLy8gZWF4CiAgdW5zaWduZWQgaW50IHYxNjc7IC8vIGVheAogIHVuc2lnbmVkIF9faW50OCAqdjE2ODsgLy8gW2VzcCsxMGhdIFtlYnAtMUQwaF0KICBjaGFyIHYxNjk7IC8vIFtlc3ArMTRoXSBbZWJwLTFDQ2hdCiAgdW5zaWduZWQgaW50IGk7IC8vIFtlc3ArMjRoXSBbZWJwLTFCQ2hdCiAgY2hhciB2MTcxOyAvLyBbZXNwKzI4aF0gW2VicC0xQjhoXQogIGludCB2MTcyOyAvLyBbZXNwKzM4aF0gW2VicC0xQThoXQogIGNoYXIgdjE3M1s4MF07IC8vIFtlc3ArM0NoXSBbZWJwLTFBNGhdCiAgY2hhciB2MTc0OyAvLyBbZXNwKzhDaF0gW2VicC0xNTRoXQogIGNoYXIgdjE3NTsgLy8gW2VzcCtDMGhdIFtlYnAtMTIwaF0KICBjaGFyIHYxNzY7IC8vIFtlc3ArMTQ0aF0gW2VicC05Q2hdCiAgY2hhciB2MTc3OyAvLyBbZXNwKzE0NWhdIFtlYnAtOUJoXQogIF9faW50MTYgdjE3ODsgLy8gW2VzcCsxQzFoXSBbZWJwLTFGaF0KICBjaGFyIHYxNzk7IC8vIFtlc3ArMUMzaF0gW2VicC0xRGhdCiAgY2hhciB2MTgwOyAvLyBbZXNwKzFDNGhdIFtlYnAtMUNoXQogIGludCB2MTgxOyAvLyBbZXNwKzFEQ2hdIFtlYnAtNGhdCgogIHYzID0gdGhpczsKICBzdWJfNDAyODlDKGEyLCBhMyk7CiAgdjE3NiA9IDA7CiAgbWVtc2V0KCZ2MTc3LCAwLCAweDdDdSk7CiAgdjE3OCA9IDA7CiAgdjE3OSA9IDA7CiAgaWYgKCAoX0JZVEUpYTMgKQogIHsKICAgIHY0ID0gc3ViXzg1QUFFMChhQ2F0ZWdvcnkpICsgMTY7CiAgICBzdWJfNDAyRTk2KDIsIDEpOwogICAgdjUgPSAoY2hhciAqKXYzWzRdOwogICAgdjE4MSA9IDA7CiAgICBzdWJfNDA4MDJCKHY1KTsKICAgIGlmICggKihfRFdPUkQgKikodjQgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjYgPSBzdWJfNDBERjUzKCZ2MTcxKTsKICAgIExPQllURSh2MTgxKSA9IDE7CiAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4+OjphcHBlbmQodjYsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDA7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgc3ViXzQwRDA0RSgmdjE3NSk7CiAgICBzdWJfODVBQUUwKGFOYW1lKTsKICAgIHN1Yl80MDZFQkYodjMgKyA1LCAwLCAtMSk7CiAgICBzdWJfODVBQUUwKGFDb21tZW50KTsKICAgIHN1Yl80MDZFQkYodjMgKyA5LCAwLCAtMSk7CiAgICBzdWJfODVBQUUwKGFNb2RlbCk7CiAgICBzdWJfNDA2RUJGKHYzICsgMTMsIDAsIC0xKTsKICAgIHY3ID0gc3ViXzg1QUFFMChhSGVpZ2h0KSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHY4ID0gKigoZmxvYXQgKil2MyArIDE3KTsKICAgIHYxODEgPSAyOwogICAgc3ViXzQwODE4OSh2OCk7CiAgICBpZiAoICooX0RXT1JEICopKHY3ICsgOCkgKQogICAgICBzdWJfNDA1OTU3KDEsIDMyKTsKICAgIHY5ID0gc3ViXzQwREY1MygmdjE3MSk7CiAgICBMT0JZVEUodjE4MSkgPSAzOwogICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHY5LCAwLCAtMSk7CiAgICBMT0JZVEUodjE4MSkgPSAyOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzUpOwogICAgdjEwID0gc3ViXzg1QUFFMChhU2l6ZSkgKyAxNjsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2MTEgPSAqKChmbG9hdCAqKXYzICsgMTgpOwogICAgdjE4MSA9IDQ7CiAgICBzdWJfNDA4MTg5KHYxMSk7CiAgICBpZiAoICooX0RXT1JEICopKHYxMCArIDgpICkKICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICB2MTIgPSBzdWJfNDBERjUzKCZ2MTcxKTsKICAgIExPQllURSh2MTgxKSA9IDU7CiAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4+OjphcHBlbmQodjEyLCAwLCAtMSk7CiAgICBMT0JZVEUodjE4MSkgPSA0OwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzUpOwogICAgdjEzID0gc3ViXzg1QUFFMChhRGVsYXl0aW1lKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHYxNCA9ICooKGZsb2F0ICopdjMgKyAxOSk7CiAgICB2MTgxID0gNjsKICAgIHN1Yl80MDgxODkodjE0KTsKICAgIGlmICggKihfRFdPUkQgKikodjEzICsgOCkgKQogICAgICBzdWJfNDA1OTU3KDEsIDMyKTsKICAgIHYxNSA9IHN1Yl80MERGNTMoJnYxNzEpOwogICAgTE9CWVRFKHYxODEpID0gNzsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2MTUsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDY7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgc3ViXzQwRDA0RSgmdjE3NSk7CiAgICB2MTYgPSBzdWJfODVBQUUwKGFMZXZlbCkgKyAxNjsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2MTcgPSAoY2hhciAqKXYzWzIwXTsKICAgIHYxODEgPSA4OwogICAgc3ViXzQwODAyQih2MTcpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2MTYgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjE4ID0gc3ViXzQwREY1MygmdjE3MSk7CiAgICBMT0JZVEUodjE4MSkgPSA5OwogICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHYxOCwgMCwgLTEpOwogICAgTE9CWVRFKHYxODEpID0gODsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTgxID0gLTE7CiAgICBzdWJfNDBEMDRFKCZ2MTc1KTsKICAgIHYxOSA9IHN1Yl84NUFBRTAoYU1heGhwKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHYyMCA9IChjaGFyICopdjNbMjFdOwogICAgdjE4MSA9IDEwOwogICAgc3ViXzQwODAyQih2MjApOwogICAgaWYgKCAqKF9EV09SRCAqKSh2MTkgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjIxID0gc3ViXzQwREY1MygmdjE3MSk7CiAgICBMT0JZVEUodjE4MSkgPSAxMTsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2MjEsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDEwOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzUpOwogICAgdjIyID0gc3ViXzg1QUFFMChhTWF4bXApICsgMTY7CiAgICBzdWJfNDAyRTk2KDIsIDEpOwogICAgdjIzID0gKGNoYXIgKil2M1syMl07CiAgICB2MTgxID0gMTI7CiAgICBzdWJfNDA4MDJCKHYyMyk7CiAgICBpZiAoICooX0RXT1JEICopKHYyMiArIDgpICkKICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICB2MjQgPSBzdWJfNDBERjUzKCZ2MTcxKTsKICAgIExPQllURSh2MTgxKSA9IDEzOwogICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHYyNCwgMCwgLTEpOwogICAgTE9CWVRFKHYxODEpID0gMTI7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgc3ViXzQwRDA0RSgmdjE3NSk7CiAgICB2MjUgPSBzdWJfODVBQUUwKGFNb3Zlc3BlZWQpICsgMTY7CiAgICBzdWJfNDAyRTk2KDIsIDEpOwogICAgdjI2ID0gKigoZmxvYXQgKil2MyArIDIzKTsKICAgIHYxODEgPSAxNDsKICAgIHN1Yl80MDgxODkodjI2KTsKICAgIGlmICggKihfRFdPUkQgKikodjI1ICsgOCkgKQogICAgICBzdWJfNDA1OTU3KDEsIDMyKTsKICAgIHYyNyA9IHN1Yl80MERGNTMoJnYxNzEpOwogICAgTE9CWVRFKHYxODEpID0gMTU7CiAgICB2MjggPSBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4+OjphcHBlbmQodjI3LCAwLCAtMSk7CiAgICBMT0JZVEUodjE4MSkgPSAxNDsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTgxID0gLTE7CiAgICBzdWJfNDBEMDRFKCZ2MTc1KTsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2MjkgPSAqKChmbG9hdCAqKXYzICsgMjQpOwogICAgdjE4MSA9IDE2OwogICAgc3ViXzQwODE4OSh2MjkpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2MjggKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjMwID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSAxNzsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2MzAsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDE2OwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjMxID0gc3ViXzg1QUFFMChhQmFzZW1vdmVzcGVlZCkgKyAxNjsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2MzIgPSAqKChmbG9hdCAqKXYzICsgMjUpOwogICAgdjE4MSA9IDE4OwogICAgc3ViXzQwODE4OSh2MzIpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2MzEgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjMzID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSAxOTsKICAgIHYzNCA9IHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2MzMsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDE4OwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHYzNSA9ICooKGZsb2F0ICopdjMgKyAyNik7CiAgICB2MTgxID0gMjA7CiAgICBzdWJfNDA4MTg5KHYzNSk7CiAgICBpZiAoICooX0RXT1JEICopKHYzNCArIDgpICkKICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICB2MzYgPSBzdWJfNDBERjUzKCZ2MTcxKTsKICAgIExPQllURSh2MTgxKSA9IDIxOwogICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHYzNiwgMCwgLTEpOwogICAgTE9CWVRFKHYxODEpID0gMjA7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgc3ViXzQwRDA0RSgmdjE3NSk7CiAgICB2MTY4ID0gKHVuc2lnbmVkIF9faW50OCAqKXYzWzI3XTsKICAgIHYzNyA9IHN1Yl84NUFBRTAoYU5hdHVyYWwpICsgMTY7CiAgICBzdWJfNDAyRTk2KDIsIDEpOwogICAgdjE4MSA9IDIyOwogICAgc3ViXzQwODAyQigoY2hhciAqKXYxNjgpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2MzcgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjM4ID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSAyMzsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2MzgsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDIyOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjM5ID0gc3ViXzg1QUFFMChhSW1tdW5pdHlsZXZlbCkgKyAxNjsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2NDAgPSAoY2hhciAqKXYzWzI4XTsKICAgIHYxODEgPSAyNDsKICAgIHN1Yl80MDgwMkIodjQwKTsKICAgIGlmICggKihfRFdPUkQgKikodjM5ICsgOCkgKQogICAgICBzdWJfNDA1OTU3KDEsIDMyKTsKICAgIHY0MSA9IHN1Yl80MERGNTMoJnYxNjkpOwogICAgTE9CWVRFKHYxODEpID0gMjU7CiAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4+OjphcHBlbmQodjQxLCAwLCAtMSk7CiAgICBMT0JZVEUodjE4MSkgPSAyNDsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTgxID0gLTE7CiAgICBzdWJfNDBEMDRFKCZ2MTcyKTsKICAgIHY0MiA9IHN1Yl84NUFBRTAoYUFibm9ybWFsaW1tdW5pKSArIDE2OwogICAgaSA9IC0xOwogICAgc3ViXzQwRTA4OSh2NDIpOwogICAgdjQzID0gKihfRFdPUkQgKikodjQyICsgOCk7CiAgICBpZiAoIHY0MyA8IGkgKQogICAgICBpID0gKihfRFdPUkQgKikodjQyICsgOCk7CiAgICBpZiAoIGkgKQogICAgewogICAgICBtZW1jcHkoKih2b2lkICoqKSh2NDIgKyA0KSwgKGNvbnN0IHZvaWQgKikoKihfRFdPUkQgKikodjQyICsgNCkgKyBpKSwgdjQzIC0gaSk7CiAgICAgIHYxNjggPSAodW5zaWduZWQgX19pbnQ4ICopKCooX0RXT1JEICopKHY0MiArIDgpIC0gaSk7CiAgICAgIGlmICggKHVuc2lnbmVkIF9faW50OClzdWJfNDA0MTRDKHYxNjgsIDApICkKICAgICAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4+OjpfRW9zKHYxNjgpOwogICAgfQogICAgZm9yICggaSA9IDA7IDsgKytpICkKICAgIHsKICAgICAgdjQ0ID0gdjNbMzBdOwogICAgICBpZiAoICF2NDQgfHwgaSA+PSAodjNbMzFdIC0gdjQ0KSA+PiAyICkKICAgICAgICBicmVhazsKICAgICAgdjE2OCA9ICh1bnNpZ25lZCBfX2ludDggKil2M1szMF07CiAgICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICAgIHYxODEgPSAyNjsKICAgICAgc3ViXzQwODAyQigqKGNoYXIgKiopJnYxNjhbNCAqIGldKTsKICAgICAgaWYgKCAqKF9EV09SRCAqKSh2NDIgKyA4KSApCiAgICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICAgIHY0NSA9IHN1Yl80MERGNTMoJnYxNjkpOwogICAgICBMT0JZVEUodjE4MSkgPSAyNzsKICAgICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHY0NSwgMCwgLTEpOwogICAgICBMT0JZVEUodjE4MSkgPSAyNjsKICAgICAgc3ViXzQwMjlENygxKTsKICAgICAgdjE4MSA9IC0xOwogICAgICBzdWJfNDBEMDRFKCZ2MTcyKTsKICAgIH0KICAgIHY0NiA9IHN1Yl84NUFBRTAoYUJvbnVzZXhwKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHY0NyA9IChjaGFyICopdjNbMzNdOwogICAgdjE4MSA9IDI4OwogICAgc3ViXzQwODAyQih2NDcpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2NDYgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjQ4ID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSAyOTsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2NDgsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDI4OwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjQ5ID0gc3ViXzg1QUFFMChhQXRrcG9pbnRQKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHY1MCA9IChjaGFyICopdjNbMzRdOwogICAgdjE4MSA9IDMwOwogICAgc3ViXzQwODAyQih2NTApOwogICAgaWYgKCAqKF9EV09SRCAqKSh2NDkgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjUxID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSAzMTsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2NTEsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDMwOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjUyID0gc3ViXzg1QUFFMChhQXRrcG9pbnRNKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHY1MyA9IChjaGFyICopdjNbMzVdOwogICAgdjE4MSA9IDMyOwogICAgc3ViXzQwODAyQih2NTMpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2NTIgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjU0ID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSAzMzsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2NTQsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDMyOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjU1ID0gc3ViXzg1QUFFMChhRGVmcG9pbnRQKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHY1NiA9IChjaGFyICopdjNbMzZdOwogICAgdjE4MSA9IDM0OwogICAgc3ViXzQwODAyQih2NTYpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2NTUgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjU3ID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSAzNTsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2NTcsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDM0OwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjU4ID0gc3ViXzg1QUFFMChhRGVmcG9pbnRNKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHY1OSA9IChjaGFyICopdjNbMzddOwogICAgdjE4MSA9IDM2OwogICAgc3ViXzQwODAyQih2NTkpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2NTggKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjYwID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSAzNzsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2NjAsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDM2OwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjYxID0gc3ViXzg1QUFFMChhSGl0cmF0ZSkgKyAxNjsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2NjIgPSAoY2hhciAqKXYzWzM4XTsKICAgIHYxODEgPSAzODsKICAgIHN1Yl80MDgwMkIodjYyKTsKICAgIGlmICggKihfRFdPUkQgKikodjYxICsgOCkgKQogICAgICBzdWJfNDA1OTU3KDEsIDMyKTsKICAgIHY2MyA9IHN1Yl80MERGNTMoJnYxNjkpOwogICAgTE9CWVRFKHYxODEpID0gMzk7CiAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4+OjphcHBlbmQodjYzLCAwLCAtMSk7CiAgICBMT0JZVEUodjE4MSkgPSAzODsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTgxID0gLTE7CiAgICBzdWJfNDBEMDRFKCZ2MTcyKTsKICAgIHY2NCA9IHN1Yl84NUFBRTAoYUF2aXJhdGUpICsgMTY7CiAgICBzdWJfNDAyRTk2KDIsIDEpOwogICAgdjY1ID0gKGNoYXIgKil2M1szOV07CiAgICB2MTgxID0gNDA7CiAgICBzdWJfNDA4MDJCKHY2NSk7CiAgICBpZiAoICooX0RXT1JEICopKHY2NCArIDgpICkKICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICB2NjYgPSBzdWJfNDBERjUzKCZ2MTY5KTsKICAgIExPQllURSh2MTgxKSA9IDQxOwogICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHY2NiwgMCwgLTEpOwogICAgTE9CWVRFKHYxODEpID0gNDA7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgc3ViXzQwRDA0RSgmdjE3Mik7CiAgICB2NjcgPSBzdWJfODVBQUUwKGFBdGtpbnRlcnZhbCkgKyAxNjsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2NjggPSAqKChmbG9hdCAqKXYzICsgNDApOwogICAgdjE4MSA9IDQyOwogICAgc3ViXzQwODE4OSh2NjgpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2NjcgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjY5ID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSA0MzsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2NjksIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDQyOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjcwID0gc3ViXzg1QUFFMChhVmlld3JhbmdlKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHY3MSA9ICooKGZsb2F0ICopdjMgKyA0MSk7CiAgICB2MTgxID0gNDQ7CiAgICBzdWJfNDA4MTg5KHY3MSk7CiAgICBpZiAoICooX0RXT1JEICopKHY3MCArIDgpICkKICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICB2NzIgPSBzdWJfNDBERjUzKCZ2MTY5KTsKICAgIExPQllURSh2MTgxKSA9IDQ1OwogICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHY3MiwgMCwgLTEpOwogICAgTE9CWVRFKHYxODEpID0gNDQ7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgc3ViXzQwRDA0RSgmdjE3Mik7CiAgICB2NzMgPSBzdWJfODVBQUUwKGFUcmFjZXJhbmdlKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHY3NCA9ICooKGZsb2F0ICopdjMgKyA0Mik7CiAgICB2MTgxID0gNDY7CiAgICBzdWJfNDA4MTg5KHY3NCk7CiAgICBpZiAoICooX0RXT1JEICopKHY3MyArIDgpICkKICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICB2NzUgPSBzdWJfNDBERjUzKCZ2MTY5KTsKICAgIExPQllURSh2MTgxKSA9IDQ3OwogICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHY3NSwgMCwgLTEpOwogICAgTE9CWVRFKHYxODEpID0gNDY7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgc3ViXzQwRDA0RSgmdjE3Mik7CiAgICB2NzYgPSBzdWJfODVBQUUwKGFBdHRhY2tyYW5nZSkgKyAxNjsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2NzcgPSAqKChmbG9hdCAqKXYzICsgNDMpOwogICAgdjE4MSA9IDQ4OwogICAgc3ViXzQwODE4OSh2NzcpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2NzYgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjc4ID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSA0OTsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2NzgsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDQ4OwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjc5ID0gc3ViXzg1QUFFMChhRWNob3JhbmdlKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHY4MCA9ICooKGZsb2F0ICopdjMgKyA0NCk7CiAgICB2MTgxID0gNTA7CiAgICBzdWJfNDA4MTg5KHY4MCk7CiAgICBpZiAoICooX0RXT1JEICopKHY3OSArIDgpICkKICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICB2ODEgPSBzdWJfNDBERjUzKCZ2MTY5KTsKICAgIExPQllURSh2MTgxKSA9IDUxOwogICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHY4MSwgMCwgLTEpOwogICAgTE9CWVRFKHYxODEpID0gNTA7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgc3ViXzQwRDA0RSgmdjE3Mik7CiAgICB2ODIgPSBzdWJfODVBQUUwKGFQYXRyb2xyYW5nZSkgKyAxNjsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2ODMgPSAqKChmbG9hdCAqKXYzICsgNDUpOwogICAgdjE4MSA9IDUyOwogICAgc3ViXzQwODE4OSh2ODMpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2ODIgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjg0ID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSA1MzsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2ODQsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDUyOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjg1ID0gc3ViXzg1QUFFMChhRXNjYXBlaHApICsgMTY7CiAgICBzdWJfNDAyRTk2KDIsIDEpOwogICAgdjg2ID0gKigoZmxvYXQgKil2MyArIDQ2KTsKICAgIHYxODEgPSA1NDsKICAgIHN1Yl80MDgxODkodjg2KTsKICAgIGlmICggKihfRFdPUkQgKikodjg1ICsgOCkgKQogICAgICBzdWJfNDA1OTU3KDEsIDMyKTsKICAgIHY4NyA9IHN1Yl80MERGNTMoJnYxNjkpOwogICAgTE9CWVRFKHYxODEpID0gNTU7CiAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4+OjphcHBlbmQodjg3LCAwLCAtMSk7CiAgICBMT0JZVEUodjE4MSkgPSA1NDsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTgxID0gLTE7CiAgICBzdWJfNDBEMDRFKCZ2MTcyKTsKICAgIHYxNjggPSAodW5zaWduZWQgX19pbnQ4ICopMTsKICAgIGkgPSAodW5zaWduZWQgaW50KSh2MyArIDUyKTsKICAgIGRvCiAgICB7CiAgICAgIHNwcmludGYoJnYxNzYsIGFEcm9waXRlbU5ELCB2MTY4KTsKICAgICAgdjg4ID0gc3ViXzg1QUFFMCgodW5zaWduZWQgX19pbnQ4ICopJnYxNzYpICsgMTY7CiAgICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICAgIHYxODEgPSA1NjsKICAgICAgc3ViXzQwODAyQigqKGNoYXIgKiopKGkgLSA0KSk7CiAgICAgIGlmICggKihfRFdPUkQgKikodjg4ICsgOCkgKQogICAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgICB2ODkgPSBzdWJfNDBERjUzKCZ2MTY5KTsKICAgICAgTE9CWVRFKHYxODEpID0gNTc7CiAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2ODksIDAsIC0xKTsKICAgICAgTE9CWVRFKHYxODEpID0gNTY7CiAgICAgIHN1Yl80MDI5RDcoMSk7CiAgICAgIHYxODEgPSAtMTsKICAgICAgc3ViXzQwRDA0RSgmdjE3Mik7CiAgICAgIHNwcmludGYoJnYxNzYsIGFEcm9wcmF0ZU5ELCB2MTY4KTsKICAgICAgdjkwID0gc3ViXzg1QUFFMCgodW5zaWduZWQgX19pbnQ4ICopJnYxNzYpICsgMTY7CiAgICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICAgIHYxODEgPSA1ODsKICAgICAgc3ViXzQwODE4OSgqKGZsb2F0ICopaSk7CiAgICAgIGlmICggKihfRFdPUkQgKikodjkwICsgOCkgKQogICAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgICB2OTEgPSBzdWJfNDBERjUzKCZ2MTcxKTsKICAgICAgTE9CWVRFKHYxODEpID0gNTk7CiAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2OTEsIDAsIC0xKTsKICAgICAgTE9CWVRFKHYxODEpID0gNTg7CiAgICAgIHN1Yl80MDI5RDcoMSk7CiAgICAgIHYxODEgPSAtMTsKICAgICAgc3ViXzQwRDA0RSgmdjE3NSk7CiAgICAgICsrdjE2ODsKICAgICAgaSArPSA4OwogICAgfQogICAgd2hpbGUgKCAodW5zaWduZWQgaW50KSh2MTY4IC0gMSkgPCAweDE4ICk7CiAgICBpID0gMTsKICAgIHYxNjggPSAodW5zaWduZWQgX19pbnQ4ICopKHYzICsgMTAwKTsKICAgIGRvCiAgICB7CiAgICAgIHNwcmludGYoJnYxNzYsIGFEcm9waXRlbU1ELCBpKTsKICAgICAgdjkyID0gc3ViXzg1QUFFMCgodW5zaWduZWQgX19pbnQ4ICopJnYxNzYpICsgMTY7CiAgICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICAgIHYxODEgPSA2MDsKICAgICAgc3ViXzQwODAyQigqKChjaGFyICoqKXYxNjggLSAxKSk7CiAgICAgIGlmICggKihfRFdPUkQgKikodjkyICsgOCkgKQogICAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgICB2OTMgPSBzdWJfNDBERjUzKCZ2MTY5KTsKICAgICAgTE9CWVRFKHYxODEpID0gNjE7CiAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2OTMsIDAsIC0xKTsKICAgICAgTE9CWVRFKHYxODEpID0gNjA7CiAgICAgIHN1Yl80MDI5RDcoMSk7CiAgICAgIHYxODEgPSAtMTsKICAgICAgc3ViXzQwRDA0RSgmdjE3Mik7CiAgICAgIHNwcmludGYoJnYxNzYsIGFEcm9wcmF0ZU1ELCBpKTsKICAgICAgdjk0ID0gc3ViXzg1QUFFMCgodW5zaWduZWQgX19pbnQ4ICopJnYxNzYpICsgMTY7CiAgICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICAgIHYxODEgPSA2MjsKICAgICAgc3ViXzQwODE4OSgqKGZsb2F0ICopdjE2OCk7CiAgICAgIGlmICggKihfRFdPUkQgKikodjk0ICsgOCkgKQogICAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgICB2OTUgPSBzdWJfNDBERjUzKCZ2MTcxKTsKICAgICAgTE9CWVRFKHYxODEpID0gNjM7CiAgICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2OTUsIDAsIC0xKTsKICAgICAgTE9CWVRFKHYxODEpID0gNjI7CiAgICAgIHN1Yl80MDI5RDcoMSk7CiAgICAgIHYxODEgPSAtMTsKICAgICAgc3ViXzQwRDA0RSgmdjE3NSk7CiAgICAgICsraTsKICAgICAgdjE2OCArPSA4OwogICAgfQogICAgd2hpbGUgKCBpIC0gMSA8IDMgKTsKICAgIGkgPSAxOwogICAgdjE2OCA9ICh1bnNpZ25lZCBfX2ludDggKikodjMgKyAxMDYpOwogICAgZG8KICAgIHsKICAgICAgc3ByaW50ZigmdjE3NiwgYURyb3BpdGVtQkQsIGkpOwogICAgICB2OTYgPSBzdWJfODVBQUUwKCh1bnNpZ25lZCBfX2ludDggKikmdjE3NikgKyAxNjsKICAgICAgc3ViXzQwMkU5NigyLCAxKTsKICAgICAgdjE4MSA9IDY0OwogICAgICBzdWJfNDA4MDJCKCooKGNoYXIgKiopdjE2OCAtIDEpKTsKICAgICAgaWYgKCAqKF9EV09SRCAqKSh2OTYgKyA4KSApCiAgICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICAgIHY5NyA9IHN1Yl80MERGNTMoJnYxNjkpOwogICAgICBMT0JZVEUodjE4MSkgPSA2NTsKICAgICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHY5NywgMCwgLTEpOwogICAgICBMT0JZVEUodjE4MSkgPSA2NDsKICAgICAgc3ViXzQwMjlENygxKTsKICAgICAgdjE4MSA9IC0xOwogICAgICBzdWJfNDBEMDRFKCZ2MTcyKTsKICAgICAgc3ByaW50ZigmdjE3NiwgYURyb3ByYXRlQkQsIGkpOwogICAgICB2OTggPSBzdWJfODVBQUUwKCh1bnNpZ25lZCBfX2ludDggKikmdjE3NikgKyAxNjsKICAgICAgc3ViXzQwMkU5NigyLCAxKTsKICAgICAgdjE4MSA9IDY2OwogICAgICBzdWJfNDA4MTg5KCooZmxvYXQgKil2MTY4KTsKICAgICAgaWYgKCAqKF9EV09SRCAqKSh2OTggKyA4KSApCiAgICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICAgIHY5OSA9IHN1Yl80MERGNTMoJnYxNzEpOwogICAgICBMT0JZVEUodjE4MSkgPSA2NzsKICAgICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHY5OSwgMCwgLTEpOwogICAgICBMT0JZVEUodjE4MSkgPSA2NjsKICAgICAgc3ViXzQwMjlENygxKTsKICAgICAgdjE4MSA9IC0xOwogICAgICBzdWJfNDBEMDRFKCZ2MTc1KTsKICAgICAgKytpOwogICAgICB2MTY4ICs9IDg7CiAgICB9CiAgICB3aGlsZSAoIGkgLSAxIDwgOSApOwogICAgdjEwMCA9IDE7CiAgICB2MTY4ID0gKHVuc2lnbmVkIF9faW50OCAqKSh2MyArIDE2Mik7CiAgICBkbwogICAgewogICAgICBzcHJpbnRmKCZ2MTc2LCBhVXNlY2hhdEhwRCwgdjEwMCk7CiAgICAgIHYxMDEgPSBzdWJfODVBQUUwKCh1bnNpZ25lZCBfX2ludDggKikmdjE3Nik7CiAgICAgIHN1Yl80MDU4MDgodjEwMSArIDE2KTsKICAgICAgc3ByaW50ZigmdjE3NiwgYVVzZWNoYXRUZXh0RCwgdjEwMCk7CiAgICAgIHN1Yl84NUFBRTAoKHVuc2lnbmVkIF9faW50OCAqKSZ2MTc2KTsKICAgICAgc3ViXzQwNkVCRih2MTY4LCAwLCAtMSk7CiAgICAgICsrdjEwMDsKICAgICAgdjE2OCArPSAyODsKICAgIH0KICAgIHdoaWxlICggKHVuc2lnbmVkIGludCkodjEwMCAtIDEpIDwgMyApOwogICAgc3ViXzg1QUFFMChhQXR0YWNrc291bmQpOwogICAgc3ViXzQwNkVCRih2MyArIDE4MCwgMCwgLTEpOwogICAgc3ViXzg1QUFFMChhRGllc291bmQpOwogICAgc3ViXzQwNkVCRih2MyArIDE4NCwgMCwgLTEpOwogICAgc3ViXzg1QUFFMChhSWRsZXNvdW5kKTsKICAgIHN1Yl80MDZFQkYodjMgKyAxODgsIDAsIC0xKTsKICAgIHYxMDIgPSBzdWJfODVBQUUwKGFUcmFuc2Zvcm1hYmxlaSkgKyAxNjsKICAgIHN1Yl80MDJFOTYoMiwgMSk7CiAgICB2MTAzID0gKGNoYXIgKil2M1sxOTJdOwogICAgdjE4MSA9IDY4OwogICAgc3ViXzQwODAyQih2MTAzKTsKICAgIGlmICggKihfRFdPUkQgKikodjEwMiArIDgpICkKICAgICAgc3ViXzQwNTk1NygxLCAzMik7CiAgICB2MTA0ID0gc3ViXzQwREY1MygmdjE2OSk7CiAgICBMT0JZVEUodjE4MSkgPSA2OTsKICAgIHN0ZDo6YmFzaWNfc3RyaW5nPGNoYXIsc3RkOjpjaGFyX3RyYWl0czxjaGFyPixzdGQ6OmFsbG9jYXRvcjxjaGFyPj46OmFwcGVuZCh2MTA0LCAwLCAtMSk7CiAgICBMT0JZVEUodjE4MSkgPSA2ODsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTgxID0gLTE7CiAgICBzdWJfNDBEMDRFKCZ2MTcyKTsKICAgIHYxMDUgPSBzdWJfODVBQUUwKGFUcmFuc2Zvcm1hYmxlaV8wKSArIDE2OwogICAgc3ViXzQwMkU5NigyLCAxKTsKICAgIHYxMDYgPSAoY2hhciAqKXYzWzE5M107CiAgICB2MTgxID0gNzA7CiAgICBzdWJfNDA4MDJCKHYxMDYpOwogICAgaWYgKCAqKF9EV09SRCAqKSh2MTA1ICsgOCkgKQogICAgICBzdWJfNDA1OTU3KDEsIDMyKTsKICAgIHYxMDcgPSBzdWJfNDBERjUzKCZ2MTY5KTsKICAgIExPQllURSh2MTgxKSA9IDcxOwogICAgc3RkOjpiYXNpY19zdHJpbmc8Y2hhcixzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LHN0ZDo6YWxsb2NhdG9yPGNoYXI+Pjo6YXBwZW5kKHYxMDcsIDAsIC0xKTsKICAgIExPQllURSh2MTgxKSA9IDcwOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxODEgPSAtMTsKICAgIHN1Yl80MEQwNEUoJnYxNzIpOwogICAgdjEwOCA9IHN1Yl84NUFBRTAoYUV2ZW50aWQpICsgMTY7CiAgICBzdWJfNDAyRTk2KDIsIDEpOwogICAgdjEwOSA9IChjaGFyICopdjNbMTk1XTsKICAgIHYxODEgPSA3MjsKICAgIHN1Yl80MDgwMkIodjEwOSk7CiAgICBpZiAoICooX0RXT1JEICopKHYxMDggKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjExMCA9IHN1Yl80MERGNTMoJnYxNjkpOwogICAgTE9CWVRFKHYxODEpID0gNzM7CiAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4+OjphcHBlbmQodjExMCwgMCwgLTEpOwogICAgTE9CWVRFKHYxODEpID0gNzI7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgc3ViXzQwRDA0RSgmdjE3Mik7CiAgICB2MTExID0gc3ViXzg1QUFFMChhVG93ZXJzcGVjaWZpZWQpICsgMTY7CiAgICBzdWJfNDAyRTk2KDIsIDEpOwogICAgdjExMiA9IChjaGFyICopdjNbMTk2XTsKICAgIHYxODEgPSA3NDsKICAgIHN1Yl80MDgwMkIodjExMik7CiAgICBpZiAoICooX0RXT1JEICopKHYxMTEgKyA4KSApCiAgICAgIHN1Yl80MDU5NTcoMSwgMzIpOwogICAgdjExMyA9IHN1Yl80MERGNTMoJnYxNjkpOwogICAgTE9CWVRFKHYxODEpID0gNzU7CiAgICBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sc3RkOjphbGxvY2F0b3I8Y2hhcj4+OjphcHBlbmQodjExMywgMCwgLTEpOwogICAgTE9CWVRFKHYxODEpID0gNzQ7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjE4MSA9IC0xOwogICAgcmVzdWx0ID0gc3ViXzQwRDA0RSgmdjE3Mik7CiAgfQogIGVsc2UKICB7CiAgICB2MTE1ID0gc3ViXzg1QUQ5MChhMiwgYUNhdGVnb3J5KTsKICAgIGlmICggIXYxMTUgKQogICAgewogICAgICB2MTY4ID0gYUNhdGVnb3J5OwogICAgICBfQ3h4VGhyb3dFeGNlcHRpb24oJnYxNjgsICZkd29yZF9BRTFDMDgpOwogICAgfQogICAgc3ViXzQwNzI3MCgmdjE2OSwgdjExNSArIDE2LCB2MyArIDQpOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxMTYgPSBzdWJfODVBRDkwKGEyLCBhTmFtZSk7CiAgICBpZiAoICF2MTE2ICkKICAgIHsKICAgICAgdjE2OCA9IGFOYW1lOwogICAgICBfQ3h4VGhyb3dFeGNlcHRpb24oJnYxNjgsICZkd29yZF9BRTFDMDgpOwogICAgfQogICAgc3ViXzQwNkVCRih2MTE2ICsgMTYsIDAsIC0xKTsKICAgIHYxMTcgPSBzdWJfODVBQUUwKGFDb21tZW50KTsKICAgIHN1Yl80MDZFQkYodjExNyArIDE2LCAwLCAtMSk7CiAgICB2MTE4ID0gc3ViXzg1QUQ5MChhMiwgYU1vZGVsKTsKICAgIGlmICggIXYxMTggKQogICAgewogICAgICB2MTY4ID0gYU1vZGVsOwogICAgICBfQ3h4VGhyb3dFeGNlcHRpb24oJnYxNjgsICZkd29yZF9BRTFDMDgpOwogICAgfQogICAgc3ViXzQwNkVCRih2MTE4ICsgMTYsIDAsIC0xKTsKICAgIHYxMTkgPSBzdWJfODVBRDkwKGEyLCBhSGVpZ2h0KTsKICAgIGlmICggIXYxMTkgKQogICAgewogICAgICB2MTY4ID0gYUhlaWdodDsKICAgICAgX0N4eFRocm93RXhjZXB0aW9uKCZ2MTY4LCAmZHdvcmRfQUUxQzA4KTsKICAgIH0KICAgIHN1Yl80MDcwMTgoJnYxNjksIHYxMTkgKyAxNiwgdjMgKyAxNyk7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjEyMCA9IHN1Yl84NUFEOTAoYTIsIGFTaXplKTsKICAgIGlmICggIXYxMjAgKQogICAgewogICAgICB2MTY4ID0gYVNpemU7CiAgICAgIF9DeHhUaHJvd0V4Y2VwdGlvbigmdjE2OCwgJmR3b3JkX0FFMUMwOCk7CiAgICB9CiAgICBzdWJfNDA3MDE4KCZ2MTY5LCB2MTIwICsgMTYsIHYzICsgMTgpOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxMjEgPSBzdWJfODVBRDkwKGEyLCBhRGVsYXl0aW1lKTsKICAgIGlmICggIXYxMjEgKQogICAgewogICAgICB2MTY4ID0gYURlbGF5dGltZTsKICAgICAgX0N4eFRocm93RXhjZXB0aW9uKCZ2MTY4LCAmZHdvcmRfQUUxQzA4KTsKICAgIH0KICAgIHN1Yl80MDcwMTgoJnYxNjksIHYxMjEgKyAxNiwgdjMgKyAxOSk7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjEyMiA9IHN1Yl84NUFEOTAoYTIsIGFMZXZlbCk7CiAgICBpZiAoICF2MTIyICkKICAgIHsKICAgICAgdjE2OCA9IGFMZXZlbDsKICAgICAgX0N4eFRocm93RXhjZXB0aW9uKCZ2MTY4LCAmZHdvcmRfQUUxQzA4KTsKICAgIH0KICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxMjIgKyAxNiwgdjMgKyAyMCk7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjEyMyA9IHN1Yl84NUFEOTAoYTIsIGFNYXhocCk7CiAgICBpZiAoICF2MTIzICkKICAgIHsKICAgICAgdjE2OCA9IGFNYXhocDsKICAgICAgX0N4eFRocm93RXhjZXB0aW9uKCZ2MTY4LCAmZHdvcmRfQUUxQzA4KTsKICAgIH0KICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxMjMgKyAxNiwgdjMgKyAyMSk7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjEyNCA9IHN1Yl84NUFEOTAoYTIsIGFNYXhtcCk7CiAgICBpZiAoICF2MTI0ICkKICAgIHsKICAgICAgdjE2OCA9IGFNYXhtcDsKICAgICAgX0N4eFRocm93RXhjZXB0aW9uKCZ2MTY4LCAmZHdvcmRfQUUxQzA4KTsKICAgIH0KICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxMjQgKyAxNiwgdjMgKyAyMik7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjEyNSA9IHN1Yl84NUFEOTAoYTIsIGFNb3Zlc3BlZWQpOwogICAgaWYgKCAhdjEyNSApCiAgICB7CiAgICAgIHYxNjggPSBhTW92ZXNwZWVkOwogICAgICBfQ3h4VGhyb3dFeGNlcHRpb24oJnYxNjgsICZkd29yZF9BRTFDMDgpOwogICAgfQogICAgdjEyNiA9IHN1Yl80MDcwMTgoJnYxNzEsIHYxMjUgKyAxNiwgdjMgKyAyMyk7CiAgICB2MTgxID0gNzY7CiAgICBzdWJfNDA3MDE4KCZ2MTY5LCB2MTI2LCB2MyArIDI0KTsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTgxID0gLTE7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjEyNyA9IHN1Yl84NUFEOTAoYTIsIGFCYXNlbW92ZXNwZWVkKTsKICAgIGlmICggdjEyNyApCiAgICB7CiAgICAgIHYxMjggPSBzdWJfNDA3MDE4KCZ2MTcxLCB2MTI3ICsgMTYsIHYzICsgMjUpOwogICAgICB2MTgxID0gNzc7CiAgICAgIHN1Yl80MDcwMTgoJnYxNjksIHYxMjgsIHYzICsgMjYpOwogICAgICBzdWJfNDAyOUQ3KDEpOwogICAgICB2MTgxID0gLTE7CiAgICAgIHN1Yl80MDI5RDcoMSk7CiAgICB9CiAgICB2MTI5ID0gc3ViXzg1QUQ5MChhMiwgYU5hdHVyYWwpOwogICAgaWYgKCAhdjEyOSApCiAgICB7CiAgICAgIHYxNjggPSBhTmF0dXJhbDsKICAgICAgX0N4eFRocm93RXhjZXB0aW9uKCZ2MTY4LCAmZHdvcmRfQUUxQzA4KTsKICAgIH0KICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxMjkgKyAxNiwgdjMgKyAyNyk7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjEzMCA9IHN1Yl84NUFEOTAoYTIsIGFJbW11bml0eWxldmVsKTsKICAgIGlmICggdjEzMCApCiAgICB7CiAgICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxMzAgKyAxNiwgdjMgKyAyOCk7CiAgICAgIHN1Yl80MDI5RDcoMSk7CiAgICB9CiAgICBzdWJfNDA4OTgxKHYzWzMwXSwgdjNbMzFdKTsKICAgIHYxMzEgPSBzdWJfODVBRDkwKGEyLCBhQWJub3JtYWxpbW11bmkpOwogICAgaWYgKCB2MTMxICkKICAgIHsKICAgICAgc3ViXzQwMTkxNSh2MTMxICsgMTYsIDEsIDEpOwogICAgICB2MTgxID0gNzg7CiAgICAgIHdoaWxlICggISh2MTczWyooX0RXT1JEICopKHYxNzIgKyA0KV0gJiAxKSApCiAgICAgIHsKICAgICAgICBzdWJfNDAzNkEyKCZ2MTY4KTsKICAgICAgICBpZiAoIHYxNzNbKihfRFdPUkQgKikodjE3MiArIDQpXSAmIDYgKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgc3ViXzQwOTMwRSh2M1szMV0sICZ2MTY4KTsKICAgICAgfQogICAgICB2MTgxID0gLTE7CiAgICAgIHN1Yl80MDFENjEoJnYxNzQpOwogICAgICBzdWJfNDA2MzYxKCZ2MTc0KTsKICAgIH0KICAgIHYxMzIgPSBzdWJfNDA1Mzk5KChpbnQpYTIsIGFCb251c2V4cCk7CiAgICBzdWJfNDA3MjcwKCZ2MTY5LCB2MTMyLCB2MyArIDMzKTsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTMzID0gc3ViXzQwNTM5OSgoaW50KWEyLCBhQXRrcG9pbnRQKTsKICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxMzMsIHYzICsgMzQpOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxMzQgPSBzdWJfNDA1Mzk5KChpbnQpYTIsIGFBdGtwb2ludE0pOwogICAgc3ViXzQwNzI3MCgmdjE2OSwgdjEzNCwgdjMgKyAzNSk7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgdjEzNSA9IHN1Yl80MDUzOTkoKGludClhMiwgYURlZnBvaW50UCk7CiAgICBzdWJfNDA3MjcwKCZ2MTY5LCB2MTM1LCB2MyArIDM2KTsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTM2ID0gc3ViXzQwNTM5OSgoaW50KWEyLCBhRGVmcG9pbnRNKTsKICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxMzYsIHYzICsgMzcpOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxMzcgPSBzdWJfNDA1Mzk5KChpbnQpYTIsIGFIaXRyYXRlKTsKICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxMzcsIHYzICsgMzgpOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxMzggPSBzdWJfNDA1Mzk5KChpbnQpYTIsIGFBdmlyYXRlKTsKICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxMzgsIHYzICsgMzkpOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxMzkgPSBzdWJfNDA1Mzk5KChpbnQpYTIsIGFBdGtpbnRlcnZhbCk7CiAgICBzdWJfNDA3MDE4KCZ2MTY5LCB2MTM5LCB2MyArIDQwKTsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTQwID0gc3ViXzQwNTM5OSgoaW50KWEyLCBhVmlld3JhbmdlKTsKICAgIHN1Yl80MDcwMTgoJnYxNjksIHYxNDAsIHYzICsgNDEpOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxNDEgPSBzdWJfNDA1Mzk5KChpbnQpYTIsIGFUcmFjZXJhbmdlKTsKICAgIHN1Yl80MDcwMTgoJnYxNjksIHYxNDEsIHYzICsgNDIpOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxNDIgPSBzdWJfNDA1Mzk5KChpbnQpYTIsIGFBdHRhY2tyYW5nZSk7CiAgICBzdWJfNDA3MDE4KCZ2MTY5LCB2MTQyLCB2MyArIDQzKTsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTQzID0gc3ViXzQwNTM5OSgoaW50KWEyLCBhRWNob3JhbmdlKTsKICAgIHN1Yl80MDcwMTgoJnYxNjksIHYxNDMsIHYzICsgNDQpOwogICAgc3ViXzQwMjlENygxKTsKICAgIHYxNDQgPSBzdWJfNDA1Mzk5KChpbnQpYTIsIGFQYXRyb2xyYW5nZSk7CiAgICBzdWJfNDA3MDE4KCZ2MTY5LCB2MTQ0LCB2MyArIDQ1KTsKICAgIHN1Yl80MDI5RDcoMSk7CiAgICB2MTQ1ID0gc3ViXzQwNTM5OSgoaW50KWEyLCBhRXNjYXBlaHApOwogICAgc3ViXzQwNzAxOCgmdjE2OSwgdjE0NSwgdjMgKyA0Nik7CiAgICBzdWJfNDAyOUQ3KDEpOwogICAgaWYgKCAqKChmbG9hdCAqKXYzICsgNDIpIDwgKGRvdWJsZSkqKChmbG9hdCAqKXYzICsgNDUpICkKICAgICAgdjNbNDJdID0gdjNbNDVdOwogICAgdjE0NiA9IDE7CiAgICB2MTQ3ID0gKGludCkodjMgKyA1Mik7CiAgICBkbwogICAgewogICAgICBzcHJpbnRmKCZ2MTc2LCBhRHJvcGl0ZW1ORCwgdjE0Nik7CiAgICAgIHYxNDggPSBzdWJfNDA1Mzk5KChpbnQpYTIsICh1bnNpZ25lZCBfX2ludDggKikmdjE3Nik7CiAgICAgIHN1Yl80MDcyNzAoJnYxNjksIHYxNDgsIHYxNDcgLSA0KTsKICAgICAgc3ViXzQwMjlENygxKTsKICAgICAgc3ByaW50ZigmdjE3NiwgYURyb3ByYXRlTkQsIHYxNDYpOwogICAgICB2MTQ5ID0gc3ViXzQwNTM5OSgoaW50KWEyLCAodW5zaWduZWQgX19pbnQ4ICopJnYxNzYpOwogICAgICBzdWJfNDA3MDE4KCZ2MTcxLCB2MTQ5LCB2MTQ3KTsKICAgICAgc3ViXzQwMjlENygxKTsKICAgICAgdjE0NyArPSA4OwogICAgICArK3YxNDY7CiAgICB9CiAgICB3aGlsZSAoICh1bnNpZ25lZCBpbnQpKHYxNDYgLSAxKSA8IDB4MTggKTsKICAgIHYxNTAgPSAxOwogICAgdjE1MSA9IChpbnQpKHYzICsgMTAwKTsKICAgIGRvCiAgICB7CiAgICAgIHNwcmludGYoJnYxNzYsIGFEcm9waXRlbU1ELCB2MTUwKTsKICAgICAgdjE1MiA9IHN1Yl80MDUzOTkoKGludClhMiwgKHVuc2lnbmVkIF9faW50OCAqKSZ2MTc2KTsKICAgICAgc3ViXzQwNzI3MCgmdjE2OSwgdjE1MiwgdjE1MSAtIDQpOwogICAgICBzdWJfNDAyOUQ3KDEpOwogICAgICBzcHJpbnRmKCZ2MTc2LCBhRHJvcHJhdGVNRCwgdjE1MCk7CiAgICAgIHYxNTMgPSBzdWJfNDA1Mzk5KChpbnQpYTIsICh1bnNpZ25lZCBfX2ludDggKikmdjE3Nik7CiAgICAgIHN1Yl80MDcwMTgoJnYxNzEsIHYxNTMsIHYxNTEpOwogICAgICBzdWJfNDAyOUQ3KDEpOwogICAgICB2MTUxICs9IDg7CiAgICAgICsrdjE1MDsKICAgIH0KICAgIHdoaWxlICggKHVuc2lnbmVkIGludCkodjE1MCAtIDEpIDwgMyApOwogICAgdjE1NCA9IDE7CiAgICB2MTU1ID0gKGludCkodjMgKyAxMDYpOwogICAgZG8KICAgIHsKICAgICAgc3ByaW50ZigmdjE3NiwgYURyb3BpdGVtQkQsIHYxNTQpOwogICAgICB2MTU2ID0gc3ViXzQwNTM5OSgoaW50KWEyLCAodW5zaWduZWQgX19pbnQ4ICopJnYxNzYpOwogICAgICBzdWJfNDA3MjcwKCZ2MTY5LCB2MTU2LCB2MTU1IC0gNCk7CiAgICAgIHN1Yl80MDI5RDcoMSk7CiAgICAgIHNwcmludGYoJnYxNzYsIGFEcm9wcmF0ZUJELCB2MTU0KTsKICAgICAgdjE1NyA9IHN1Yl80MDUzOTkoKGludClhMiwgKHVuc2lnbmVkIF9faW50OCAqKSZ2MTc2KTsKICAgICAgc3ViXzQwNzAxOCgmdjE3MSwgdjE1NywgdjE1NSk7CiAgICAgIHN1Yl80MDI5RDcoMSk7CiAgICAgIHYxNTUgKz0gODsKICAgICAgKyt2MTU0OwogICAgfQogICAgd2hpbGUgKCAodW5zaWduZWQgaW50KSh2MTU0IC0gMSkgPCA5ICk7CiAgICB2MTU4ID0gMTsKICAgIHYxNTkgPSAoaW50KSh2MyArIDE2Mik7CiAgICBkbwogICAgewogICAgICBzcHJpbnRmKCZ2MTc2LCBhVXNlY2hhdEhwRCwgdjE1OCk7CiAgICAgIHYxNjAgPSBzdWJfNDA1Mzk5KChpbnQpYTIsICh1bnNpZ25lZCBfX2ludDggKikmdjE3Nik7CiAgICAgIHN1Yl80MDIwNUUoJnYxNjksIHYxNjAsIHYxNTkgLSAxMik7CiAgICAgIHN1Yl80MDI5RDcoMSk7CiAgICAgIHNwcmludGYoJnYxNzYsIGFVc2VjaGF0VGV4dEQsIHYxNTgpOwogICAgICB2MTYxID0gc3ViXzQwNTM5OSgoaW50KWEyLCAodW5zaWduZWQgX19pbnQ4ICopJnYxNzYpOwogICAgICBzdWJfNDA2RUJGKHYxNjEsIDAsIC0xKTsKICAgICAgKyt2MTU4OwogICAgICB2MTU5ICs9IDI4OwogICAgfQogICAgd2hpbGUgKCAodW5zaWduZWQgaW50KSh2MTU4IC0gMSkgPCAzICk7CiAgICB2MTYyID0gc3ViXzQwNTM5OSgoaW50KWEyLCBhQXR0YWNrc291bmQpOwogICAgc3ViXzQwNkVCRih2MTYyLCAwLCAtMSk7CiAgICB2MTYzID0gc3ViXzQwNTM5OSgoaW50KWEyLCBhRGllc291bmQpOwogICAgc3ViXzQwNkVCRih2MTYzLCAwLCAtMSk7CiAgICB2MTY0ID0gc3ViXzQwNTM5OSgoaW50KWEyLCBhSWRsZXNvdW5kKTsKICAgIHN1Yl80MDZFQkYodjE2NCwgMCwgLTEpOwogICAgdjE2NSA9IHN1Yl84NUFEOTAoYTIsIGFUcmFuc2Zvcm1hYmxlaSk7CiAgICBpZiAoIHYxNjUgKQogICAgewogICAgICBzdWJfNDA3MjcwKCZ2MTY5LCB2MTY1ICsgMTYsIHYzICsgMTkyKTsKICAgICAgc3ViXzQwMjlENygxKTsKICAgIH0KICAgIHYxNjYgPSBzdWJfODVBRDkwKGEyLCBhVHJhbnNmb3JtYWJsZWlfMCk7CiAgICBpZiAoIHYxNjYgKQogICAgewogICAgICBzdWJfNDA3MjcwKCZ2MTY5LCB2MTY2ICsgMTYsIHYzICsgMTkzKTsKICAgICAgc3ViXzQwMjlENygxKTsKICAgIH0KICAgIHYxNjcgPSBzdWJfODVBRDkwKGEyLCBhRXZlbnRpZCk7CiAgICBpZiAoIHYxNjcgKQogICAgewogICAgICBzdWJfNDA3MjcwKCZ2MTY5LCB2MTY3ICsgMTYsIHYzICsgMTk1KTsKICAgICAgc3ViXzQwMjlENygxKTsKICAgIH0KICAgIHJlc3VsdCA9IHN1Yl84NUFEOTAoYTIsIGFUb3dlcnNwZWNpZmllZCk7CiAgICBpZiAoIHJlc3VsdCApCiAgICB7CiAgICAgIHN1Yl80MDcyNzAoJnYxODAsIHJlc3VsdCArIDE2LCB2MyArIDE5Nik7CiAgICAgIHJlc3VsdCA9IHN1Yl80MDI5RDcoMSk7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0=