__int64 sub_140091310() { __int64 v0; // rdi int v1; // er12 int v2; // er15 int v3; // er13 __int64 v4; // r14 char *i; // rbx char *v6; // rax char v7; // al char v8; // si char *v9; // rdx char *v10; // r9 char v11; // r8 unsigned __int64 v12; // rax __int64 v13; // rcx char *j; // rax char v15; // cl char *v16; // rbx int v17; // eax _BYTE *v18; // rcx int v19; // eax char *v20; // rbx __int64 v21; // rcx char v22; // al char v23; // al char *v24; // rax __int64 v25; // r8 __int64 result; // rax __int64 v27; // rax void *v28; // rdi unsigned int v29; // ebx int v30; // er14 __int64 v31; // r15 __int64 v32; // rsi unsigned int v33; // ebx __int64 v34; // r9 int v35; // edx char v36; // al const char *v37; // rdx char v38; // al int v39; // [rsp+30h] [rbp-D0h] char v40[8]; // [rsp+40h] [rbp-C0h] BYREF __int128 v41; // [rsp+48h] [rbp-B8h] BYREF __int128 v42; // [rsp+58h] [rbp-A8h] __int64 v43; // [rsp+68h] [rbp-98h] __int64 v44[2]; // [rsp+70h] [rbp-90h] BYREF __int128 v45; // [rsp+80h] [rbp-80h] BYREF __int128 v46; // [rsp+90h] [rbp-70h] __int64 v47; // [rsp+A0h] [rbp-60h] __int128 v48; // [rsp+B0h] [rbp-50h] BYREF __int128 v49; // [rsp+C0h] [rbp-40h] __int64 v50; // [rsp+D0h] [rbp-30h] char v51[1024]; // [rsp+E0h] [rbp-20h] BYREF char v52[1104]; // [rsp+4E0h] [rbp+3E0h] BYREF v0 = 0i64; v40[0] = 1; v1 = 0; v41 = 0ui64; v52[0] = 0; v2 = 0; v3 = 0; v42 = 0ui64; v4 = 0i64; v43 = 0i64; dword_14238F2C8 = 0; sub_140086F40(&unk_1412F0930); for ( i = qword_1434ADD78; *i == 32 || *i == 9; qword_1434ADD78 = i ) ++i; if ( *i ) { sub_140086F40(&unk_1412F0968); v6 = qword_1434ADD78; if ( *qword_1434ADD78 == 34 ) v6 = ++qword_1434ADD78; if ( !*v6 && !dword_1434ADD50 ) sub_1400890B0(); v7 = toupper(*v6); ++qword_1434ADD78; v8 = v7; LOBYTE(v41) = v7; switch ( toupper(v7) ) { case 'C': case 'D': case 'F': case 'I': case 'L': case 'M': case 'N': case 'T': v9 = qword_1434ADD78; v10 = qword_1434ADD78 + 11; if ( qword_1434ADD78 < qword_1434ADD78 + 11 ) { while ( 1 ) { v11 = *v9; if ( (unsigned __int8)(*v9 - 48) > 9u ) break; qword_1434ADD78 = ++v9; v0 = v11 + 2 * (5 * v0 - 24); *((_QWORD *)&v41 + 1) = v0; if ( v9 >= v10 ) goto LABEL_16; } v8 = 0; LOBYTE(v41) = 0; } LABEL_16: if ( *v9 == 34 ) qword_1434ADD78 = ++v9; v12 = (unsigned __int8)*v9; if ( !(_BYTE)v12 && !dword_1434ADD50 ) sub_1400890B0(); if ( !v8 ) goto LABEL_63; if ( (unsigned __int8)v12 > 0x2Cu ) goto LABEL_63; v13 = 0x100100000200i64; if ( !_bittest64(&v13, v12) ) goto LABEL_63; sub_140086F40(&unk_1412F0A10); for ( j = qword_1434ADD78; *j == 32 || *j == 9; qword_1434ADD78 = j ) ++j; if ( *j != 44 ) goto LABEL_29; do { qword_1434ADD78 = ++j; LABEL_29: v15 = *j; } while ( *j == 32 || v15 == 9 ); if ( !v15 ) { if ( !dword_1434ADD50 ) sub_1400890B0(); goto LABEL_63; } sub_140086F40(&unk_1412F0A48); v16 = qword_1434ADD78; if ( *qword_1434ADD78 == 34 ) v16 = ++qword_1434ADD78; v44[0] = (__int64)v16; v17 = sub_14008FC30(v44, 10i64); v18 = (_BYTE *)v44[0]; LODWORD(v42) = v17; if ( *(_BYTE *)v44[0] == 47 && (unsigned int)(v17 - 1) <= 0xB ) { ++v44[0]; v19 = sub_14008FC30(v44, 10i64); v18 = (_BYTE *)v44[0]; DWORD1(v42) = v19; } else { DWORD1(v42) = 0; } if ( *v18 && (unsigned int)(DWORD1(v42) - 2000) > 0x63 ) sub_140087A60("!#invalid expiration date"); v20 = &qword_1434ADD78[v18 - v16]; qword_1434ADD78 = v20; if ( (unsigned __int8)*v20 > 0x2Cu ) goto LABEL_46; v21 = 0x100500000200i64; if ( !_bittest64(&v21, *v20) ) goto LABEL_46; sub_140086F40(&unk_1412F0AB8); v20 = qword_1434ADD78; if ( *qword_1434ADD78 != 34 ) goto LABEL_46; do { qword_1434ADD78 = ++v20; LABEL_46: v22 = *v20; } while ( *v20 == 32 || v22 == 9 ); if ( v22 != 44 ) goto LABEL_50; do { qword_1434ADD78 = ++v20; LABEL_50: v23 = *v20; } while ( *v20 == 32 || v23 == 9 ); if ( !v23 && !dword_1434ADD50 ) sub_1400890B0(); if ( v23 == 34 ) qword_1434ADD78 = ++v20; v44[0] = (__int64)v20; v4 = sub_14008FBA0(v44); *((_QWORD *)&v42 + 1) = v4; v2 = LODWORD(v44[0]) - (_DWORD)v20; qword_1434ADD78 += v44[0] - (_QWORD)v20; if ( !*qword_1434ADD78 && !dword_1434ADD50 ) sub_1400890B0(); sub_140086F40(&unk_1412EE100); v24 = qword_1434ADD78; if ( *qword_1434ADD78 != 34 ) goto LABEL_60; do { qword_1434ADD78 = ++v24; LABEL_60: ; } while ( *v24 == 32 || *v24 == 9 ); break; default: LABEL_63: v8 = 0; qword_1434ADD78 = i; LOBYTE(v41) = 0; sub_14008AEF0(v52, 20i64); break; } } else { v8 = v41; } if ( v52[0] || v8 ) sub_14008CD80(&unk_1412F0B40); sub_14008CA80(); if ( v8 ) { if ( !v2 ) sub_140087B60("##cbf_morearg"); if ( v2 != 16 || !v4 ) sub_140087B60("!!Invalid key code"); } LOBYTE(v25) = 1; result = sub_140144570("License.AllowSaveToCable", v40, v25); if ( v52[0] ) { v27 = sub_1400E1F10(v52, 2166358016i64); v28 = (void *)v27; if ( v27 == -1 ) { result = sub_1400B5D80("Failed to open license file %s", v52); } else { if ( dword_14238D9B8 > 0 ) { v30 = 0; if ( dword_14238D9B8 > 0 ) { v31 = 0i64; do { if ( v31 >= 0 && v30 < dword_14238D9B8 ) { v32 = *(_QWORD *)(qword_14238F210[v31] + 8); if ( v32 ) { v33 = 0; sub_1400E2DC0(v28, 0i64); LOBYTE(v41) = 0; *(_QWORD *)&v42 = 0i64; LODWORD(v43) = 0; if ( (int)sub_1400DF8E0(v28, v51, 1024i64) > 0 ) { do { ++v33; LOBYTE(v39) = 0; LOBYTE(v34) = 67; } while ( (unsigned __int8)sub_140093AB0(4i64, v33, v51, v34, v32, &v41, v39, v52) && (int)sub_1400DF8E0(v28, v51, 1024i64) > 0 ); if ( (unsigned __int8)(v41 - 67) <= 0x11u ) { v35 = 133121; if ( _bittest(&v35, (unsigned __int8)v41 - 67) ) { if ( (_DWORD)v43 && *((_QWORD *)&v42 + 1) && (_DWORD)v42 && DWORD1(v42) ) { if ( (_BYTE)v41 != 67 || !v40[0] || (unsigned __int8)sub_1400941D0(&v41) || (dword_14238F2C8 & 1) != 0 ) { v45 = v41; v47 = v43; v46 = v42; v36 = sub_140092BC0(&v45); } else { v48 = v41; v50 = v43; v49 = v42; v36 = sub_140092A20(&v48); } v3 += v36 == 0; } } } } } } ++v30; ++v31; } while ( v30 < dword_14238D9B8 ); } } else { v29 = 0; *(_QWORD *)&v42 = 0i64; LOBYTE(v41) = 0; LODWORD(v43) = 0; if ( (int)sub_1400DF8E0(v27, v51, 1024i64) > 0 ) { do { LOBYTE(v39) = 0; ++v29; } while ( (unsigned __int8)sub_140093AB0( 4i64, v29, v51, (unsigned __int8)byte_14238D9BC, qword_14238DAC8, &v41, v39, v52) && (int)sub_1400DF8E0(v28, v51, 1024i64) > 0 ); if ( (_DWORD)v43 && (_BYTE)v41 && *((_QWORD *)&v42 + 1) && (_DWORD)v42 && DWORD1(v42) ) { v48 = v41; v50 = v43; v49 = v42; LOBYTE(v3) = (unsigned __int8)sub_140092BC0(&v48) == 0; } } } result = sub_1400DEE50(v28); if ( v3 ) { v37 = &byte_140FF4982; if ( v3 > 1 ) v37 = "s"; result = sub_1400B5D80("Failed to updated maintenance key%s", v37); } } } else { if ( !v8 ) { if ( (qword_14238DAF0 & 1) != 0 || (_BYTE)xmmword_14238DAD0 != 67 || !v40[0] ) return result; v41 = xmmword_14238DAD0; v43 = qword_14238DAF0; v42 = xmmword_14238DAE0; result = sub_1401179D0(1280659538i64); if ( (_DWORD)result ) result = sub_1400B7C40(qword_14349D420); v8 = v41; v0 = *((_QWORD *)&v41 + 1); v4 = *((_QWORD *)&v42 + 1); } if ( v4 && (_DWORD)v42 && DWORD1(v42) ) { if ( v8 != 67 ) goto LABEL_128; if ( !(unsigned __int8)sub_1400961E0(v0) ) { sub_1400940A0(v51, &v41); return sub_1400B5D80("'%s' not suitable for plugged cable", v51); } if ( !v40[0] || (unsigned __int8)sub_1400941D0(&v41) || (dword_14238F2C8 & 1) != 0 ) { LABEL_128: v45 = v41; v47 = v43; v46 = v42; v38 = sub_140092BC0(&v45); } else { v45 = v41; v47 = v43; v46 = v42; v38 = sub_140092A20(&v45); } LOBYTE(v1) = v38 == 0; if ( v1 ) { result = sub_1400B5D80("Failed to updated maintenance key"); } else { sub_140093E60(&xmmword_14238DB20, *((_QWORD *)&xmmword_14238DAF8 + 1), (unsigned __int8)xmmword_14238DAF8); byte_14238DB48 = 0; byte_14238DB60 = 0; xmmword_14238DAF8 = xmmword_14238DB20; qword_14238DB18 = qword_14238DB40; xmmword_14238DB08 = xmmword_14238DB30; result = sub_1400942E0(); } } } return result; }