// // __acrt_fltout from 0x18013e1cc to 0x18013f40a (4670 bytes) // // 4 xrefs: // > sub_180137954 @ 0x180137995 // > sub_180137D7C @ 0x180137dc0 // > sub_180137FE0 @ 0x180138200 // > @ 0x180203b54 // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // __int64 __fastcall _acrt_fltout(__int64 a1, int a2, int a3, __int64 a4, char *a5, rsize_t SizeInBytes) { unsigned int v8; // r15d int v9; // eax const char *v10; // r8 int v11; // eax int v12; // eax int v13; // eax int v14; // eax unsigned int v15; // r12d double v16; // xmm0_8 double v17; // xmm0_8 unsigned __int64 v18; // rbx unsigned int v19; // edx __int64 v20; // r8 unsigned int v21; // r11d size_t v22; // r8 bool v23; // zf int v24; // eax int v25; // eax unsigned int v26; // r14d __int64 v27; // r10 __int64 v28; // rax __int64 v29; // rcx int v30; // r9d int v31; // edx __int64 v32; // rcx unsigned int v33; // r12d unsigned int v34; // r11d int v35; // eax int v36; // eax __int64 v37; // r10 __int64 v38; // rax __int64 v39; // rcx int v40; // r9d int v41; // edx __int64 v42; // rcx __int64 v43; // r8 int v44; // eax int v45; // eax unsigned int v46; // edi unsigned int v47; // eax __int64 v48; // r10 __int64 v49; // r8 int v50; // r9d unsigned int v51; // ecx int v52; // eax int v53; // eax unsigned int v54; // eax __int64 v55; // r10 __int64 v56; // r8 int v57; // r9d unsigned int v58; // ecx unsigned int v59; // eax unsigned int v60; // ecx int v61; // eax __int64 v62; // rax __int64 v63; // rdi __int64 v64; // rsi size_t v65; // rbx unsigned int v66; // r10d __int64 v67; // r10 __int64 v68; // r9 unsigned __int64 v69; // rcx char v70; // al __int64 v71; // rbx __int64 v72; // r9 unsigned __int64 v73; // rcx unsigned int v74; // ebx unsigned int *v75; // rcx unsigned int *v76; // rdx __int64 v77; // r9 __int64 v78; // rsi unsigned __int64 v79; // r11 __int64 v80; // rdi __int64 v81; // rax unsigned __int64 v82; // rdx __int64 v83; // rdx __int64 v84; // rax int v85; // eax unsigned int v86; // eax __int64 v87; // r9 unsigned __int64 v88; // rcx char *v89; // rsi char *v90; // rbx __int64 v91; // r9 unsigned __int64 v92; // r8 int v93; // ecx unsigned int v94; // eax unsigned int v95; // edx int v96; // eax __int64 v97; // rax __int64 v98; // rdi __int64 v99; // rsi size_t v100; // rbx unsigned int v101; // r10d __int64 v102; // r10 __int64 v103; // r9 unsigned __int64 v104; // rcx char v105; // al __int64 v106; // rbx __int64 v107; // r9 unsigned __int64 v108; // rcx unsigned int v109; // ebx unsigned int *p_Source; // rcx unsigned int *v111; // rdx __int64 v112; // r9 __int64 v113; // rsi unsigned __int64 v114; // r11 __int64 v115; // rdi __int64 v116; // rax unsigned __int64 v117; // rdx __int64 v118; // rdx unsigned __int64 v119; // rcx unsigned int v120; // ecx unsigned int v121; // eax __int64 v122; // r9 unsigned __int64 v123; // rcx int v124; // eax int v125; // edi unsigned __int64 v126; // r8 __int64 v127; // r9 unsigned __int64 v128; // r8 unsigned int v129; // ecx rsize_t v130; // rdi char *v131; // rdi char v132; // si unsigned int v133; // r9d const struct __crt_strtox::big_integer *v134; // r8 __int64 v135; // r10 unsigned __int64 v136; // rcx unsigned int v137; // r8d unsigned int i; // r9d char v139; // cl __int64 v140; // rax unsigned int *Xa; // [rsp+30h] [rbp-D0h] unsigned int v144; // [rsp+38h] [rbp-C8h] unsigned int v145; // [rsp+3Ch] [rbp-C4h] unsigned int v146; // [rsp+3Ch] [rbp-C4h] unsigned int v147; // [rsp+40h] [rbp-C0h] unsigned int v148; // [rsp+40h] [rbp-C0h] int v149; // [rsp+44h] [rbp-BCh] int v150; // [rsp+48h] [rbp-B8h] unsigned int *v151; // [rsp+50h] [rbp-B0h] unsigned int *v152; // [rsp+50h] [rbp-B0h] unsigned int v153; // [rsp+58h] [rbp-A8h] fenv_t Env; // [rsp+60h] [rbp-A0h] BYREF char v155; // [rsp+68h] [rbp-98h] unsigned int CurrentState; // [rsp+70h] [rbp-90h] BYREF int v157; // [rsp+74h] [rbp-8Ch] char *v158; // [rsp+78h] [rbp-88h] unsigned int *v159; // [rsp+80h] [rbp-80h] __int64 v160; // [rsp+88h] [rbp-78h] unsigned int v161; // [rsp+90h] [rbp-70h] BYREF _DWORD Destination[115]; // [rsp+94h] [rbp-6Ch] BYREF unsigned int v163; // [rsp+260h] [rbp+160h] BYREF _DWORD v164[115]; // [rsp+264h] [rbp+164h] BYREF unsigned int v165; // [rsp+430h] [rbp+330h] unsigned int Source; // [rsp+434h] [rbp+334h] BYREF int v167; // [rsp+438h] [rbp+338h] unsigned int v168; // [rsp+600h] [rbp+500h] _DWORD Src[115]; // [rsp+604h] [rbp+504h] BYREF v158 = a5; v160 = a4; v157 = a3; fegetenv(&Env); v8 = 1; if ( (Env._Fe_ctl & 0x1F) == 0x1F ) { v155 = 0; } else { feholdexcept(&Env); v155 = 1; } v9 = 32; *(_QWORD *)(a4 + 8) = a5; if ( a1 < 0 ) v9 = 45; *(_DWORD *)a4 = v9; controlfp_s(&CurrentState, 0, 0); if ( (((unsigned __int64)a1 >> 52) & 0x7FF) == 0 && ((a1 & 0xFFFFFFFFFFFFFLL) == 0 || (CurrentState & 0x1000000) != 0) ) { *(_DWORD *)(a4 + 4) = 0; v10 = "0"; goto LABEL_10; } if ( (((unsigned __int64)a1 >> 52) & 0x7FF) == 0x7FF ) { if ( (a1 & 0xFFFFFFFFFFFFFLL) != 0 ) { if ( a1 < 0 && (a1 & 0xFFFFFFFFFFFFFLL) == 0x8000000000000LL ) v11 = 4; else v11 = ((((unsigned __int64)a1 >> 51) & 1) == 0) | 2; } else { v11 = 1; } *(_DWORD *)(a4 + 4) = 1; } else { v11 = 0; } v12 = v11 - 1; if ( !v12 ) { if ( !strcpy_s(a5, SizeInBytes, "1#INF") ) goto LABEL_305; goto LABEL_309; } v13 = v12 - 1; if ( !v13 ) { v10 = "1#QNAN"; LABEL_10: if ( !strcpy_s(a5, SizeInBytes, v10) ) goto LABEL_306; LABEL_309: invoke_watson(nullptr, nullptr, nullptr, 0, 0); } v14 = v13 - 1; if ( !v14 ) { v10 = "1#SNAN"; goto LABEL_10; } if ( v14 == 1 ) { v10 = "1#IND"; goto LABEL_10; } v153 = a2 + 1; v15 = (((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) & 0x7FF) + 2 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) & 0x7FF) != 0); v16 = log10(COERCE_DOUBLE(a1 & 0x7FFFFFFFFFFFFFFFLL)); v17 = ceil(v16); Destination[0] = a1; v18 = ((a1 & 0xFFFFFFFFFFFFFLL) + (-(__int64)((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) & 0x7FF) != 0) & 0x10000000000000uLL)) >> 32; Destination[1] = v18; v144 = (((int)v17 - 0x7FFFFFFF) & 0xFFFFFFFE) != 0 ? (int)v17 : 0; v19 = ((_DWORD)v18 != 0) + 1; v161 = v19; if ( v15 < 0x434 ) { if ( v15 != 54 ) { v167 = 0x100000; Source = 0; v165 = 2; if ( (_DWORD)v18 ) { v43 = 0; while ( *(&Source + v43) == Destination[v43] ) { v43 = (unsigned int)(v43 + 1); if ( (_DWORD)v43 == 2 ) { v23 = !_BitScanReverse((unsigned int *)&v44, v18); if ( v23 ) v45 = 0; else v45 = v44 + 1; v26 = v19 + ((unsigned int)(32 - v45) < 2); if ( v26 <= 0x73 ) { v47 = v26 - 1; if ( v26 ) { while ( 1 ) { v48 = v47; v49 = v47 - 1; v50 = v47 >= v19 ? 0 : Destination[v47]; v51 = (unsigned int)v49 >= v19 ? 0 : Destination[v49]; --v47; Destination[v48] = (4 * v50) | (v51 >> 30); if ( (_DWORD)v49 == -1 ) break; v19 = v161; } } } else { v26 = 0; } v161 = v26; v46 = (1078 - v15) >> 5; memset(&Source, 0, 4LL * v46); *(&Source + v46) = 1 << ((54 - (((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) + 2 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) & 0x7FF) != 0))) & 0x1F); goto LABEL_79; } } } } v23 = !_BitScanReverse((unsigned int *)&v52, *(_DWORD *)((char *)Destination + ((_DWORD)v18 != 0 ? 4 : 0))); if ( v23 ) v53 = 0; else v53 = v52 + 1; v26 = v19 + (v53 == 32); if ( v26 <= 0x73 ) { v54 = v26 - 1; if ( v26 ) { while ( 1 ) { v55 = v54; v56 = v54 - 1; v57 = v54 >= v19 ? 0 : Destination[v54]; v58 = (unsigned int)v56 >= v19 ? 0 : Destination[v56]; --v54; Destination[v55] = (2 * v57) | (v58 >> 31); if ( (_DWORD)v56 == -1 ) break; v19 = v161; } } } else { v26 = 0; } v161 = v26; v46 = (1077 - v15) >> 5; memset(&Source, 0, 4LL * v46); *(&Source + v46) = 1 << ((53 - (((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) + 2 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) & 0x7FF) != 0))) & 0x1F); LABEL_79: v33 = v46 + 1; v22 = 4LL * (v46 + 1); v165 = v46 + 1; v163 = v46 + 1; if ( v22 ) { if ( v22 > 0x1CC ) { memset(v164, 0, sizeof(v164)); *errno() = 34; invalid_parameter_noinfo(); } else { memmove(v164, &Source, v22); } v33 = v163; } } else { v167 = 0x100000; Source = 0; v165 = 2; if ( (_DWORD)v18 ) { v20 = 0; while ( *(&Source + v20) == Destination[v20] ) { v20 = (unsigned int)(v20 + 1); if ( (_DWORD)v20 == 2 ) { v21 = (v15 - 1074) & 0x1F; v22 = (v15 - 1074) >> 5; v23 = !_BitScanReverse((unsigned int *)&v24, Destination[(_DWORD)v18 != 0]); if ( v23 ) v25 = 0; else v25 = v24 + 1; if ( v19 + (unsigned int)v22 > 0x73 || (v26 = v22 + v19 + (v21 > 32 - v25), v26 > 0x73) ) { v26 = 0; } else { v27 = v26 - 1; if ( (_DWORD)v27 != (_DWORD)v22 - 1 ) { while ( 1 ) { v28 = (unsigned int)(v27 - v22); v29 = (unsigned int)(v28 - 1); v30 = (unsigned int)v28 >= v19 ? 0 : Destination[v28]; v31 = (unsigned int)v29 >= v19 ? 0 : Destination[v29]; Destination[v27] = ((((unsigned int)(1LL << (32 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) + 2 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) & 0x7FF) != 0) - 50) & 0x1F))) - 1) & v30) << v21) | ((~((unsigned int)(1LL << (32 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) + 2 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) & 0x7FF) != 0) - 50) & 0x1F))) - 1) & v31) >> (32 - v21)); v27 = (unsigned int)(v27 - 1); if ( (_DWORD)v27 == (_DWORD)v22 - 1 ) break; v19 = v161; } } v32 = 0; if ( (_DWORD)v22 ) { do { Destination[v32] = 0; v32 = (unsigned int)(v32 + 1); } while ( (_DWORD)v32 != (_DWORD)v22 ); } } v161 = v26; v33 = 1; v163 = 1; v164[0] = 4; goto LABEL_108; } } } v34 = (v15 - 1075) & 0x1F; v22 = (v15 - 1075) >> 5; v23 = !_BitScanReverse((unsigned int *)&v35, Destination[(_DWORD)v18 != 0]); if ( v23 ) v36 = 0; else v36 = v35 + 1; if ( v19 + (unsigned int)v22 > 0x73 || (v26 = v22 + v19 + (v34 > 32 - v36), v26 > 0x73) ) { v26 = 0; } else { v37 = v26 - 1; if ( (_DWORD)v37 != (_DWORD)v22 - 1 ) { while ( 1 ) { v38 = (unsigned int)(v37 - v22); v39 = (unsigned int)(v38 - 1); v40 = (unsigned int)v38 >= v19 ? 0 : Destination[v38]; v41 = (unsigned int)v39 >= v19 ? 0 : Destination[v39]; Destination[v37] = ((((unsigned int)(1LL << (32 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) + 2 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) & 0x7FF) != 0) - 51) & 0x1F))) - 1) & v40) << v34) | ((~((unsigned int)(1LL << (32 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) + 2 - ((((a1 & 0x7FFFFFFFFFFFFFFFuLL) >> 52) & 0x7FF) != 0) - 51) & 0x1F))) - 1) & v41) >> (32 - v34)); v37 = (unsigned int)(v37 - 1); if ( (_DWORD)v37 == (_DWORD)v22 - 1 ) break; v19 = v161; } } v42 = 0; if ( (_DWORD)v22 ) { do { Destination[v42] = 0; v42 = (unsigned int)(v42 + 1); } while ( (_DWORD)v42 != (_DWORD)v22 ); } } v161 = v26; v33 = 1; v163 = 1; v164[0] = 2; } LABEL_108: if ( (v144 & 0x80000000) != 0 ) { v93 = -v144; v22 = 0x180000000uLL; v94 = -v144 / 0xA; v95 = v94; v146 = v94; if ( !v94 ) goto LABEL_251; while ( 1 ) { v96 = v95; if ( v95 > 0x26 ) v96 = 38; v150 = v96; v97 = (unsigned int)(v96 - 1); v98 = (unsigned int)v97; v99 = (unsigned __int8)byte_18017AF83[4 * v97]; v100 = 4LL * (unsigned __int8)byte_18017AF82[4 * v97]; v165 = v99 + (unsigned __int8)byte_18017AF82[4 * v97]; memset(&Source, 0, v100); memmove((char *)&Source + v100, (char *)&unk_18017A670 + 4 * (unsigned __int16)word_18017AF80[2 * v98], 4 * v99); v101 = v165; if ( v165 > 1 ) { if ( v26 > 1 ) { v109 = v26; p_Source = &Source; if ( v165 < v26 ) v109 = v165; else p_Source = Destination; v159 = p_Source; v148 = v109; v111 = Destination; if ( v165 >= v26 ) v111 = &Source; v152 = v111; if ( v165 < v26 ) v101 = v26; v26 = 0; v112 = 0; v168 = 0; do { v113 = p_Source[v112]; if ( (_DWORD)v113 ) { LODWORD(v114) = 0; v22 = (unsigned int)v112; if ( v101 ) { while ( (_DWORD)v22 != 115 ) { v115 = (unsigned int)v22; if ( (_DWORD)v22 == v26 ) { Src[(unsigned int)v22] = 0; v168 = v22 + 1; } v116 = (unsigned int)(v22 - v112); v22 = (unsigned int)(v22 + 1); v117 = (unsigned int)v114 + (unsigned int)Src[v115] + v113 * v111[v116]; Src[v115] = v117; v26 = v168; v114 = HIDWORD(v117); if ( (_DWORD)v22 - (_DWORD)v112 == v101 ) break; v111 = v152; } if ( (_DWORD)v114 ) { while ( (_DWORD)v22 != 115 ) { v118 = (unsigned int)v22; if ( (_DWORD)v22 == v26 ) { Src[(unsigned int)v22] = 0; v168 = v22 + 1; } v22 = (unsigned int)(v22 + 1); v119 = (unsigned int)v114 + (unsigned __int64)(unsigned int)Src[v118]; Src[v118] = v119; v26 = v168; LODWORD(v114) = HIDWORD(v119); if ( !HIDWORD(v119) ) goto LABEL_238; } LABEL_261: v89 = v158; v161 = 0; v90 = v158; goto LABEL_263; } LABEL_238: v109 = v148; } if ( (_DWORD)v22 == 115 ) goto LABEL_261; p_Source = v159; v111 = v152; } else if ( (_DWORD)v112 == v26 ) { Src[v112] = 0; v26 = v112 + 1; v168 = v112 + 1; } v112 = (unsigned int)(v112 + 1); } while ( (_DWORD)v112 != v109 ); v22 = 4LL * v26; v161 = v26; if ( v22 ) { if ( v22 > 0x1CC ) { memset(Destination, 0, sizeof(Destination)); *errno() = 34; invalid_parameter_noinfo(); } else { memmove(Destination, Src, v22); } LABEL_246: v26 = v161; } goto LABEL_247; } v106 = Destination[0]; v22 = 4LL * v165; v26 = v165; v161 = v165; if ( v22 ) { if ( v22 > 0x1CC ) { memset(Destination, 0, sizeof(Destination)); *errno() = 34; invalid_parameter_noinfo(); } else { memmove(Destination, &Source, v22); } v26 = v161; } if ( !(_DWORD)v106 ) { LABEL_194: v26 = 0; goto LABEL_195; } if ( (_DWORD)v106 == 1 || !v26 ) goto LABEL_247; LODWORD(v22) = 0; v107 = 0; do { v108 = (unsigned int)v22 + v106 * (unsigned int)Destination[v107]; Destination[v107] = v108; v22 = HIDWORD(v108); v107 = (unsigned int)(v107 + 1); } while ( (_DWORD)v107 != v26 ); } else { if ( !Source ) goto LABEL_194; if ( Source == 1 || !v26 ) goto LABEL_247; LODWORD(v22) = 0; v102 = Source; v103 = 0; do { v104 = (unsigned int)v22 + v102 * (unsigned int)Destination[v103]; Destination[v103] = v104; v22 = HIDWORD(v104); v103 = (unsigned int)(v103 + 1); } while ( (_DWORD)v103 != v26 ); } if ( !(_DWORD)v22 ) goto LABEL_246; if ( v161 < 0x73 ) { Destination[v161] = v22; v26 = v161 + 1; LABEL_195: v161 = v26; LABEL_247: v105 = 1; goto LABEL_248; } v26 = 0; v161 = 0; v105 = 0; LABEL_248: if ( !v105 ) goto LABEL_261; v22 = 0x180000000uLL; v23 = v146 == v150; v95 = v146 - v150; v146 -= v150; if ( v23 ) { v93 = -v144; v94 = -v144 / 0xA; LABEL_251: v120 = v93 - 10 * v94; if ( !v120 ) goto LABEL_181; v121 = dword_18017B018[v120 - 1]; if ( v121 ) { if ( v121 == 1 || !v26 ) goto LABEL_181; LODWORD(v22) = 0; v122 = 0; do { v123 = (unsigned int)v22 + v121 * (unsigned __int64)(unsigned int)Destination[v122]; Destination[v122] = v123; v22 = HIDWORD(v123); v122 = (unsigned int)(v122 + 1); } while ( (_DWORD)v122 != v26 ); if ( !HIDWORD(v123) ) { v26 = v161; goto LABEL_181; } if ( v161 < 0x73 ) { Destination[v161] = HIDWORD(v123); v26 = ++v161; goto LABEL_181; } } goto LABEL_261; } } } v59 = v144 / 0xA; v60 = v144 / 0xA; v147 = v144 / 0xA; if ( !(v144 / 0xA) ) goto LABEL_171; do { v61 = v60; if ( v60 > 0x26 ) v61 = 38; v149 = v61; v62 = (unsigned int)(v61 - 1); v63 = (unsigned int)v62; v64 = (unsigned __int8)byte_18017AF83[4 * v62]; v65 = 4LL * (unsigned __int8)byte_18017AF82[4 * v62]; v165 = v64 + (unsigned __int8)byte_18017AF82[4 * v62]; memset(&Source, 0, v65); memmove((char *)&Source + v65, (char *)&unk_18017A670 + 4 * (unsigned __int16)word_18017AF80[2 * v63], 4 * v64); v66 = v165; if ( v165 > 1 ) { if ( v33 > 1 ) { v74 = v33; v75 = &Source; if ( v165 < v33 ) v74 = v165; else v75 = v164; v151 = v75; v145 = v74; v76 = v164; if ( v165 >= v33 ) v76 = &Source; Xa = v76; if ( v165 < v33 ) v66 = v33; v33 = 0; v77 = 0; v168 = 0; do { v78 = v75[v77]; if ( (_DWORD)v78 ) { LODWORD(v79) = 0; v22 = (unsigned int)v77; if ( v66 ) { while ( (_DWORD)v22 != 115 ) { v80 = (unsigned int)v22; if ( (_DWORD)v22 == v33 ) { Src[(unsigned int)v22] = 0; v168 = v22 + 1; } v81 = (unsigned int)(v22 - v77); v22 = (unsigned int)(v22 + 1); v82 = (unsigned int)Src[v80] + (unsigned int)v79 + v78 * v76[v81]; Src[v80] = v82; v33 = v168; v79 = HIDWORD(v82); if ( (_DWORD)v22 - (_DWORD)v77 == v66 ) break; v76 = Xa; } if ( (_DWORD)v79 ) { while ( (_DWORD)v22 != 115 ) { v83 = (unsigned int)v22; if ( (_DWORD)v22 == v33 ) { Src[(unsigned int)v22] = 0; v168 = v22 + 1; } v84 = (unsigned int)Src[(unsigned int)v22]; v22 = (unsigned int)(v22 + 1); Src[v83] = v84 + v79; v33 = v168; LODWORD(v79) = (v84 + (unsigned __int64)(unsigned int)v79) >> 32; if ( !(_DWORD)v79 ) goto LABEL_158; } goto LABEL_187; } LABEL_158: v74 = v145; } if ( (_DWORD)v22 == 115 ) goto LABEL_187; v75 = v151; v76 = Xa; } else if ( (_DWORD)v77 == v33 ) { Src[v77] = 0; v33 = v77 + 1; v168 = v77 + 1; } v77 = (unsigned int)(v77 + 1); } while ( (_DWORD)v77 != v74 ); v22 = 4LL * v33; v163 = v33; if ( !v22 ) goto LABEL_167; if ( v22 > 0x1CC ) { memset(v164, 0, sizeof(v164)); *errno() = 34; invalid_parameter_noinfo(); } else { memmove(v164, Src, v22); } LABEL_166: v33 = v163; goto LABEL_167; } v71 = v164[0]; v22 = 4LL * v165; v33 = v165; v163 = v165; if ( v22 ) { if ( v22 > 0x1CC ) { memset(v164, 0, sizeof(v164)); *errno() = 34; invalid_parameter_noinfo(); } else { memmove(v164, &Source, v22); } v33 = v163; } if ( !(_DWORD)v71 ) { LABEL_114: v33 = 0; goto LABEL_115; } if ( (_DWORD)v71 == 1 || !v33 ) goto LABEL_167; LODWORD(v22) = 0; v72 = 0; do { v73 = (unsigned int)v22 + v71 * (unsigned int)v164[v72]; v164[v72] = v73; v22 = HIDWORD(v73); v72 = (unsigned int)(v72 + 1); } while ( (_DWORD)v72 != v33 ); } else { if ( !Source ) goto LABEL_114; if ( Source == 1 || !v33 ) goto LABEL_167; LODWORD(v22) = 0; v67 = Source; v68 = 0; do { v69 = (unsigned int)v22 + v67 * (unsigned int)v164[v68]; v164[v68] = v69; v22 = HIDWORD(v69); v68 = (unsigned int)(v68 + 1); } while ( (_DWORD)v68 != v33 ); } if ( !(_DWORD)v22 ) goto LABEL_166; if ( v163 >= 0x73 ) { v33 = 0; v163 = 0; v70 = 0; goto LABEL_168; } v164[v163] = v22; v33 = v163 + 1; LABEL_115: v163 = v33; LABEL_167: v70 = 1; LABEL_168: if ( !v70 ) goto LABEL_187; v23 = v147 == v149; v60 = v147 - v149; v22 = 38; v147 -= v149; } while ( !v23 ); v59 = v144 / 0xA; LABEL_171: v85 = 10 * v59; if ( v144 != v85 ) { v86 = dword_18017B018[v144 - v85 - 1]; if ( !v86 ) goto LABEL_187; if ( v86 != 1 && v33 ) { LODWORD(v22) = 0; v87 = 0; do { v88 = (unsigned int)v22 + v86 * (unsigned __int64)(unsigned int)v164[v87]; v164[v87] = v88; v22 = HIDWORD(v88); v87 = (unsigned int)(v87 + 1); } while ( (_DWORD)v87 != v33 ); if ( HIDWORD(v88) ) { if ( v163 < 0x73 ) { v164[v163] = HIDWORD(v88); v33 = v163 + 1; goto LABEL_188; } LABEL_187: v33 = 0; LABEL_188: v163 = v33; } else { v33 = v163; } } } LABEL_181: v89 = v158; v90 = v158; if ( v26 ) { LODWORD(v22) = 0; v91 = 0; do { v92 = (unsigned int)v22 + 10LL * (unsigned int)Destination[v91]; Destination[v91] = v92; v91 = (unsigned int)(v91 + 1); v22 = HIDWORD(v92); } while ( (_DWORD)v91 != v26 ); if ( (_DWORD)v22 ) { if ( v161 >= 0x73 ) { v165 = 0; v161 = 0; memcpy_s(Destination, 0x1CCu, &Source, 0); } else { Destination[v161++] = v22; } } } LABEL_263: v124 = __crt_strtox::divide( (__crt_strtox *)&v161, (struct __crt_strtox::big_integer *)&v163, (const struct __crt_strtox::big_integer *)v22); v125 = (((int)v17 - 0x7FFFFFFF) & 0xFFFFFFFE) != 0 ? (int)v17 : 0; if ( v124 == 10 ) { v125 = v144 + 1; *v89 = 49; v90 = v89 + 1; if ( v33 ) { LODWORD(v126) = 0; v127 = 0; do { v128 = (unsigned int)v126 + 10LL * (unsigned int)v164[v127]; v164[v127] = v128; v127 = (unsigned int)(v127 + 1); v126 = HIDWORD(v128); } while ( (_DWORD)v127 != v33 ); if ( (_DWORD)v126 ) { if ( v163 >= 0x73 ) { v165 = 0; v163 = 0; memcpy_s(v164, 0x1CCu, &Source, 0); } else { v164[v163++] = v126; } } } } else if ( v124 ) { v90 = v89 + 1; *v89 = v124 + 48; } else { v125 = v144 - 1; } v129 = v153; *(_DWORD *)(v160 + 4) = v125; if ( v125 >= 0 && v153 <= 0x7FFFFFFF && !v157 ) v129 = v125 + v153; v130 = v129; if ( SizeInBytes - 1 < v129 ) v130 = SizeInBytes - 1; v131 = &v89[v130]; v132 = 0; if ( v90 == v131 ) { LABEL_297: v133 = v161; } else { while ( 1 ) { v133 = v161; if ( !v161 ) break; LODWORD(v134) = 0; v135 = 0; do { v136 = (unsigned int)v134 + 1000000000LL * (unsigned int)Destination[v135]; Destination[v135] = v136; v134 = (const struct __crt_strtox::big_integer *)HIDWORD(v136); v135 = (unsigned int)(v135 + 1); } while ( (_DWORD)v135 != v133 ); if ( HIDWORD(v136) ) { if ( v161 >= 0x73 ) { v165 = 0; v161 = 0; memcpy_s(Destination, 0x1CCu, &Source, 0); } else { Destination[v161++] = HIDWORD(v136); } } v137 = __crt_strtox::divide((__crt_strtox *)&v161, (struct __crt_strtox::big_integer *)&v163, v134); for ( i = 8; i != -1; --i ) { v139 = v137 % 0xA + 48; v137 /= 0xAu; if ( (int)v131 - (int)v90 > i ) { v90[i] = v139; } else if ( v139 != 48 ) { v132 = 1; } } v140 = v131 - v90; if ( v131 - v90 > 9 ) v140 = 9; v90 += v140; if ( v90 == v131 ) goto LABEL_297; } } *v90 = 0; if ( v133 || v132 ) LABEL_305: v8 = 0; LABEL_306: if ( v155 ) fesetenv(&Env); return v8; }